SSH – Keys und Agent

SSH gehoert fuer mich zum taeglich Brot. Gefuehlte 1.000.000 mal taeglich baue ich Verbindungen zu irgendwelchen Servern auf, mache dort etwas, baue die Verbindung wieder ab usw… Etwas was mir mein Leben dabei sehr stark erleichtert ist die ~/.ssh/config in der ich fuer die entsprechenden Server die Voreinstellungen hinterlegt habe. Vor vielen Jahren hatte ich darueber bereits hier auf dem Blog geschrieben.

Authentifizierung ueber Keys ist ein weiteres Thema das das Leben sehr viel erleichtern kann. Deswegen hier kurz was dazu geschrieben. Als erstes benoetigt man einen Key. Der wird mit dem folgenden Befehl erzeugt:

ssh-keygen -t dsa

Dabei wird zur Eingabe eines Passworts aufgefordert, wenn man nicht sehr triftige Gruende dagegen hat sollte man das auch tun. Als zweites muss der public Key auf den betreffenden Server kopiert werden, z.B.:

scp ~/.ssh/id_dsa.pub username@example.net:/home/username/.ssh/authorized_keys2

Nun kann ich mich schon mit

ssh username@example.com

ueber den Key (mit dem Passwort des Keys) authentifizieren. Noch einfacher wird es jedoch, wenn man diese Identity dem SSH-Agent mitteilt. Das passiert mit dem Befehl:

ssh-add

Nach der Eingabe des Passworts fuer den Key uebernimmt der Agent alles weitere fuer einen. Man kann sich nun mit dem Key ohne Angabe des Passworts an dem Server anmelden, bis der Agent neu gestartet wird.

Natuerlich kann man auch mehr als einen Key haben, z.B. um private und dienstliche Sachen voneinander zu trennen:

ssh-keygen -t dsa .ssh/work
ssh-add .ssh/work

Die aktiven Identitys kann man sich uebrigens mit

ssh-add -l

anzeigen lassen

Howto: SSH reverse tunnel

Eine SSH Verbindung von Computer A zu Computer B aufbauen ist absolut nichts besonderes. Ein nettes Feature ist es jedoch, eine SSH Verbindung rueckwaerts zu nutzen (reverse tunnel). Dieses ist besonders dann hilfreich, wenn der gewuenschte Server in einem VPN oder hinter einer Firewall liegt. Dafuer auf Server A einen screen starten und eine SSH Verbindung aufbauen mit:

 ssh -R 3300:localhost:22 MYSERVER.TLD

Danach den screen abhaengen und die Verbindung zum VPN trennen / Firewall geschuetztes Netz verlassen. Nun auf MYSERVER.TLD einloggen und eine Verbindung zum System hinter der Firewall / im VPN herstellen mit:

 ssh -p 3300 localhost

voila :-)

KVM, interne Maschine, RDP Zugriff von extern

Wenn man mit KVM eine Maschine virtualisiert hat, und diese dann in ein eigenes internes Netz haengt, z.B. 192.168.X.X, dann ist es zwar normalerweise moeglich via NAT ins Internet zu gehen, aber wie komme ich von extern auf diese Maschine. Konkrete Fragestellung bei mir war: Wie komme ich von extern per Remotedesktop auf die Maschine?

  • per SSH mit X-Forwarding auf der physikalischen einloggen und dann mit rdesktop, Beispiel:
 rdesktop -k de -u MYUSERNAME -g 1280x1024 192.168.2.2
  • mit netten iptables Regeln

Als erstes generell erlauben, dass Traffic auch an die internen Maschinen weitergeleitet werden darf:

iptables -I FORWARD -d 192.168.2.0/24 -j ACCEPT

Danach den entsprechenden Dienst einrichten, in diesem Fall RDP:

iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 --dport 3389 -j DNAT --to-destination 192.168.2.2:3389

Die iptables Regeln habe ich bereits vor einiger Zeit von meinen Cousin Emil Wagner per Mail bekommen. Danke dafuer!