Desde su máquina local, puede crear un túnel am SSH a través del host intermedio hasta el host final:
ssh user@intermediate -L 2000:final:22 -N
Esto abrirá el puerto 2000 en su host local que se conectará directamente al servidor final en el puerto 22, haciendo un túnel a través del host intermedio. Ahora, en otro aviso, conéctese con sftp en el puerto 2000 para ser canalizado al servidor final, y observe que el usuario especificado aquí es para el host final:
sftp -P 2000 user@localhost
Parece que este pertenece en superuser.com o serverfault.com sin embargo.
Puede usar la opción ProxyCommand de SFTP para hacer un túnel transparentemente una conexión SFTP a través de una conexión SSH (un poco similar a la respuesta de WhiteFang34, pero a través de la conexión SSH stdin & stdout, en lugar de un puerto TCP local reenviado):
(Eso supone que el host intermedio tiene netcat instalado como / usr / bin / nc; de lo contrario, es posible que deba encontrar / instalar alguna forma equivalente de encaminar stdin & stdout en una sesión TCP).
Lo realmente genial de esta opción es que puede agregarla a su archivo ~ / .ssh / config, lo que la hace transparente:
Con esa entrada, puede usar sftp, scp y ssh para finalhost, e invocará automáticamente el túnel. La única parte no transparente es que solicitará dos contraseñas (host intermedio seguido de host final), pero si lo desea, también puede eliminar eso con los pares de claves SSH ...
fuente
exec
necesario? (Funciona bien aquí sin esa parte)Puede canalizar datos al proceso ssh que se ejecuta en su máquina, luego ejecutar un comando en la máquina intermedia que lee stdin y lo envía a sftp según corresponda.
Esto se puede hacer en una línea en su máquina local, aunque la cita de argumentos para ssh requerirá cuidado. Estoy en mi teléfono ahora, así que desafortunadamente no puedo escribir los detalles. ¡Quizás alguien más pueda completar esta respuesta como un ejercicio!
fuente
Supongo que el host final tiene un cortafuegos y solo puedo adivinar los métodos que podría usar para evitarlo.
Por ejemplo: exponga ssh desde su máquina local, luego ssh al primer host, luego ssh al segundo y sftp desde el host final a su máquina.
fuente
Digamos que A y B son los primeros y segundos anfitriones. Y el archivo a copiar es foo
En lugar de sftp, puede usar lo siguiente
gato foo | ssh Un "gato -> foo"
Ahora puedes encadenar 2 de estos juntos
gato foo | ssh A "gato - | ssh B \" gato -> foo \ ""
fuente