Me pregunto si hay alguna forma de SCP del archivo desde el host remoto2 directamente desde mi máquina local pasando por un host remoto1.
Las redes solo permiten conexiones al host remoto2 desde el host remoto1. Además, ni el host remoto1 ni el host remoto2 pueden conectarse a mi máquina local.
Hay algo como:
scp user1@remote1:user2@remote2:file .
Primera ventana:, ssh remote1
luego scp remot2:file .
.
Segundo caparazón: scp remote1:file .
Primera ventana: rm file; logout
Podría escribir un script para hacer todos estos pasos, pero si hay una forma directa, prefiero usarla.
Gracias.
EDITAR: Estoy pensando en algo como abrir túneles SSH pero estoy confundido sobre qué valor poner y dónde.
Por el momento, para acceder remote1
, tengo lo siguiente en $HOME/.ssh/config
mi máquina local.
Host remote1
User user1
Hostname localhost
Port 45678
Una vez encendido remote1
, para acceder remote2
, es el DNS local estándar y el puerto 22. ¿Qué debo ponerme remote1
y / o cambiar localhost
?
-p 45678
a-p 22
porque mi SSH remoto1 está escuchando el puerto 22-p 22
lugar de-p 45678
. Tampocoscp -P 1234 ...
me funciona. Estoy consiguiendossh: connect to host localhost port 1234: Connection refused
. Cuando lo intentéscp -P 22 ...
, funciona, pero está copiando el archivoremote 1
y no en mi máquina local (remote2
).Doble
ssh
Incluso en su caso complejo, puede manejar la transferencia de archivos usando una sola línea de comando, simplemente con
ssh
;-)Y esto es útil si
remote1
no puede conectarse alocalhost
:tar
Pero pierde propiedades de archivo (propiedad, permisos ...).
Sin embargo,
tar
es amigo tuyo mantener estas propiedades de archivo:También puede comprimir para reducir el ancho de banda de la red:
Y
tar
también te permite transferir un directorio recursivo a través de básicossh
:ionice
Si el archivo es enorme y no desea molestar a otras aplicaciones de red importantes, puede perder la limitación de rendimiento de la red proporcionada por las herramientas
scp
yrsync
(por ejemploscp -l 1024 user@remote:file
, no usa más de 1 Mbits / segundo).Pero, se utiliza una solución alternativa
ionice
para mantener una única línea de comando:Nota:
ionice
puede que no esté disponible en distribuciones antiguas.fuente
Esto hará el truco:
Para SCP el archivo desde el host
remote2
directamente, agregue las dos opciones (Host
yProxyCommand
) a su archivo ~ / .ssh / config (vea también esta respuesta sobre superusuario). Entonces puedes ejecutar:desde su máquina local sin tener que pensar
remote1
.fuente
-o 'Host remote2'
no parece ser realmente necesario cuando se inicia desde la línea de comandos (es decir, para copiar una vez sin tocar ~ / .ssh / config)-o 'Host remote2'
. Gracias.Con openssh versión 7.3 y posteriores, es fácil. Utilice la opción ProxyJump en el archivo de configuración.
Comandos para ejecutar para iniciar sesión o copiar
por supuesto, puede especificar el servidor bastion Jump utilizando la opción "-J" del comando ssh, si no está configurado en el archivo de configuración.
Nota SCP no no parece apoyar la bandera "-J" a partir de ahora. (No pude encontrar en las páginas de manual. Sin embargo, el scp anterior funciona con la configuración del archivo de configuración)
fuente
Hay una nueva opción en
scp
ese agregado recientemente para exactamente este mismo trabajo que es muy conveniente-3
.TL; DR Para el host actual que ya tiene la autenticación configurada en los archivos de configuración ssh, simplemente haga:
Su
scp
debe ser de versiones recientes.Todas las demás técnicas mencionadas requieren que configure la autenticación de remoto1 a remoto2 o viceversa, lo que no siempre es una buena idea.
El argumento
-3
significa que desea mover archivos desde dos hosts remotos utilizando el host actual como intermediario, y este host en realidad realiza la autenticación en ambos hosts remotos, por lo que no tienen que tener acceso entre sí.Solo tiene que configurar la autenticación en los archivos de configuración ssh, que es bastante fácil y está bien documentado, y luego simplemente ejecutar el comando en TL; DR
La fuente de esta respuesta es https://superuser.com/a/686527/713762
fuente
Esta configuración funciona bien para mí:
Entonces el comando
Copia myfile en la máquina de producción .
fuente
Pequeña adición a la solución de Olibre aquí, con la que trabajé usando esta fuente.
Del mismo modo que tiene las tres formas de usar
tar
para copiar desde un host remoto a local, lo siguiente funciona para la copia de host local a host remoto en situaciones de doble ssh: (ejecútelos en el directorio donde los archivos deben ser copiados, de lo contrario use fullpath /nombre del archivo)Transfiera un solo archivo sin compresión:
Transfiera un solo archivo con compresión:
Transferencia de directorio recursiva:
El && aquí evita que el comando se ejecute si la primera mitad del comando no funciona, por ejemplo, si falta el directorio o hay un error en los nombres de ruta de origen / destino.
fuente