Kilka usprawnień i wskazówek ułatwiających korzystanie z SSH.
Konfiguracja hostów zdalnych
Korzystanie z pliku ~/.ssh/config
ułatwia łączenie się ze zdalnymi hostami. Wystarczy wpisać ssh
, pierwszą literę hosta i wcisnąć klawisz ⇥ tab. Nie trzeba pamiętać o porcie, użytkowniku, parametrach połączenia. ForwardX11 yes
umożliwia uruchamianie aplikacji graficznych (oczywiście musimy mieć uruchomiony na kliencie serwer X-ów). Poniżej przykładowy plik:
Host centos-01
HostName 192.168.1.190
User itoutline
ForwardX11 yes
Host openwrt
Hostname 192.168.1.1
User root
Host appletv
Hostname 192.168.1.60
User root
Host workstation
Hostname 192.168.1.1
Port 8511
User itoutline
Automatyczne logowanie
Umieszczenie naszego klucza publicznego w pliku ~/.ssh/authorized_keys
na serwerze umożliwia zalogowanie się bez użycia hasła. Najpierw musimy wygenerować parę kluczy np.:
[itoutline@centos-01 ~]$ ssh-keygen -t rsa -C "itoutline@centos-01"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/itoutline/.ssh/id_rsa):
Created directory '/home/itoutline/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/itoutline/.ssh/id_rsa.
Your public key has been saved in /home/itoutline/.ssh/id_rsa.pub.
The key fingerprint is:
81:c4:99:69:cd:c5:39:d8:01:26:f7:bd:05:3a:bd:df itoutline@centos-01
The key's randomart image is:
+--[ RSA 2048]----+
| .o*+*oo. |
| .*=+.=+ . |
| .. . +.o . |
| . . + |
| S o |
| . . |
| . E|
| |
| |
+-----------------+
Niepodanie “passphrase” podczas generowania kluczy spowoduje, że zawsze będziemy mogli zalogować się na zdalnego hosta. Ma to jednak zasadniczy minus, ktoś kto zdobędzie nasz klucz prywatny zapisany w pliku /home/itoutline/.ssh/id_rsa
zaloguje się bezproblemowo wszędzie tam gdzie dodaliśmy nasz klucz publiczny do ~/.ssh/authorized_keys
. Trochę jak zapisanie hasła w pliku tekstowym…
Pozostaje skopiowanie klucza publiczngo na zdalny serwer, można to zrobić np. za pomocą ssh-copy-id
:
[itoutline@centos-01 ~]$ ssh-copy-id centos-03
The authenticity of host 'centos-03 (192.168.1.200)' can't be established.
RSA key fingerprint is 5b:85:ee:ee:d5:12:a3:f1:fe:10:5f:4d:66:f5:e5:7a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'centos-03' (RSA) to the list of known hosts.
itoutline@centos-03's password:
Now try logging into the machine, with "ssh 'centos-03'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
W przypadku kiedy ssh nasłuchuje na porcie innym niż standardowy można użyć polecenia
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 2222 itoutline@centos-03"
Jeśli mamy więcej niż jeden klucz publiczny w katalogu ~/.ssh
warto podać jego nazwę (jak w ostatnim przykładzie) ponieważ ssh-copy-id
kopiuje wszystkie jakie znajdzie.
Jeśli na kliencie polecenie ssh-copy-id
jest niedostępne, można wykorzystać poniższego one-linera:
cat ~/.ssh/id_rsa.pub | ssh itoutline@centos-03 “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys”
Jeśli zdecydujemy się na używanie “passphrase” z pomocą przyjdzie nam ssh-agent
, umożliwia on zapamiętanie naszego klucza prywatnego poświadczonego “passphrase” do czasu np. restartu hosta.
Przykładowy kod dodany do .bash_profile
lub .bashrc
załatwiający obsługę ssh-agent
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Teraz kiedy po raz pierwszy zalogujemy się na centos-01, zobaczymy coś takiego:
[itoutline.sputnik: itoutline]$ ssh centos-01
Last login: Sun Mar 31 11:17:17 2013 from sputnik.local
Initialising new SSH agent...
succeeded
Enter passphrase for /home/itoutline/.ssh/id_rsa:
Identity added: /home/itoutline/.ssh/id_rsa (/home/itoutline/.ssh/id_rsa)
Wejście na centos-03 odbędzie się już bez podawania żadnych poświadczeń:
[itoutline@centos-01 ~]$ ssh centos-03
Last login: Sun Mar 31 11:20:40 2013 from centos-01.local
[itoutline@centos-03 ~]$
Modyfikacja “passphrase”
Następujące polecenie umożliwia dodanie, usunięcie lub zmianę “passphrase” w przypadku istniejących kluczy:
ssh-keygen -p -f $HOME/.ssh/id_rsa
[itoutline@centos-01 ~]$ ssh-keygen -p -f $HOME/.ssh/id_rsa
Enter old passphrase:
Key has comment '/home/itoutline/.ssh/id_rsa'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
Uruchamianie aplikacji graficznych przez SSH
Na maszynach wirtualnych instaluję z reguły minimalną wersję systemu plus to co akurat chce sprawdzić. Rzadko kiedy pojawia się konieczność skorzystania z grafiki a jeśli już to wystarczy doinstalować tylko środowisko X. Dzięki czemu wirtualna maszyna jest “lżejsza”.
Nawiązanie sesji SSH ze wsparciem dla X-ów ssh -X centos-03
Po stronie serwera w konfiguracji /etc/ssh/sshd_config
musi znaleźć się linia X11Forwarding yes
Uruchomienie linuxowego kalkulatora na pulpicie OSX (XQuartz musi być zainstalowany i uruchomiony):
[itoutline.sputnik: itoutline]$ ssh -X centos-01
Last login: Sun Mar 31 15:08:49 2013 from sputnik.local
[itoutline@centos-01 ~]$ gcalctool &
Jeśli pojawia się poniższy problem:
(gcalctool:3141): Gtk-WARNING **: cannot open display:
Może oznaczać, że zmienna DISPLAY
na kliencie nie jest ustawiona, można to naprawić dodając poniższą linię do .bash_profile
lub .bashrc
export DISPLAY=:0