MÉTODO 1 (use ssh-key en inter)
Si desea retener el flujo de autenticación
local -- authenticate --> inter -- authenticate (ask password) --> final
Esto no se puede hacer con .ssh / config proxyhost.
Lo que necesitas es un alias de shell bash (espero que estés usando bash).
En ~/.bashrc
, agregue la siguiente línea
alias ssh-final='ssh -t inter ssh user2@final.com'
En el símbolo del sistema, simplemente escriba following
ssh-final
final
sección en ~/.ssh/config
no se utiliza.
Detalles de conexión (1)
ssh -t inter ssh user2@final.com
se puede ver de la siguiente manera
local# ssh inter
inter# ssh user2@final.com
local
solo está "hablando" inter
. No hay conexión ssh directa o indirecta entre local
y final
. local
solo muestra la salida de ssh user2@final.com
.
MÉTODO 2 (use ssh-key en local)
Autenticación con la misma clave ssh
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Copiar local ~/.ssh/id_ras.pub
a
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Detalles de conexión (2)
tunelado ssh
Antes de entrar en detalles ProxyCommand
, veamos el siguiente ejemplo
Paso 1, en la ventana de terminal 1
local# ssh inter -L 2000:final.com:22
Paso 2, en la ventana de terminal 2
local# ssh localhost -p 2000
En la terminal 1, se configura un túnel entre el puerto local 2000 y el puerto final.com 22. Todo lo que se envíe al puerto local 2000 se enviará al puerto 22 final.com y viceversa.
En la terminal 2, ssh se conecta al puerto local 2000, pero en realidad se está comunicando con el puerto 22 de final.com, que es el sshd.
Con la tunelización, el cliente ssh local en el Paso 2 se conecta directamente con final.com sshd.
La "salida" del puerto local 2000 es el tráfico de daemon ssh "en bruto".
El uso común de dicho túnel es acceder al servidor web interno o al servidor de correo electrónico. El siguiente es un ejemplo para el servidor web
local# ssh inter -L 2000:final.com:80
En el navegador use la siguiente URL
http://localhost:2000
Los dos puntos finales del túnel son el puerto local 2000 y el puerto final.com 80.
Tráfico entrando y saliendo del punto final del túnel "TAL CUAL". Llamemos a eso tráfico "en bruto".
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Lo ProxyCommand
llevan un paso más allá. Se salta el paso de crear un puerto local y conectarse a él.
Un cliente ssh ejecutará cualquier comando que se dé ProxyCommand
y tratará la salida de ese comando como tráfico "sin procesar". Se aferra al punto final local y luego inicia una conexión ssh con él.
¿Por qué uno trabaja y el otro no?
El siguiente comando
ssh inter nc final.com 22
básicamente significa (1) conectarse inter
, luego (2) encendido inter
, ejecutar comando nc final.com 22
.
nc - arbitrary TCP and UDP connections and listens
Por nc final.com 22
lo tanto, se conectará al puerto 22 de final.com, imprimirá todo el tráfico entrante en stdout y enviará todos los stdin al otro lado. Es un "túnel" entre nc stdin / out y final.com puerto 22.
Como nc
se ejecuta dentro de la sesión ssh, toda su stdout se devuelve al cliente ssh, como tráfico "en bruto". Y el cliente ssh puede pasar el tráfico a nc stdin, que terminará en el puerto 22 de final.com.
A través del "túnel" anterior, el cliente ssh local iniciará una sesión ssh final.com
directamente.
El siguiente comando
ssh -t inter ssh user2@final.com
no funciona ProxyCommand
porque el tráfico no es "sin procesar" de un demonio ssh. Es el stdout de un cliente ssh . Hablar con el cliente significa no hacer negocios.
Autenticación con diferentes claves ssh (configuración original de OP)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
Copiar local ~/.ssh/id_ras.pub
a
/home/user1/.ssh/authorized_keys in `inter`
Copiar local ~/.ssh/id_ras_2.pub
a
/home/user2/.ssh/authorized_keys in `final`
Ambos de los anteriores permitirán el siguiente uso
local# ssh final
Comprobación adicional
Use detallado
local# ssh -v final
Eso debería ayudar a identificar el problema ssh.
Comprobar nc
ProxcyCommand
se está ejecutando nc
el inter
. Compruebe si nc
está realmente disponible en inter
.
local# ssh inter
inter# nc final.com 22
Verifique que la clave rsa esté configurada correctamente
Si se van a utilizar diferentes claves para inter
y final
, los siguientes archivos deberían existir en la máquina local
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Como ya puede hacer ssh inter
, verifique la configuración de la tecla final
. Desde su máquina local
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Deberías ver el contenido de id_rsa_2.pub
allí.
ssh -t
, pero lo que me gustaría hacer es simular exactamente el comportamiento que tengo alssh -t
usar solo la configuración en.ssh/config
.