Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

sk2:zajecia_zdalne

To jest stara wersja strony!


Instrukcje do zdalnych zajęć

Narzędzia

Do zajęć zdalnych koniecznie musicie mieć do dyspozycji:

  • system operacyjny GNU/Linux
  • dowolny współczesny kompilator C/C++:
    • polecane: GCC w wersji ≥9 lub Clang w wersji ≥ 9
    • uwaga: proszę sprawdzić działanie kompilatora na przykładowym pliku - plik powinien się kompilować komendą c++ -pthread --std=c++2a l4_z1_lambda.cpp1)
  • IDE lub edytor tekstowy do pisania kodu:
    • przykładowe IDE: kdevelop, QtCreator, CLion (wersja dla edukacji jest bezpłatna)
    • przykładowo edytory: VS Code, Geany, Code::Blocks, CodeLite
  • narzędzia:
    • do uruchamiania prostych połączeń sieciowych: nc/ncat/netcat/socat
    • do wyświetlania istniejących połączeń: netstat/ss

Dodatkowo warto zainstalować:

  • strony podręcznika systemowego (man)
  • narzędzia:
    • gdb (debugger)
    • valgrind (narzędzie znajdujące błędy zarządzania pamięcią)
    • strace (narzędzie wyświetlające i tłumaczące wywołania systemowe)
    • wireshark
  • wygodny emulator terminala

Metoda #1: Udostępnienie VNC prowadzącemu

# tl;dr (czyli dla osób które chcą gotowe polecenia i nie chce im się czytać dalej)
wget http://www.cs.put.poznan.pl/jkonczak/pub/sk2/sk2-vpn-ca.crt
sudo openvpn --dev tap --client --ca sk2-vpn-ca.crt --auth-user-pass --daemon --remote ipv4.jprofesorek.mooo.com
x11vnc -quiet -nopw -forever -display :0 & disown
sleep 5
ip -4 addr show dev tap0

Krok 1: dołączenie do VPNa

W trakcie zajęć wykorzystywany będzie OpenVPN. Należy zainstalować odpowiednią paczkę (zwykle o nazwie openvpn) w systemie z którego będzie udostępniany ekran.

Uwaga: VPN jest skonfigurowany tak, by była łączność między wszystkimi podłączonym osobami, co będzie wykorzystywane w trakcie zajęć, ale niesie za sobą dość oczywiste konsekwencje bezpieczeństwa.

Do uruchomienia VPNa potrzebny jest:

  • plik CA: sk2-vpn-ca.crt,
  • adres: ipv4.jprofesorek.mooo.com,
  • informacja że VPN pracuje na warstwie 2 modelu ISO/OSI, tzn. device tap
  • (port i protokół domyślne - 1194/udp)
  • nazwa użytkownika i hasło, przekazane innym kanałem przez prowadzącego.
    Nazwę użytkownika i hasło można dla wygody wpisać do pliku o nieskomplikowanym formacie:
    userPass.txt
    theExampleUsername
    someIncorrectPassword

    Uwaga: plikz hasłem musi mieć uprawnienia zabraniające odczyt komukolwiek poza bieżącym użytkownikiem (do ustawienia uprawnień można użyć np. chmod go-rwx userPass.txt)

Polecenie uruchamiające VPNa, należy je uruchamiać z roota (wybierz jedno):

  • Wersja 1 - wszystko w linii poleceń:
    openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com

    Uwaga 1: można pominąć nazwę pliku /somewhere/userPass.txt, wtedy program pyta o nazwę użytkownika / hasło.
    Uwaga 2: można dodać opcję --daemon, która przenosi program w tło. Bez tej opcji program openvpn zajmuje konsolę (a zamknięcie okna z konsolą przerywa połączenie).

  • Wersja 2 - przygotuj plik konfiguracyjny:
    sk2-vpn.ovpn
    client
    remote ipv4.jprofesorek.mooo.com
    dev tap
    ca /somewhere/sk2-vpn-ca.crt
    auth-user-pass /somewhere/userPass.txt
    #daemon

    następnie uruchom polecenie:

    openvpn --config sk2-vpn.ovpn
  • Wersja 3 - użyj graficznego konfiguracja dla NetworkManagera (ta wersja potrzebuje NetworkManagera i może potrzebować dodatkowych pakietów, np. network-manager-openvpn-gnome).

Sprawdzenie czy wszystko poszło dobrze: po wykonaniu wybranej z komend, w wynikach komendy ip address powinien pojawić się interfejs tap0 z adresem IP z sieci 10.0.9.0/24. Dodatkowo powinna działać komenda ping 10.0.9.1.

Dla zainteresowanych konfiguracja serwera

Krok 2: uruchomienie VNC

Przykładowe polecenie używa serwer x11vnc aby udostępnić bieżącą sesję graficzną.
Możecie oczywiście użyć dowolnego innego serwera VNC, np. TigerVNC, który pozwala zarówno udostępnić bieżącą sesję (np. x0vncserver --SecurityTypes None) jak i stworzyć nową wirtualną sesję Xów (bez konieczności wykorzystania Xvfb).

Udostępnienie całej sesji graficznej:

x11vnc -forever -display :0 & disown

W powyższym poleceniu & disown wrzuca program w tło i odłącza program od bieżącego terminala.

Oczywiście normalnie VNC pozwala na kontrolę myszy i klawiatury. W x11vnc można dodać opcję -viewonly żeby pozwolić tylko na podglądanie ekranu.
Inne przydatne opcje to -quiet która zmniejsza gadatliwość standardowego wyjścia i -nopw która pomija komunikat że serwer nie jest chroniony hasłem.

Można poeksperymentować z udostępnieniem części ekranu (poniższe polecenia wymagają zainstalowania xwininfo do wyboru okna).
Udostępnienie jednego okna (nie udostępnia innych okien, np. oknien dialogowych czy okien menu):
x11vnc -forever -id pick -connect :0
Udostępnienie obszar jednego okna (uwaga: jeśli je coś zasłoni, x11vnc przesyła to co je zasłoniło):
x11vnc -forever -sid pick -connect :0
Udostępnienie jednej aplikacji (uwaga: u mnie nie działało prawidłowo):
x11vnc -appshare -id pick -connect :0

Aby sprawdzić czy VNC działa prawidłowo, należy spróbować połączyć się do (z innego komputera) np. poleceniem

vncviewer <ip lub nazwa domenowa>

Po uruchomieniu VPN i VNC należy na początku zajęć przesłać do prowadzącego swój adres IP z sieci 10.0.9.0/24.

Metoda #2: Wtyczka 'Live Share' w VS code

Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia Live Share.

  1. pobrać i zainstalować VS Code,
  2. zainstalować wtyczkę Live Share (menu view/extensions),
  3. wybrać 'live share' (1), wystartować współdzielenie (2), wybrać 'invite' (3) i przekazać link prowadzącemu (numery odnoszą się do ilustracji poniżej)
  4. po pojawieniu się prośby o dołączenie osoby, zaakceptować tę prośbę.

Uwaga: Osoby korzystające z tej metody powinny:

  • uruchomić u siebie usługę daytime na TCP i UDP
  • lub wykonać z roota polecenie zastępujące daytime, np:
    socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &
1) jeśli kompilator narzeka na --std=c++2a, to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z --std=c++1z, to na potrzeby zajęć wystarczy
sk2/zajecia_zdalne.1604414677.txt.gz · ostatnio zmienione: 2020/11/03 15:44 przez jkonczak