SSH ProxyCommand

Mal wieder SSH … Wie nervig ist es immer wegen Firewalls und Serverhopping erst auf den einen Server gehen zu muessen, bevor man sich auf dem gewuenschten einloggen kann. Die Loesung lautet ProxyCommand. Ein Beispiel fuer eine .ssh/config:

Host *
Compression		yes
CompressionLevel	9
 
Host			bar
User			username
Port			22
ProxyCommand 		ssh foo nc %h %p
Ciphers 		arcfour
ClearAllForwardings	yes
 
Host			foo
HostName		192.168.1.1
User			username
Port			22

Wenn man nun noch eine Key-Authentifizierung hat, (und auf foo in der .ssh/config auch bar definiert ist) kann man sich Schwupps mit

ssh bar

auf dem gewuenschten Rechner einloggen ohne laestiges zwischendrin :-) Ciphers und ClearAllForwardings sind Performancesachen, denn die eine Verbindung muss nicht soo stark verschluesselt sein, wenn es der Tunnel bereits ist.

 

prego

/me... prego!

4 thoughts to “SSH ProxyCommand”

  1. Looks like magic!

    Scheint aber wenigstens auf Solaris auf dem Proxy auch nach Logout shell + nc-Prozesse zu hinterlassen.

  2. Bei „ProxyCommand ssh foo nc %h %p“ wird auf dem Host netcat ausgeführt. Dazu besteht aber keine notwendigkeit. Zumindest bei neuen OpenSSH versionen g (benutze 5.9) ibt es die -W option von ssh. Dann reicht folgendes:

    ProxyCommand ssh -W %h:%p user@host

    Und sollte -W nicht unterstützt werden, und man auf netcat/socat zurückgriefen muss, dann sollte man das ProxyCommand not mit einigen Optionen anreichern, die verhindern das ssh unnötigen Krams aushandelt. Ich benutze:

    ProxyCommand /usr/bin/ssh -akqTx user@host socat – tcp:%h:%p,nodelay,connect-timeout=10

  3. Correction: The following gets rid of „Killed by signal 1“ output at the end of each ssh session (notice the additional -q):
    ProxyCommand ssh -q -W %h:%p user@host

  4. Thanks Sven! I used a command similar to the one posted here (also with netcat). But as Yves noted the netcat processes stay on the proxy (also on Debian). I didn’t notice that and got locked out after a while due to ‚-bash: fork: retry: Resource temporarily unavailable‘ which were a bit tricky to get rid off. ‚ProxyCommand ssh -W %h:%p user@host‘ seems to work like a charm for me. The one with socat didn’t.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.