Řešení 1:
Váš problém je ve spojení posluchače s localhost:22; už to poslouchá sshd. Tunelování ssh připojení přes ssh připojení je zcela legální a dělám to pořád, ale musíte vybrat nepoužívané porty pro vaše přesměrovací posluchače.
Zkuste
me% ssh [email protected] -L 2201:192.168.25.100:22
pak
me% ssh localhost -p 2201
Měli byste skončit na serveru B (pokud mi již něco není vázáno:2201, v takovém případě vyberte jiný port).
Řešení 2:
Pro ssh do interního počítače přes proxy nemusíte používat přesměrování portů ssh. Funkci ssh můžete použít k provedení příkazu na prvním serveru, ke kterému se připojíte, abyste mohli použít ssh na 3. počítač.
ssh -t [email protected] ssh [email protected]
-t
volba nutí ssh k přidělení pseudo-tty, takže můžete spustit interaktivní příkaz.
To může fungovat i s ssh klíči. Pokud máte svůj soukromý a veřejný klíč na počítači A a svůj veřejný klíč v souborech autorizovaných klíčů na počítačích B a C, můžete použít -A
možnost předat připojení ověřovacího agenta.
Řešení 3:
Od OpenSSH 7.3 (konec roku 2016) je nejjednodušším způsobem nastavení ProxyJump. Ve vašem ~/.ssh/config
:
Host B
ProxyJump A
Nebo na příkazovém řádku , -J B
.
Řešení 4:
Použil jsem jiné řešení. Použil jsem ProxyCommand
možnost (zde v ~/.ssh/config
):
Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i
Toto nenastavuje žádný tunel mezi porty, místo toho tuneluje ssh pomocí standardního stdin/out. Tato metoda má nevýhodu, že ve skutečnosti existují tři připojení ssh k ověření. Ale pro připojení k internímu hostiteli stačí napsat:
ssh myinsidehost2
...takže se nemusíte starat o výběr žádné IP pro tento tunel.
Řešení 5:
podle manuálové stránky ssh je správnou metodou ProxyCommand
syntaxe je:
ProxyCommand ssh -W %h:%p [email protected] 2> /dev/null