itoutline.me

 

SSH tips

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.

Obsluga ssh-agent w .bash_profile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SSH_ENV=$HOME/.ssh/environment

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
     echo succeeded
     chmod 600 ${SSH_ENV}
     . ${SSH_ENV} > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

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

Comments