¿Es posible SCP de remoto a local mientras está conectado al remoto y sin conocer la dirección IP del local?

31

Regularmente me encuentro con ganas de copiar un archivo de la sesión de terminal remota a mi máquina local. Por lo general, salgo de la sesión remota y llamo a una transferencia scp de local para copiar el archivo de remoto a local. Pero esto se siente un poco largo sin aliento. Me gustaría transferir el archivo mientras estoy conectado al control remoto a través de SSH para ahorrar tiempo. Mi máquina local está conectada a Internet desde un rango de IP dinámico, por lo que nunca estoy seguro de cómo conectarme a ella de forma remota. Pero seguramente, como la sesión remota se origina en mi computadora portátil, debe haber un acceso directo en scp para volver a mi computadora portátil ... ¿verdad?

jnthnclrk
fuente

Respuestas:

20

Puede usar el túnel SSH para esto.

Usando el túnel puede reenviar un puerto TCP desde su máquina local a la máquina remota o desde la máquina remota a su máquina local. Lo uso con frecuencia para reenviar, por ejemplo, puertos SMTP o IMAP desde una máquina remota detrás de un firewall a mi máquina local (y luego acceder a los servicios localmente, como si se estuvieran ejecutando localmente).

Para reenviar el puerto 22 (SSH) desde su máquina local a la máquina remota, intente esto:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(Tenga en cuenta que localhost se refiere al nombre local de la máquina remota)

Después de ejecutar esto, deberías poder volver a casa usando:

ssh -p12345 [email protected]

Al usar scp, haría algo como (scp tiene una P mayúscula para el reenvío de puertos):

scp -P12345 filename 127.0.0.1:/tmp/filename

El reenvío de puertos en la otra dirección (de remoto a local) usa -L en lugar de -R.

Los comandos anteriores suponen que está utilizando un cliente terminal ssh. Los clientes gráficos, como PuTTY para Windows, también admiten túneles

Daniel Lundmark
fuente
No responde la pregunta de OP cuya IP no es estática.
2
A menos que me haya perdido algo, esto debería estar bien para que el OP se conecte desde la máquina remota actual al local. La tunelización se realizará a través de la sesión SSH. A medida que la conexión SSH se configura desde la máquina local dinámica al control remoto, tendrá éxito y, por lo tanto, podrá configurar un puerto de escucha en la máquina remota que haga un túnel de regreso a donde vino.
Esto requerirá que OP configure el servidor SSH en su máquina local y se encargue de la autenticación. Por lo tanto, esto puede ser más problemático de lo que vale en algunos casos de uso.
Septagram
Esto no solo funciona para IP dinámicas, sino que también funciona a través de firewalls que prohíben las conexiones ssh de remoto a local. Muy útil respuesta!
3
Puede hacerlo aún más conveniente configurando el reenvío de puerto remoto con el ~Cescape. Simplemente escriba <Enter>~C-R 12345:localhost:22<Enter>y tendrá su túnel sin abandonar su sesión SSH ya establecida.
6

Pruebe lo siguiente en la línea de comandos desde la máquina remota, es posible que deba habilitar el reenvío de puertos en su enrutador.

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

Fuente: scp fácilmente un archivo al host desde el que se está conectando (commandlinefu.com)

Patrick McLaren
fuente
1
Para explicar lo que esto hace para las personas que se encontraron con esto, ${SSH_CLIENT%% *}envíe la IP de su máquina local. Entonces, todo el comando abre una sesión scp desde la máquina remota a su máquina local para la transferencia de archivos. Esto solo se puede hacer si puede SSH a su máquina local desde la máquina remota.
bizi
2
Esto se puede mejorar aún más al agregar algo como export ME="${SSH_CLIENT%% *}"en su archivo rc de shell. Entonces puede simplemente usarscp <file> $ME:<local path>
kralyk
Genial, esto funciona, sin embargo, tenga en cuenta: si inicia sesión a través de VPN, los archivos no terminarán en su máquina, sino en otro lugar.
kap
1

Tal vez zssh ?

zssh (Zmodem SSH) es un programa para transferir interactivamente archivos a una máquina remota mientras se utiliza el shell seguro (ssh). Pretende ser una alternativa conveniente a scp, ya que permite transferir archivos sin tener que abrir otra sesión y volver a autenticarse.

zssh es un contenedor interactivo para ssh

Utiliza las venerables implementaciones rz, sz de la transferencia de archivos zmodem.

RedGrittyBrick
fuente
1

Votó esta pregunta, esto es algo que me gustaría lograr fácilmente también.

Aquí está la respuesta relacionada: ¿Cómo puedo SCP de máquina remota a máquina local cuando estoy fuera de mi red doméstica?

Debe permitir el acceso a ssh desde fuera de su red. Esto se hace reenviando un puerto en su enrutador de banda ancha a la LAN IP de su servidor. Sin embargo, existen algunas preocupaciones de seguridad al permitir el acceso ssh desde el exterior, por lo que también es posible que desee buscar métodos para asegurar ssh, en particular la autenticación basada en claves y deshabilitar por completo la autenticación de contraseña.

Mars Robertson
fuente
0

Una solución sería suspender la sesión ssh en la máquina local, realizar la copia en la máquina local y luego reanudar su sesión ssh donde la dejó.

Por ejemplo, supongamos que estoy conectado a myuser @ remote y quiero copiar el archivo lol.txt en mi computadora local. Primero quiero suspender ssh en mi máquina local. Normalmente usaría Ctrl- Zpara suspender, pero esto no funcionará en ssh porque se enviará al shell remoto. En su lugar, debe usar la secuencia de escape ssh Enter~. Para suspender ssh presione Enter~ Ctrl- Z. Ahora puede ejecutar comandos en su máquina local y puede hacer

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

para copiar el archivo y luego volver a ssh exactamente donde lo dejó con

user@localmachine:~$ fg


fuente
pero el problema no es copiar desde el control remoto, el problema es copiar desde el control remoto, no veo cómo suspender shell hace algo para solucionar eso ...
alex
Bueno, también funciona a la inversa. La idea es simplemente suspender la sesión en lugar de salir de ella, lo que lo hace al menos un poco más fácil.
Steen Schütt
0

Si desea una solución más simple, simplemente abra la cuenta de Dropbox, vaya a la máquina remota y haga wget (versión modificada desde aquí ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

alex
fuente