SSH Tipps und Tricks

Datum

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:

  1. [Enter]
  2. ~
  3. 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>

Beispiel: 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>@ erzeugt einen verschlüsselten Tunnel zu dem entfernten SSH-Server welchen man über den lokalen Port erreichen kann.

Bsp.: ssh -D 5222 userserver.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>
~
.

Autor
Kategorien Linux, Scripting

PRTG Map