Autorem wpisu jest Jakub Z., ten wpis bierze udział w konkursie – pozostałe prace konkursowe.
W nawiązaniu do ostatnio opublikowanego artykułu (Wydajniejsza praca z SSH), chciałem powiedzieć w jaki sposób możemy ułatwić sobie życie, gdy pracujemy przez SSH.
Po pierwsze: screen
Sesja SSH czasami działa jak złoto, a czasem potrafi być bardzo niestabilna. Nikt chyba nie lubi, gdy nagle – w środku modyfikacji jakiegoś pliku – wszystko przestanie działać, bo połączenie zostało zerwane albo chwilowo straciliśmy Wi-Fi. Po ponownym zalogowaniu, niestety, wita nas znak zachęty BASH-a w katalogu domowym, a po naszej pracy mamy co najwyżej ślady w ~/.bash_history. Na szczęście dobrzy ludzie stworzyli screen.
Aby zainstalować aplikację, używamy menedżera pakietów lub czegokolwiek pozwalającego instalować oprogramowanie w naszej dystrybucji. Dla Debianów i Ubuntu polecenie może wyglądać tak:
# aptitude install screen
.
W moim Gentoo jest to natomiast
# emerge -av screen
.
W zasadzie więcej nie trzeba robić. Można teraz połączyć się z komputerem za pomocą SSH. Po połączeniu wydajemy polecenie $ screen
.
Pozornie nic się nie zmieniło. Przeprowadźmy jednak prosty test:
$ vi ~/.bash_history
i zmieńmy kilka znaków (nie zapisując). Teraz… rozłączmy się z siecią. W zależności od różnych ustawień sesja SSH padnie w ciągu kilku sekund lub nawet kilku minut. Chodzi w każdym razie o zasymulowanie zerwania połączenia. Można też postąpić mniej drastycznie i po prostu ubić klienta SSH.
Podłączmy się ponownie. Po podłączeniu wygląda, że nic się nie poprawiło. A jednak! Wydajmy polecenie $ screen -dr
. Opcja ‘r’ (ang. reattach) każe podłączyć się do istniejącej sesji. Literkę ‘d’ podaję z przyzwyczajenia – czasem zdarza się, że screen nie zauważy faktu zerwania połączenia i dostalibyśmy komunikat o niemożności załadowania sesji, a tak screen wymusi odłączenie i wczyta nam sesję bez narzekań.
Screen umożliwia wiele więcej. Kombinacja klawiszy Ctrl+a, po której następuje Ctrl+c utworzy nam drugie okno. Pierwsze zostanie ukryte, jednak cały czas będzie w nim działać wszystko, cokolwiek tam uruchomiliśmy. Ctrl+a ” (podwójny cudzysłów)
pokaże listę otwartych okien, a Ctrl+a A pozwoli zmienić nazwę aktywnego okna.
Do wyjścia ze screena możemy wykorzystać Ctrl+a Ctrl+d. Zazwyczaj jednak kończąc pracę ze screenem, kończymy też sesję ze
zdalnym hostem, więc możemy użyć Ctrl+ D D, co zamknie screena i wyloguje nas z sesji SSH.
Screen ma wiele innych możliwości, jak tworzenie regionów (kilku okien widocznych na raz w terminalu), czy nawet pracę wielu użytkowników na tym samym oknie. Są to jednak rzeczy które nadają się raczej na osobny artykuł. Manual do screena ma ~2300 linii;P.
Logowanie bez hasła
Jeżeli w domu mamy komputer stacjonarny, do którego często łączymy się laptopa, to ciągłe podawanie hasła bywa męczące. A gdyby tak nasz komputer potrafił rozpoznać nas dlatego, że korzystamy z konkretnego konta użytkownika na konkretnym innym komputerze (np. naszym laptopie)? Spróbujmy to osiągnąć.
Zaczynamy od wydania komendy (na laptopie)
$ ssh-keygen
.
Program zapyta, gdzie zapisać plik (zostawmy domyślną lokalizację) i o hasło (może być puste, wtedy rzeczywiście będziemy logować się bez hasła). Pozostaje poinformować zdalny komputer, że chcemy się uwierzytelniać za pomocą tego klucza. Wykonujemy
$ ssh-copy-id uzyszkodnik@adres.kompa
,
gdzie adres.kompa może być nazwą domenową lub adresem IP. Ostatni raz podajemy hasło. Od tej pory będziemy mogli logować się bez hasła.
Wiele komputerów zdalnych – jedno hasło (lub jego brak)
Innym zastosowaniem poprzedniej porady może być uniwersalne logowanie do wielu komputerów (np komputera domowego, komputera na uczelni …). Aby to osiągnąć, powtarzamy operację kopiowania klucza dla każdego komputera, na który chcemy się logować. Jeżeli zostawiliśmy puste hasło, to logowanie na każdy komputer możliwe będzie bez znajomości hasła. W przypadku, gdy jednak ustawiliśmy hasło dla naszego klucza, będzie ono wymagane przed każdym połączeniem, czyli osiągniemy
logowanie do wielu hostów zdalnych za pomocą jednego hasła.
Przyspieszmy to!
Co powiedzielibyście, gdyby jedną krótką komendą można było siępodłączyć do swojego screena na zdalnym komputerze bez hasła? Otwórzmy ~/.bashrc. Pod koniec tego pliku jest zdefiniowanych kilka aliasów. Dodamy tam własny. Dopiszmy więc alias dom='ssh -t uzyszkodnik@adres.komputera.domowego screen -dR'
.
Od teraz, w każdej nowej powłoce, wpisanie $ dom
spowoduje otwarcie sesji screena na domowym komputerze. Podobne aliasy możemy zdefiniować dla innych komputerów, z którymi chcemy się łączyć. Jeżeli wykonamy także porady dotyczące logowania za pomoca kluczy RSA, możemy uzyskać wrażenie, że cały czas pracujemy na lokalnym komputerze.
Na koniec wspomnę tylko, że opcje ‘-dR’ w aliasie są moją osobistą preferencją. Spowodują one, że ponowne podłączenie z drugiego terminala spowoduje odłączenie screena jeżeli był podpięty do innej sesji. Możemy tu wykorzystać np opcje ‘-xRR’ by zawsze ładować pierwszą dostępną sesję (tak – można mieć ich wiele na raz) screena lub tworzyć nową. Po szczególy odsyłam do manuala, gdyż omówienie różnych kombinacji zajęłoby pewnie jeszcze ze dwa posty.
W artykule opierałem się na założeniu, że wszystkie nasze maszyny są “powered by Linux”. Te same efekty możemy jednak osiągnąć, jeżeli na laptopie mamy system Microsoftu, czy BSD lub gdy używamy odpowiedniego oprogramowania na smartfonach i palmtopach.
26 maja, 2011 at 23:40
Kolega się rozpisał, a ja polecam na deser: http://www.nibyblog.pl/ssh-bezhaslowe-logowanie-c… http://www.nibyblog.pl/aliasy-efektywna-i-szybka-…
27 maja, 2011 at 0:31
Słabizna :)
27 maja, 2011 at 16:13
sbl Twój wpis lepszy c'nie?
27 maja, 2011 at 12:28
Super!
27 maja, 2011 at 17:45
Polecam raczej tmux'a, zamiast screen'a. Dużo bardziej konfigurowalny i o wiele mniejsze zużycie pamięci.