OpenSSH für User

Remotelogin

Beim ersten Anmelden auf einem Host wird fingerprint des Hosts angezeigt. Dieser muss jeweils bestätigt werden. Dieser sollte, wenn möglich überprüft werden um sicher zu sein nicht auf einem falschen Host einzuloggen.

marius@linux:~$ ssh server.example.com
The authenticity of host 'server.example.com (192.168.32.46)' can't be established.
RSA key fingerrint is d6:0f:99:fc:74:1b:a2:67:36:b6:72:84:9e:3a:51:ae.
Are you sure you want to continue connecting (yes/no?) yes
Warning: Permanently added 'server.example.com,192.168.32.46' (RSA) to the list of known hosts.
marius@server.example.com's password: ******
marius@server:~$

Der fingerprint kan auch jederzeit später noch überprüft werden mit hilfe von ssh-keygen.

marius@linux:~$ ssh-keygen -F server.example.com
# Host server.example.com found: line 3 type RSA
server.example.com,192.168.32.46 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwMtHNpZ+3kbpD2ld
snIRNyMufgQkvniwDICLbQWKIQiQdz+b/RRqszjMLcg9ZFLAZFxsPHhXY2PfPMMOjnr3+SCKHClgq+A0
TAoIDnsaDufK5j03C0mUwx2C7mLz3CuHYtMn2nRrQUX8oyi9aVxhalGzcz1zi/3TbJmDsFviPDU=  

Wenn man sich mit einem anderen Ustername als lokal anmelden will, dann gibt es zwei möglichkeiten ssh das mitzuteilen.

marius@linux:~$ ssh -l mariusr server.example.com
mariusr@server.example.com's password: ******
mariusr@wigwam:~$
marius@linux:~$ ssh nicole@server.example.com
mariusr@server.example.com's password: ******
mariusr@server:~$ 

Wenn man nur ein Befehl auf einem anderen host ausführen möchte, so kann man den Befehl auch direkt mitgeben.

marius@linux:~$ ssh server.example.com hostname -f
marius@server.example.com's password: ******
server.example.com
marius@linux:~$ 

Remote Copy

Mit scp lassen sich Dateien auch auf andere Hosts kopieren. Dazu wird die Datei durch den SSH-Tunnel übertragen. So ist sie auch gleich noch vor Mitlesern geschützt.

marius@linux:~$ scp index.htm server.example.com:~/public_html/
marius@server.example.com's password: ******
index.htm 					100%  10KB  10.0KB/s  00:00
marius@linux:~$

Das ganze geht natürlich in die umgekehrte Richtung.

marius@linux:~$ scp server.example.com:~/public_html/index.htm .
marius@server.example.com's password: ******
index.htmm					100%  10KB  10.0KB/s  00:00
marius@linux:~$ 

Eine andere möglichkeit Dateien übers Netzwerk zu kopieren ist sftp. Dabei werden dei ftp-Befehle benutzt um die Dateien hin und her zu schieben. Auch hier geht alles über einen verschlüsselten SSH-Tunnel.

marius@linux:~$ sftp server.example.com
Connecting to server.example.com,192.168.32.46...
marius@server.example.com,192.168.32.46's password: ******
sftp> cd public_html
sftp> put index.htm
Uploading index.htm to /home/marius/public_html/index.html
index.htmm					100%  10KB  10.0KB/s  00:00
sftp> ls
index.html
sftp> get index.htm
Fetiching /home/marius/public_html/index.html to index.html
index.htm					100%  10KB  10.0KB/s  00:00
sftp> quit
marius@linux:~$

Key's

Um sich nicht jedes mal sein Passwort eingeben zu müssen kann man Keys erstellen und sich per Public-Key authentifizieren.

marius@linux:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/marius/.ssh/id_dsa): <ENTER>
Enter passphrase (empty for no passphrase): <ENTER>
Your identification has been saved in /home/marius/.ssh/id_dsa.
Your public key has been saved in /home/marius/.ssh/id_dsa.pub.
The key fingerprint is:	70:a2:31:0e:23:5e:69:bc:fc:af:4e:4b:4d:86:e4:fe marius@linux
marius@linux:~$

Danach muss man den Public-Key auf die Hosts kopieren, damit das Login per Key funktioniert. Dies geht am einfachsten mit ssh.

marius@linux:~$ cat .ssh/id_dsa.pub | ssh server.example.com cat ">>" .ssh/authorized_keys
marius@server.example.com's password: ******
marius@linux:~$

Danach kann man sich ohne ein password einzugeben anmelden.

rdm@linux:~$ ssh wigwam.lugs.ch
rdm@wigwam:~$

Allerding sollte man die Keys nicht unverschlüsselt rumliegen lassen. Deshalb sollte man den Schlüssel mittels eines Passwords verschlüsseln.

rdm@linux:~$ ssh-keygen -p -f .ssh/id_dsa
Key has comment '.ssh/id_dsa'
Enter new passphrase (empty for no passphrase): ******
Enter same passphrase again: ******
Your identification has been saved with the new passphrase.
rdm@linux:~$  

Um danach nicht für jeden gebrauch des Keys das Key-Password eingeben zu müssen startet man den ssh-agent und fügt den Key mit ssh-add hinzu.

rdm@linux:~$ eval `ssh-agent`
Agent pid 5937
rdm@linux:~$ ssh-add
Enter passphrase for id_dsa: ******
Identity added: /home/rdm/.ssh/id_dsa (/home/rdm/.ssh/id_dsa)
rdm@linux:~$

Das starten des ssh-agent sollte wenn möglich gleich beim einloggen geschehen, damit alle Subshells auch auf den Agent zugreifen können und nicht einen eigenen starten müssen. Wenn der Agent nicht mehr gebraucht wird kann man ihn auch stopen.

rdm@linux:~$ ssh-agent -k
Agent pid 5937 killed
rdm@linux:~$