Sé que esta es una respuesta tardía, pero acabo de encontrar una forma genial de hacerlo. Básicamente es la respuesta de Holger Just, pero en un archivo de configuración guardado:
~/.ssh/config
Debe poner esto en su archivo en local.machine, (creando el archivo si no existe)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
Después de guardar el archivo, puede usar
ssh target.machine
cuando quieras conectarte. Scp también funcionará, ya que también respeta el archivo de configuración ssh. También lo hará Nautilus, si estás usando GNOME y quieres usar una GUI.
Host proxy.machine
líneas en el mismo~/.ssh/config
archivo, 2) Mencione si estos comandos pueden anidarse (es decir, el cliente se conecta al servidor proxy 1 que se conecta al servidor proxy 2 al que se conecta). ..target) y 3) quénc %h %p
significaPuede hacerlo con un comando, pero necesita instalar netcat (nc) en la máquina proxy:
[EDITAR: mezclado el orden de las máquinas ...]
fuente
Ahora puede * hacer esto como una sola línea, sin requerir
nc
ningún lugar:Explicación
pcreds
ytcreds
representar a su proxy y de destino credenciales si es necesario (username
,username:password
, etc.).Esto es posible debido a una capacidad de tipo netcat incorporada, que elimina el requisito para
nc
el host intermedio. El usossh -W host:port
configura un túnel para el host y el puerto especificados y lo conecta a stdin / stdout, y luego sescp
ejecuta sobre el túnel.Los
%h
y%p
enProxyCommand
se reemplazan con el host de destino y el puerto que especifique.Para una mayor conveniencia, puede configurar el proxy en su configuración ssh:
y a partir de entonces solo haz
* desde OpenSSH 5.4 - lanzado en marzo de 2010
fuente
-p <portnum>
antes-W
de cualquiera de los métodos para especificar el puerto proxySi no le importa usar rsync en lugar de scp, puede usar el siguiente one-liner:
(necesitará acceso sin contraseña a la máquina proxy)
fuente
OK, en realidad dos comandos ...
fuente
8080
-p <portnumber>
a tu comando ssh¿Una frase? No fuera de mi cabeza. Primero debe establecer un proxy y no puede hacerlo con scp por sí mismo.
Al hacerlo manualmente, abro una sesión de pantalla para mi túnel:
screen -S tunnel
La pantalla se usa para mantener el túnel en marcha en una capa de fondo. Use cualquier técnica que desee para mantener el túnel abierto en el fondo (la respuesta de @ weeheavy es probablemente la más simple). Una vez en la sesión de pantalla comienzo mi túnel así
ssh -L 2222:target.machine:22 [user@]proxy.machine
Para desglosar eso, eso básicamente dice "En mi máquina local, abra el puerto 2222 y cualquier conexión que golpee localhost: 2222 se representa a través de proxy.machine a target.machine: 22"
Una vez que haya establecido la conexión ssh y el túnel, desconecte de la sesión de pantalla con "Ca d". Para volver a esa sesión de pantalla, escriba
screen -raAd tunnel
Una vez que esté de vuelta en su shell original, su comando scp se verá como
scp -P 2222 localhost:your/file/on/target.machine local/path
Recuerde que el puerto localhost 2222 es realmente solo un túnel que va a target.machine.
fuente
Parece que scp admite la opción "-o" al igual que ssh, aunque no estoy seguro de cómo pasarle un nombre de usuario / contraseña proxy:
Si obtiene
nc: invalid option -- X
ver https://stackoverflow.com/a/23616021/32453fuente
Qué tal si:
fuente
Podrías probar algo como:
Pero no funcionará si su proxy.machine necesita pedirle una contraseña (ese SSH no está en un TTY, por lo que askpass fallará).
Si tiene más de un archivo, puede usar tar de esta manera (sin probar, generalmente uso un netcat de esa manera):
fuente
Otra solución simple para transferir un archivo source_host desde source_host a destination_host a través de proxy_host :
Inicie sesión en el servidor proxy :
Desde el servidor proxy, transfiera el archivo de origen del host de origen al host de destino (puede escribir esto como una línea, omitiendo
\
o como dos líneas, como se muestra a continuación):Esto requiere que el inicio de sesión en source_host a proxy_host use una rsa_key.
fuente
En caso de que necesite usar claves públicas, necesitará algo como esto.
fuente
Seguí este artículo y encontré una respuesta que me funciona. (Porque las respuestas anteriores no funcionan para mí).
Cómo hacer
scp
un archivo a través de un host intermedio (también conocido como host de salto) http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.htmlY mi respuesta es la siguiente:
Ejemplo:
Espero que esta respuesta te pueda ayudar.
fuente