¿Cómo hago transferencias Multihop SCP entre máquinas?

¿Cómo hago transferencias Multihop SCP entre máquinas?

Quiero copiar un archivo de mi máquina A al servidor C, pero solo tengo acceso al servidor C a través del servidor B.

En lugar de transferir primero al servidor B, iniciar sesión y luego transferir al servidor C, ¿es posible transferir el archivo directamente con SCP o programas similares?

(El modo tramp de Emacs tiene esta función para editar archivos de forma remota).

Respuesta1

Puede agregar -oopciones en scplugar de .ssh/config.

scp -o ProxyCommand="ssh $jump_host nc $host 22" $local_path $host:$destination_path

$jump_hostes su "servidor B" en este caso.

Respuesta2

Suponiendo OpenSSH, agréguelo a su configuración SSH en .ssh/config

Host distant
ProxyCommand ssh near nc distant 22

Esto hará que SSH pueda conectarse "directamente" a la máquina denominada distante mediante proxy a través de la máquina denominada cercana. Luego puede usar aplicaciones como scp y sftp en la máquina distante.

Para que esto funcione, necesita 'nc', también conocido como netcat, instalado en la máquina denominada near. Pero muchos sistemas modernos ya lo tendrán.

La solución tar de towo es más efectiva para problemas de una sola vez, suponiendo que haya memorizado la sintaxis y las reglas de operación de tar.

Respuesta3

Con versiones más recientes de ssh en el servidor cercano a la máquina (B), lo siguiente funcionará sin netcat:

Host distant
    ProxyCommand ssh near -W distant:22

Sin embargo, requerirá que AllowTcpForwarding sea sí (el valor predeterminado) en la máquina cercana (B).

editar: requiere OpenSSH 5.4+ en B

Respuesta4

Es posible y relativamente fácil, incluso cuando necesita utilizar certificados para la autenticación (típico en entornos de AWS).

El siguiente comando copiará archivos desde a remotePathdirectamente server2a su máquina en localPath. Internamente, la solicitud scp se envía mediante proxy a través de server1.

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

Al revés también funciona (cargar archivo):

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" <localpath> user2@server2:/<remotePath>

Si utiliza la autenticación de contraseña en su lugar, intente con

scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

Si utiliza las mismas credenciales de usuario en ambos servidores:

scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>

La -Wopción está integrada en versiones nuevas (más) de OpenSSH, por lo que solo funcionará en máquinas que tengan la versión mínima (5.4, a menos que su distribución haya adaptado alguna característica; por ejemplo, RHEL6 OpenSSH 5.3p1 incluye esta característica). Según las notas de la versión:http://www.openssh.com/txt/release-5.4

Se agregó un 'modo netcat' a ssh(1): "ssh -W host:puerto ..." Esto conecta stdio en el cliente a un único puerto de reenvío en el servidor. Esto permite, por ejemplo, utilizar ssh como ProxyCommand para enrutar conexiones a través de servidores intermedios.

%hy %pson marcadores de posición para el host y el puerto.

información relacionada