SFTP sobre salto de servidor doble

15

Estoy tratando de encontrar un método que me permita acceder a archivos en un servidor SFTP que no puedo acceder desde mi máquina local. Actualmente, tengo que SSH a un servidor remoto (es en un cierto bloque de IP desde el cual el servidor SFTP final aceptará), luego desde allí SFTP al servidor de destino. Desde allí, getlos archivos que me interesan, dejándolos caer en el servidor intermediario, desde donde puedo obtener los archivos a través de un recurso compartido de Samba o con un directo scp. También trabajo en el reverso, donde coloco los archivos en el intermediario, SSH y luego SFTP en el destino y los putguardo en las carpetas correspondientes.

Mi objetivo es acortar esto. Las restricciones desafortunadas son que mi máquina es Windows (uso KiTTy y / o Cygwin) y no puedo modificar el servidor intermediario (o el servidor de destino) de ninguna manera. Estoy dispuesto a usar la línea de comandos o programas GUI siempre que funcione y sea gratis.

¿Algunas ideas?

josh.trow
fuente

Respuestas:

24

En esencia, sin la GUI u otras comodidades:

ssh -o ProxyCommand='ssh myfirsthop nc -w 10 %h %p' mydestination

Puede hacer esto por defecto editando el archivo de configuración, por defecto ~ / .ssh / config

Host mydestination, mydest2, mydest3
ProxyCommand ssh myfirsthop nc -w 10 %h %p

Esto te permite hacer

ssh mydestination
scp mydest2:file.txt ./
scp file.txt mydest3:/tmp/

Por supuesto, con ese tipo de magia puedes fácilmente

mkdir -pv /tmp/mydest3tmp          # create mountpoint
sshfs mydest3:/tmp /tmp/dest3tmp/  # mount :)

En Windows, usaría WinSCP que viene con (creo que IIRC) PLINK (de la suite Putty). Supongo que la ubicación predeterminada para el configarchivo ssh es diferente (tendría que buscarlo en Google), pero estoy seguro de que funciona más o menos igual.

Tenga en cuenta que lo único que necesita para que esto funcione es 'netcat ( nc)' en el servidor intermedio (primer salto). Es una herramienta ubicua en Linux / UNIX [1]; Es bastante fácil construir una versión enlazada estáticamente que debería funcionar si puedes copiarla allí en primer lugar.

[1] tenga en cuenta que hay algunos sabores, por lo que la opción -w podría necesitar ser eliminada / deletreada de manera diferente

sehe
fuente
1
Señor, no tengo idea de lo feliz que esto me hizo :) ¡Perfecto!
josh.trow
@ josh.trow: No, pero me alegro de que me lo hayas dicho :) En cualquier momento
sehe
Aunque, como ya ha encontrado @ josh.trow, WinSCP tiene una función de tunelización integrada (vea la otra respuesta), si alguna vez necesita usar la configuración de túnel por una aplicación externa, aquí hay una guía: winscp.net/eng/docs/ guide_tunnel
Martin Prikryl
9

No voy a establecer esto como la respuesta aceptada porque nunca lo habría encontrado sin @sehe y @Jakub, pero esto es lo que encontré que simplifica todo ...

WinSCP tiene la capacidad de usar un túnel SSH incorporado. No sé cuándo llegó esta característica, pero nunca me di cuenta antes de alguna manera.

Configuración del túnel WinSCP

josh.trow
fuente
Documentación de la función de túnel: winscp.net/eng/docs/tunneling y winscp.net/eng/docs/ui_login_tunnel
Martin Prikryl
funciona en filezilla también!
Hayden Thring
esta característica solo permite un solo túnel ... ¿cómo agregar el segundo túnel?
zeetit
@zeetit Entonces tienes que usar un túnel externo. Todas las opciones de tunelización están documentadas en la guía WinSCP sobre tunelización .
Martin Prikryl
2

Una de mis sugerencias sería crear un proxy de calcetines usando masilla (desde su cuadro de Windows), y luego proxy a su cliente SFTP sobre él (por ejemplo, Filezilla sftp).

No necesitaría hacer nada especial de esa manera, solo encienda su proxy de putty socks5, encienda filezilla y envíe sus archivos al servidor de destino.

(you ==socks5 proxy==> middle server) ==> destination server
Jakub
fuente
Parece que está resolviendo un problema diferente, realmente más difícil. El problema del OP es que el destino final no es enrutable desde el cliente: el tráfico SSH saliente está bien. ( Creo que se necesita su solución para el tráfico SSH 'túnel' a través de un proxy? )
sehe
@sehe .. que? Configura un proxy SSH socks 5 (túnel ssh en el cuadro del medio) y luego simplemente representa el tráfico SFTP en el cuadro de destino, haciéndose pasar por el servidor del medio. ¿Qué otro problema estoy resolviendo?
Jakub