¿Debo enviarme a un servidor intermedio?


11

No puedo ingresar directamente a un host en particular. Para mover un archivo desde mi máquina doméstica al host, debo enviar un archivo a un host intermedio; ssh en el host intermedio; y sftp el archivo al destino final. ¿Es posible evitar tal locura?

Respuestas:


28

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.


Gracias, lo intentaré; y tienes razón, es el foro equivocado; lo siento.

Después de dar la contraseña de usuario @ localhost recibí el mensaje: Mensaje recibido demasiado largo 1131376238
user74094

14

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):

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(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:

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

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 ...


Gracias Gordon Toma ambas contraseñas y luego se detiene con el mensaje: Mensaje recibido demasiado largo 1131376238
user74094

Parece que hay algo en la conexión, tal vez una secuencia de comandos de inicio de sesión en uno de los hosts, tal vez nc, está escribiendo texto adicional sobre la conexión que es confuso sftp (consulte estas Preguntas frecuentes en snailbook.com ). 1131376238 es la codificación decimal de los caracteres ascii "Conn", por lo que probablemente sea un mensaje como "Conectando a ..." "Conectado desde ..." o tal vez "Error de conexión". Pruébelo con ssh en lugar de sftp, vea si el mensaje se imprime visiblemente y tal vez pueda saber de dónde viene.
Gordon Davisson

SSH funcionó bien. También debo mencionar que a menudo me enfrento a esta pregunta: no se puede establecer la autenticidad del host 'xxxxx (<no hostip para el comando proxy>)'. La huella digital de la clave RSA es 37: 40: d4: c7: etc. ¿Está seguro de que desea continuar conectando (sí / no)? sí
user74094

Gordon, muy útil! Estoy agregando esto a mi archivo de texto de línea de comando fu oneliners. ¡Gracias una tonelada!
Travis Leleu

¿Es lo execnecesario? (Funciona bien aquí sin esa parte)
Equaeghe

3

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!


0

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.


0

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 \ ""


Me gusta, así que lo probé. Tomó la contraseña para A, luego produjo el mensaje: Error de verificación de clave de host.
user74094
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.