Soluzione 1:
Il tuo problema sta nell'associare un ascoltatore a localhost:22; c'è già un sshd in ascolto su questo. Il tunneling di una connessione ssh attraverso una connessione ssh è del tutto legale e lo faccio sempre, ma devi scegliere le porte inutilizzate per i tuoi ascoltatori di inoltro.
Prova
me% ssh [email protected] -L 2201:192.168.25.100:22
allora
me% ssh localhost -p 2201
Dovresti finire sul server B (a meno che qualcosa non sia già associato a me:2201, nel qual caso scegli un'altra porta).
Soluzione 2:
Non è necessario utilizzare il port forwarding ssh per ssh in un computer interno tramite un proxy. Puoi utilizzare la funzionalità ssh per eseguire un comando sul primo server a cui ti connetti per accedere tramite ssh a un terzo computer.
ssh -t [email protected] ssh [email protected]
Il -t
option forza ssh ad allocare uno pseudo-tty in modo da poter eseguire un comando interattivo.
Questo può funzionare anche con le chiavi ssh. Se hai la tua chiave privata e pubblica sulla macchina A e la tua chiave pubblica nei file delle chiavi autorizzate sulle macchine B e C, allora puoi usare il -A
opzione per inoltrare la connessione dell'agente di autenticazione.
Soluzione 3:
A partire da OpenSSH 7.3 (fine 2016) il modo più semplice è l'impostazione ProxyJump. Nel tuo ~/.ssh/config
:
Host B
ProxyJump A
O sulla riga di comando, , -J B
.
Soluzione 4:
Ho usato una soluzione diversa. Ho usato un ProxyCommand
opzione (qui in ~/.ssh/config
):
Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i
Questo non imposta alcun tunnel da porta a porta, ma crea un tunnel ssh utilizzando lo standard stdin/out. Questo metodo ha lo svantaggio che in realtà ci sono tre connessioni ssh da autenticare. Ma per connetterti all'host interno devi solo digitare:
ssh myinsidehost2
...quindi non devi preoccuparti di scegliere un IP per quel tunnel.
Soluzione 5:
secondo la pagina man di ssh, ProxyCommand è il metodo corretto
la sintassi è:
ProxyCommand ssh -W %h:%p [email protected] 2> /dev/null