1.) Interaktive SSH-Shell
Wenn man sich gerade in einer SSH-Session befindet und möchte diese spontan zu einem Tunnel umbauen, dann kann man mithilfe weniger Eingaben die interaktive Shell von SSH aufrufen und die Optionen dort direkt übergeben.
Starten der interaktiven SSH-Shell
In der aktiven SSH-Session tätigt man nacheinander folgende Eingaben:
- [Enter]
- ~
- C
Hier kann man nun die entsprechenden Optionen setzen:
ssh> -D 8022
Forwarding port.
2.) Akzeptieren der SSH-Fingerprints
Wer kennt nicht die Hinweise wenn man sich zum ersten Mal zu einem Host per SSH verbindet:
The authenticity of host '[host.tld]:22([1.2.3.4]:22)' can't be established.
ECDSA key fingerprint is SHA256:vCQPSjPNrW6fZW48CimvtDcB05plLJOb5v83GXaAphI.
Are you sure you want to continue connecting (yes/no)?
Diese kann bei der Verwendung von DevOps-Tool wie z.B. Ansible sehr nervend sein.
ssh-keyscan
ssh-keyscan
↨ dient zum Sammeln der öffentlichen SSH-Hostschlüssel, welche dann in die known_hosts
eingetragen werden kann.
Beim einfachen Aufrufen des Tools erfolgt eine Ausgabe nach stdout.
$ ssh-keyscan server.tld
# server.tld:22 SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u7
server.tld ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA....
Diese Ausgabe kann man nun an seine known_hosts
Datei anfügen:
ssh-keyscan <SERVER> >> ~/.ssh/known_hosts
StrictHostKeyChecking
Mithilfe der Option StrictHostKeyChecking=no
lässt sich die SSH-Key-Prüfung gezielt abschalten.
Der vollständige Aufruf lautet hierbei:
ssh -oStrictHostKeyChecking=no <SERVER>
Anmerkung: Seit Ubuntu 18.04 gibt es die Option StrictHostKeyChecking=accept-new
mithilfe, laut man-Page (man 5 ssh_config
), die neue SSH Host-Keys automatisch in die known_hosts
einträgt. Dies funktioniert aber NUR bei neuen Host Keys und somit nicht wenn sich ein bekannter Key geändert hat.
3.) config
Sofern man mehrere Server per SSH kontaktiert, welche jeweils unterschiedliche Optionen (z.B. Benutzername, Port, SSH-Key, etc..) benötigen, sollte man sich eine config
Datei unter ~/.ssh
anlegen in der die entsprechenden Optionen gepflegt werden können..
Beispiel für einen Host-Eintrag:
Host somealias
HostName example.com
Port 2222
User someuser
IdentityFile ~/.ssh/id_example
Erläuterung:
- Host hier kann man einen Alias für den Host vergeben
- HostName Domain oder IP des Servers
- Port vom Standard abweichende Portangabe
- User Benutzernamen des entsprechenden Benutzers
- IdentityFile Pfad zum zu verwendenden Schlüssels
Nun kann man den entsprechenden Server per ssh somealias
erreichen.
4.) Schlüssel übertragen
Wenn man sich per SSH-Schlüssel einloggen will und keine SSH-CA verwendet, muss man dafür sorgen, dass der .pub-Key in die passende authorized_keys
des Servers eingefügt wird.
Das kann man entweder händisch tun oder den Befehl ssh-copy-id
verwenden.
Die Syntax lautet wie folgt: ssh-copy-id -i ~/.ssh/key.pub <server>
ssh-copy-id -i .ssh/id_rsa.pub 10.10.10.5
- -i mit der Option legt man den entsprechenden Pfad zum Public-Key fest
Alternativ kann man das gleiche auch folgendermaßen durchführen:
cat ~/.ssh/id_rsa.pub | ssh <user>@<server> 'cat>> ~/.ssh/authorized_keys'
5.) SSHFS
Mit SSHFS lässt sich ein entferntes Dateisystem verschlüsselt per SSH mounten, ähnlich NFS.
SSHFS sollte in den normalen Repos enthalten sein.
Syntax:
sshfs Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh
Hierbei wird das Verzeichnis :/pfad_auf_dem_server/ vom Server lokal unter * ~/fusessh* gemountet.
6.) SSH mit zwischengeschalteten SSH-Server
Wenn man einen entfernten Server erreichen will, welchen man nur mithilfe eines SSH-Server dazwischen erreichen kann, dann kann man folgenden Aufruf verwenden:
ssh <bridgeserver> ssh <nichterreichbarer_server>
7.) Screen-Session per SSH attachen
Mit dem Aufruf ssh -t <SERVER> screen -r
springt man direkt in die screen-Session auf dem Server ohne sich erst per SSH auf die bash zu verbinden.
8.) Anzeigen der bekannten Fingerprints samt ASCII-Art
$ ssh-keygen -lv -f ~/.ssh/known_hosts
256 SHA256:oclpEvitx6PioSCxFz9i8T+Ri9McYwswAk4KBuaMzgU 10.10.10.2 (ECDSA)
+---[ECDSA 256]---+
|oE |
|Bo.. |
|Oo... . |
|=.+. + + . |
|.+ooo B.S |
| o =.=* |
|+ = =*+* |
|o+.oo=*. |
|........ |
+----[SHA256]-----+
256 SHA256:OPmAmeyPr7msIG7dvocMBgyxNOl32EkA8YIskpNhzV8 10.10.10.4 (ECDSA)
+---[ECDSA 256]---+
|oB*.. |
|**oo . E |
|%o .= o |
|o=.+ O o |
| o * = S |
| + + |
|o o = . . |
|oo o B . |
|....B*= |
+----[SHA256]-----+
256 SHA256:l2dtpyLJkzFecB3xs1oZfQ05NN3XZo9IlmwjIClEW70 10.10.10.5 (ECDSA)
+---[ECDSA 256]---+
| oo oo.. . o*+o|
| .o... . B.o=X|
| .. ..=.o.BB|
| E +... B|
| S = + o+.|
| + O .oo |
| B ... |
| o . |
| |
+----[SHA256]-----+
9.) SSH-Server als Proxy (Traffic tunneln)
der Befehl ssh -ND <lokaler_port> <Benutzer>
Bsp.: ssh -D 5222 user
server.tld@
Hier wird der lokale Port 5222 aufgemacht und nun kann man z.B. in seiner Browser-Konfiguration folgenden Proxy setzen:
localhost:5222
somit läuft der gesamte Web-Traffic des Browsers durch den erstellten Tunnel.
10.) eine SSH-Session beenden
Manchmal kommt es vor das eine SSH-Session „stecken bleibt“, z.B. wenn reboot
oder ähnliches ausgeführt hat oder das System gerade ausgelastet ist.
Um eine SSH-Session zu beenden verwendet man: <Enter> ~ .
Nochmal einzeln:
<Enter>
~
.