Effektiv mit SSH arbeiten

SSH effektiv nutzen

Wer einen Linux / Unix Server aus der ferne warten möchte, hat mit SSH alle Möglichkeiten. Mit einem einfachen „ssh servername“ kann man sich auf der Kommandozeile einloggen und den Server so bedienen, alsob man direkt davor sitzen würde. Doch wenn man täglich mit SSH arbeitet gibt es ein paar Tipps und Tricks um die tägliche Arbeit zu erleichtern.

SSH Login ohne Passwort - Authentifizierung mit SSH Key

Ein regelmässiger Login per SSH oder um mit SCP Dateien zu kopieren ist mit der Zeit nervig und zeitraubend. Aus diesem Grund gibt es die Möglichkeit in SSH Schlüssel zu generieren.

 

Ein SSH Schlüssel besteht aus zwei Teilen. Der erste Teil ist der "private Key". Dieser private Key dient zum aufschliessen und ist nicht weiterzugeben (vergleichbar mit einem echten Schlüssel). Neben dem private Key gibt es einen public key. Der public key ist eher vergleichbar mit dem Schloss, dass zum Schlüssel passt. Den public key hinterlegt man also auf dem Zielserver um einen login, für den Besitzer des public key zu erlauben.

 

Der erste Schritt um einen Login mit SSH Key zu ermöglichen, ist das anlegen des SSH Keys:

ssh-keygen -b 4096

Während der Generierung wird man gefragt in welche Datei man den Key generieren möchte. Standardmässig wird "~/.ssh/id_rsa" verwendet.

 

Wichtig: id_rsa ist der private key, diesen nicht weitergeben. id_rsa.pub ist wiederum der public key, dieser kann weitergeben werden. Wenn ein login auf einem Server per SSH Key erlaubt werden soll muss der SSH Schlüssel in der Datei (~/.ssh/authorized_keys) hinzugefügt werden.

 

scp  ~/.ssh/id_rsa.pub username@myserver.de
ssh username@myserver.de
mkdir ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub

Am Ende kannst du noch kontrollieren, ob der SSH Key in " ~/.ssh/authorized_keys" hinzugefügt wurde:

cat  ~/.ssh/authorized_keys

Danach kannst du dich ausloggen und schauen, ob du dich nun ohne Passwort einloggen kannst:

ssh username@myserver.de

Beim Login mit ssh, kann hier optional die Option -i verwendet werden um den SSH Key zum login anzugeben. Standardmäßig wird id_rsa verwendet.

Blockiert Ports mit SSH tunneln - Lokale SSH Tunnel

Es gibt Situationen, in denen man auf einen Port auf dem Zielsystem zugreifen möchte, aber keinen direkten Zugriff hat, weil der Port von aussen per Firewall gesperrt ist.

In diesem Fall kann man sich einen SSH-Tunnel einrichten, der den Port auf dem Zielrechner per Tunnel über einen lokalen Port erreichbar macht.

 

ssh -NL <local_ip>:<local_port>:<remote_ip>:<remote_port> user@remote_ip
Lokaler SSH Tunnel

Beispiel:

ssh -NL 127.0.0.1:8080:127.0.0.1:8080 user@mytomcat

Dieses Kommando erzeugt einen SSH-Tunnel zum Server „mytomcat". Dabei wird der Port 8080, der auf mytomcat auf das loopback interface (127.0.0.1) hört, mit dem Port 8080 auf dem lokalen System verbunden und ein Tunnel aufgebaut.

Nodes als SSH-Gateway / Jumphost verwenden

In manchen Firmennetzwerken loggt man sich zunächst auf einem Gateway Host per SSH ein um sich dann mit einem anderen Host weiter zu verbinden.


 
Client  ——> Gateway —— > Web1



Mit diesem Setup kann man den Login auf das Gateway verhindern und verhindert dadurch den Zugriff auf alle Hosts hinter dem Gateway. Allerdings hat ein solches Setup den Nachteil, dass man sich nicht von „Client“ auf „Web1“ einloggen kann, noch schwieriger wird es, wenn man Dateien kopieren möchte. Dateien müsste man von Host zu host kopieren.



Um die Vorteile von beiden zu kombinieren kann man ein ProxyCommand für ein bestimmtes Host Pattern konfigurieren und mittels netcat auf einen Zielhose umleiten. Ein solches ProxyCommand kann für definierte Kostmuster in (<Dein Homeverzeichnis>/.ssh/config/) konfiguriert werden:

 

ForwardX11 yes
ForwardX11trusted yes
ForwardAgent yes
Compression yes
EscapeChar none
StrictHostKeyChecking no
User <myusername>

Host gateway_de
    HostName gateway.mycompany.de

Host !gateway_de *.mycompany.de
    ProxyCommand ssh gateway_de -A netcat -w 120 %h %p

Navigation