Solución 1:
Su problema es vincular un oyente a localhost:22; ya hay un sshd escuchando eso. Hacer un túnel de una conexión ssh a través de una conexión ssh es completamente legal, y lo hago todo el tiempo, pero debe elegir puertos no utilizados para sus oyentes de reenvío.
Prueba
me% ssh [email protected] -L 2201:192.168.25.100:22
entonces
me% ssh localhost -p 2201
Debería terminar en el servidor B (a menos que algo ya esté vinculado a mí:2201, en cuyo caso, elija otro puerto).
Solución 2:
No tiene que usar el reenvío de puertos ssh para ingresar a una computadora interna a través de un proxy. Puede usar la función ssh para ejecutar un comando en el primer servidor al que se conecta para conectarse a una tercera computadora.
ssh -t [email protected] ssh [email protected]
El -t
La opción obliga a ssh a asignar un pseudo-tty para que pueda ejecutar un comando interactivo.
Esto también puede funcionar con claves ssh. Si tiene su clave pública y privada en la máquina A y su clave pública en los archivos de claves autorizadas en las máquinas B y C, entonces puede usar el -A
opción para reenviar la conexión del agente de autenticación.
Solución 3:
A partir de OpenSSH 7.3 (finales de 2016), la forma más sencilla es la configuración de ProxyJump. En tu ~/.ssh/config
:
Host B
ProxyJump A
O en la línea de comando, -J B
.
Solución 4:
Usé una solución diferente. Usé un ProxyCommand
opción (aquí en ~/.ssh/config
):
Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i
Esto no configura ningún túnel de puerto a puerto, sino que tuneliza ssh mediante el uso de entrada/salida estándar. Este método tiene el inconveniente de que en realidad hay tres conexiones ssh para autenticar. Pero para conectarse al host interno, simplemente escriba:
ssh myinsidehost2
...así que no necesita preocuparse por elegir ninguna IP para ese túnel.
Solución 5:
de acuerdo con la página man de ssh, ProxyCommand es el método correcto
siendo la sintaxis:
ProxyCommand ssh -W %h:%p [email protected] 2> /dev/null