Sugeriría lo siguiente en su .ssh/config
:
Host C
User user
ProxyCommand ssh -W %h:%p [email protected]
No estoy mucho más seguro si el host B no es de confianza y funciona para scp y sftp.
Como se describe en esta respuesta, puede usar el ProxyCommand
directiva para tener un ssh
el host lo rebota a un tercer host de forma transparente:
Supongamos que tiene los siguientes tres hosts:
workstation.example.com
- Esta es la máquina en la que estás trabajando físicamenteproxy.example.com
- Esta es la máquina a través de la cual estás enrutando tu tráfico SSHendpoint.example.com
- Aquí es donde desea que termine el tráfico en última instancia
En ~/.ssh/config
el workstation
, agregue lo siguiente:
Host endpoint
User endpointUser # set this to the username on the endpoint host
HostName endpoint.example.com
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
En el proxy
anfitrión, asegúrese de nc
(netcat) está instalado.
Luego, en workstation
, puedes ssh endpoint
o sftp endpoint
y se le transmitirá de forma transparente a la máquina a través de su servidor proxy. scp
también funcionará.
Es posible y relativamente fácil, incluso cuando necesita usar certificados para la autenticación (típico en los entornos de AWS).
El siguiente comando copiará archivos de una ruta remota en el servidor 2 directamente a su máquina en la ruta local. Internamente, la solicitud de scp se envía a través del servidor 1.
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
Si usa la autenticación de contraseña en su lugar, intente con
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
Si usa las mismas credenciales de usuario en ambos servidores:
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>