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.
Looks like magic!
Scheint aber wenigstens auf Solaris auf dem Proxy auch nach Logout shell + nc-Prozesse zu hinterlassen.
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
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
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.