SSH: Unterschied zwischen den Versionen
(→hosts: rrz hat kein ssh mehr, netcat-Quelle, Erläuterung DynamicForward) |
|||
Zeile 66: | Zeile 66: | ||
der Parameter -i gibt hierbei den public-Schlüssel an... | der Parameter -i gibt hierbei den public-Schlüssel an... | ||
Falls man das Programm ssh-copy-id nicht hat (fehlt z.B. auf rzdspc10 und den anderen), kann man den Vorgang auch per Hand durchführen. Man kopiert die Datei "~/.ssh/id_rsa.pub" vom Client, also da wo man sie erstellt hat, auf den Zielrechner, loggt sich dann an dem Zielrechner ein und kopiert den Inhalt ans Ende der Datei ~/.ssh/authorized_keys. "cat mein-key.pub >> ~/.ssh/authorized_keys" auf dem Server ausgeführt reicht dann. | Falls man das Programm ssh-copy-id nicht hat (fehlt z.B. auf rzdspc10 und den anderen), kann man den Vorgang auch per Hand durchführen. Man kopiert die Datei "~/.ssh/id_rsa.pub" vom Client, also da wo man sie erstellt hat, auf den Zielrechner, loggt sich dann an dem Zielrechner ein und kopiert den Inhalt ans Ende der Datei ~/.ssh/authorized_keys. "cat mein-key.pub >> ~/.ssh/authorized_keys" auf dem Server ausgeführt reicht dann. | ||
=== expect === | |||
Expect ist ein kleines Programm, was einen Prozess startet und auf Ausgaben dieses Prozess wartet, um dann Eingaben an den Prozess zu senden. Nun kann man expect nutzen um ein einfaches "login"-Script für die UHH-Firewall zu schreiben, da dort Public-Key Authentifizierung nicht möglich ist. | |||
Nachteil ist natürlich, dass das eigene '''Passwort im Klartext''' im Script zu finden ist. Wenn einen das nicht stört, dann kann man sich ''expect'' installieren und folgendes in eine Datei schreiben: | |||
<pre> | |||
#!/usr/bin/expect -f | |||
set host "10.1.1.10" | |||
set user "3leet@inf" | |||
set pass "geheimes-pw" | |||
spawn ssh -l "$user" "$host" | |||
expect { | |||
"Are you sure you want to continue connecting" { | |||
send "yes\n" | |||
exp_continue | |||
} | |||
"password:" { | |||
send "$pass\n" | |||
interact | |||
} | |||
} | |||
exit | |||
</pre> | |||
nun einfach ausführbar machen und sich ganz fix ohne Passwortabfrage einloggen | |||
chmod +x meine-datei | |||
./meine-datei | |||
Version vom 22. März 2009, 14:43 Uhr
Secure SHell
hosts
ikum: rzdspc10.informatik.uni-hamburg.de
Das regionale Rechenzentrum (rrz) hat seinen ssh-Server abgeschaltet, weil den niemand benötigte...
Konfiguration
Die ~/.ssh/config enthaelt die Konfiguration fuer deinen SSH Client. Dort kann man viele tolle Sachen machen, zB muss man nicht immer ssh rzdspc10.informatik.uni-hamburg.de
machen, sondern bspw. ssh fbi
. Das ist gut.
Mit folgendem Text in deiner ~/.ssh/config kannst du das auch:
Host fbi User 3leet ForwardX11 yes HostName rzdspc10.informatik.uni-hamburg.de DynamicForward 7777 #LocalForward 6631 linuxprint.informatik.uni-hamburg.de:631
Neben dem einfachen "ssh fbi" hast du nun durch
DynamicForward
dauch einen lokalen SOCKS Proxy zum Tunneln. Wenn du mehr tolle Sachen mit deiner SSH-Config-Datei machen willst, schau dir
man ssh_config
an.
zu anderen Hosts
Mit Hilfe einer geeigneten ~/.ssh/config kann man von zu Hause aus sich bequem zu Hosts verbinden, die nicht direkt zugaenglich sind:
Host rzdspc* User 4winter ProxyCommand ssh 4winter@rzdspc10.informatik.uni-hamburg.de /opt/bin/netcat %h %p 2> /dev/null
netcat ist allerdings meistens einfach als
netcat
oder
nc
ansprechbar. In Debian ist netcat im Paket
netcat-openbsd
enthalten.
Und nu:
teythoon@europa$ ssh rzdspc6 Last login: Sun Oct 7 14:05:16 2007 from rzdspc10.inform Sun Microsystems Inc. SunOS 5.10 Generic January 2005 Willkommen auf der SUNW,Sun-Fire-V445 rzdspc6.informatik.uni-hamburg.de Last cluster login: Sun Oct 7 14:03:05 on rzdspc6 rzdspc6$
Public-Key Authentifizierung
Vom Laptop im Netz des Informatikum anmelden, ohne jedesmal das Passwort eingeben zu müssen? Geht auch, und ist dabei trotzdem noch sicher! Auf dem eigenen Laptop muss zuerst ein Public/Private-Schlüsselpaar erstellt werden. Das funktioniert durch das Programm "ssh-keygen" und sieht dann etwa so aus:
olli@desktop:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/olli/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/olli/.ssh/id_rsa. Your public key has been saved in /home/olli/.ssh/id_rsa.pub. The key fingerprint is: bla bla olli@desktop:~$
Man kann alle Abfragen einfach mit Enter bestätigen. Nun muss man dem Server, in diesem Fall rzdspc10, nur noch eine Kopie des Schlüssels zukommen lassen. Das funktioniert vom Laptop aus über ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_rsa.pub 7bestman@rzdspc10.informatik.uni-hamburg.de Password: *passwort* bla bla bla
der Parameter -i gibt hierbei den public-Schlüssel an... Falls man das Programm ssh-copy-id nicht hat (fehlt z.B. auf rzdspc10 und den anderen), kann man den Vorgang auch per Hand durchführen. Man kopiert die Datei "~/.ssh/id_rsa.pub" vom Client, also da wo man sie erstellt hat, auf den Zielrechner, loggt sich dann an dem Zielrechner ein und kopiert den Inhalt ans Ende der Datei ~/.ssh/authorized_keys. "cat mein-key.pub >> ~/.ssh/authorized_keys" auf dem Server ausgeführt reicht dann.
expect
Expect ist ein kleines Programm, was einen Prozess startet und auf Ausgaben dieses Prozess wartet, um dann Eingaben an den Prozess zu senden. Nun kann man expect nutzen um ein einfaches "login"-Script für die UHH-Firewall zu schreiben, da dort Public-Key Authentifizierung nicht möglich ist.
Nachteil ist natürlich, dass das eigene Passwort im Klartext im Script zu finden ist. Wenn einen das nicht stört, dann kann man sich expect installieren und folgendes in eine Datei schreiben:
#!/usr/bin/expect -f set host "10.1.1.10" set user "3leet@inf" set pass "geheimes-pw" spawn ssh -l "$user" "$host" expect { "Are you sure you want to continue connecting" { send "yes\n" exp_continue } "password:" { send "$pass\n" interact } } exit
nun einfach ausführbar machen und sich ganz fix ohne Passwortabfrage einloggen
chmod +x meine-datei ./meine-datei
Nützliche "Tricks"
Mit Hilfe des Port Forwadings kann man auch von Zuhause aus zb das Online Computer Library Center oder die ACM Digital Library durchstöbern:
ssh -L 2222:wwwcache.rrz.uni-hamburg.de:81 <username>@rzdspc10.informatik.uni-hamburg.de
und dann im Browser als Proxy "localhost" mit Port 2222 eintragen. Nachdem man die Verbindung wieder getrennt hat natürlich nicht vergessen die Proxyeinstellungen im Browser wieder zurückzusetzen.
Probleme
- scp will nicht weil Leerzeichem im Pfad/ im Dateinamen sind:
den Pfad in Hochkomma '
setzen oder vor die Leerzeichen ein Backslash\
.
Zwei äquivaltente Beispiele:
Beispiel#$ scp ~/Pfad/z\ u\ r/Datei/Filename\ mit\ Leerzeichen 4user@rzdspc10:~/Zielpfad\ mit\ Leerzei\ chen/fuer/die/Datei/.
Beispiel#$ scp '~/Pfad/z u r/Datei/Filename mit Leerzeichen' 4user@rzdspc10:'~/Zielpfad mit Leerzei chen/fuer/die/Datei/.'
- das Kopieren vieler kleiner Dateien dauert ziemlich lange?
On-the-fly archivieren und entpacken hilft:
ssh <mein-host> 'tar -c /mein/ordner/mit/kleinen/dateien | gzip' | gzip -d | tar -xv
Mit dem Schalter -z Spart man sich die beiden gzip Kommandos.
ssh <mein-host> "tar -cz /mein/ordner/mit/kleinen/dateien" | tar -xzv
Ausserdem kann man bei tar noch das Zielverzeichnis angeben und eventuell eine schnellere Verschlüsselung für ssh benutzen. Bei langsamen Rechnern und hoher Bandbreite macht es Sinn, auf die Kompression zu verzichten.
ssh -c blowfish <mein-host> "tar -c /mein/ordner/mit/kleinen/dateien" | tar -xv -C /hier/hin/