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, inicie sesión y luego transfiera al servidor C, ¿es posible transferir el archivo directamente con SCP o programas similares?
(El modo vagabundo de Emacs tiene esta función para editar archivos de forma remota).
Asumiendo OpenSSH, agregue a su configuración SSH en .ssh / config
Esto hará que SSH pueda conectarse "directamente" a la máquina llamada distante mediante proxy a través de la máquina nombrada cerca. Luego puede usar aplicaciones como scp y sftp para la máquina distante.
Para que esto funcione, necesita 'nc', también conocido como netcat, instalado en la máquina llamada near. Pero muchos sistemas modernos ya lo tendrán.
La solución de alquitrán de towo es más efectiva para problemas de un solo disparo, suponiendo que haya memorizado la sintaxis y las reglas de operación de alquitrán.
fuente
near
es diferente del nombre de usuario activadodistant
, el usuario cercano ingresaProxyCommand ssh nearuser@near...
y el usuario distante entra en unaUser distantuser
línea separada .Con versiones más recientes de ssh en el servidor cerca de la máquina (B), lo siguiente funcionará sin netcat:
Sin embargo, requerirá AllowTcpForwarding para que sea sí (el valor predeterminado) en la máquina cercana (B)
editar: requiere OpenSSH 5.4+ en B
fuente
Puede enviar ssh al servidor B usando algo como
Entonces puede enviar ssh al servidor C usando
Del mismo modo, scp funcionaría usando
Recuerde usar el caso correcto de p con scp y ssh
fuente
Es posible y relativamente fácil, incluso cuando necesita usar certificados para autenticación (típico en entornos de AWS).
El siguiente comando copiará los archivos de un
remotePath
enserver2
directamente a su máquina enlocalPath
. Internamente, la solicitud scp se procesa medianteserver1
.Al revés también funciona (subir archivo):
Si utiliza la autenticación de contraseña en su lugar, intente con
Si usa las mismas credenciales de usuario en ambos servidores:
fuente
Si quieres ser realmente malvado, puedes encadenar ssh y alquitrán, algo así
tar c mydir | ssh server "ssh otherserver | tar x"
, pero esto puede toparse con todos los problemas.La forma más fácil sería simplemente configurar un túnel SSH con los métodos integrados de SSH; mira el
-D
conmutador en la página de manual y simplemente reenvía algún puerto al puerto ssh del otro servidor.fuente
También puede hacer esto a la inversa y tal vez sea más fácil.
Supongamos que tiene una sesión ssh abierta con la máquina a la que desea enviar el archivo. Esta PC de salto más lejano, la llamaremos hop2. Su host "proxy" será hop1. La PC que es de origen de archivo, llamaremos a ese origen.
Puede construir túneles haciendo que un puerto local esté disponible en una PC remota. De este modo, estamos definiendo un puerto para abrir en la PC remota, que será una redirección al puerto que detuvo con usted cuando construyó el túnel.
En hop2:
Ahora en esa sesión de túnel abierta, puede hacer lo mismo desde hop1 hasta file_origin.
En hop1:
Ahora está canalizado de hop2 a hop1 al origen. Casualmente, ahora tanto el puerto 5555 como el 6666 están abiertos en origen, que son redireccionamientos al puerto 22 de hop2. Dentro de esta sesión, las dos siguientes son rutas scp válidas para hop2:
En origen:
De esta manera, puede tener un número arbitrario de saltos en el medio, y es más fácil trabajar en términos de encadenar más de dos saltos.
fuente
Pruebe adapring en el siguiente ejemplo openssh config para una configuración que se puede usar para varios hosts:
Esto supone un conjunto de servidores que comienzan con "uat-" a los que solo se puede acceder a través del servidor jumpbox / gateway "bastion-uat". Probablemente también desee agregar
ForwardAgent yes
si está usando una clave para iniciar sesión.fuente
ForwardAgent yes
para esto. El reenvío de agentes no es necesario en este caso porque no se ejecutará ningún cliente ssh en el bastión, y reenviar un agente cuando no sea necesario solo reducirá la seguridad. Y creo quessh
falta tu comando. Sissh
se está utilizando una versión reciente que no necesitanc
, puede escribir en sussh -W %h:%p bastion-uat
lugar.Esto no es scp (que OP solicitó), pero me pareció muy simple de usar
rsync
para copiar de local a remoto en un solo salto con:Fuente: http://mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
Había intentado la sugerencia -o ProxyPass anterior y no quería cambiar la configuración para mis necesidades cambiantes. Como dice el autor en el enlace anterior, el archivo de destino que precede a los dos puntos (:) es importante para indicar que la ruta especificada está en el servidor de destino. Además, con rsync, tiene las opciones de comparación de fechas, sincronización de carpetas, etc. ¡Espero que esto ayude a alguien!
fuente
scp -o 'ProxyJump jumpboxname' somefilename.txt finaldestinationhost: / tmp /.
fuente