GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo volver a scp a local cuando ya he ingresado a la máquina remota?

Dado que tienes un sshd ejecutándose en su máquina local, es posible y no necesita saber su dirección IP saliente. Si el reenvío de puertos SSH está habilitado, puede abrir un túnel seguro incluso cuando ya tiene una conexión ssh abierta y sin terminarla.

Suponga que tiene una conexión ssh a algún servidor:

local $ ssh [email protected]
Password:
remote $ echo abc > abc.txt  # now we have a file here

Bien, ahora necesitamos volver a copiar ese archivo en nuestro servidor local y, por alguna razón, no queremos abrir una nueva conexión. OK, obtengamos la línea de comando ssh presionando Enter ~C (Ingresar, luego tilde, luego C mayúscula):

ssh> help
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward

Eso es como el -L/R/D regular opciones Necesitaremos -R , así que presionamos Enter ~C de nuevo y escriba:

ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.

Aquí reenviamos el puerto 2222 del servidor remoto al puerto 22 de la máquina local (y aquí es donde necesita que el servidor SSH local se inicie en el puerto 22; si está escuchando en algún otro puerto, utilícelo en lugar del 22).

Ahora solo ejecuta scp en un servidor remoto y copie nuestro archivo en el puerto 2222 del servidor remoto que está asignado al puerto 22 de nuestra máquina local (donde nuestro sshd local se está ejecutando).

remote $ scp -P2222 abc.txt [email protected]:
[email protected]'s password:
abc.txt                   100%    4     0.0KB/s   00:00

¡Hemos terminado!

remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc

Difícil, pero si realmente no puedes solo ejecuta scp desde otra terminal, podría ayudar.


Descubrí que esta solución de una sola línea en SU ​​es mucho más sencilla que la respuesta aceptada. Dado que utiliza una variable ambiental para la dirección IP local, creo que también satisface la solicitud del OP de no saberlo de antemano.

basado en eso, aquí hay una función bash para "Descargar" un archivo (es decir, empujar desde la sesión SSH a una ubicación establecida en la máquina local)

function dl(){
    scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}

Ahora solo puedo llamar a dl somefile.txt mientras usa SSH en el control remoto y somefile.txt aparece en mi carpeta de Descargas local.

adicionales:

  • Utilizo claves rsa (ssh-copy-id) para sortear la solicitud de contraseña
  • Encontré este truco para evitar que el bashrc local se origine en la llamada scp

Nota:esto requiere acceso SSH a la máquina local desde un lugar remoto (¿suele ser así para alguien?)


Linux
  1. ¿Cómo puedo copiar la salida de un comando remoto en el portapapeles local?

  2. ¿Cómo empiezo en bash cuando hago ssh en mi servidor?

  3. ¿Cómo conectarse a una máquina virtual Hyper-V local a través de SSH?

  4. Cómo cargar un archivo local al servidor a través de la terminal de Linux

  5. Cómo obtener varios archivos de una máquina remota a una local con Ansible

Cómo SSH en un directorio particular en Linux

Cómo usar SSH en un contenedor Docker

4 formas de transferir archivos entre sistemas remotos y locales a través de SSH

Cómo:Administración remota de FreeBSD

Cómo SSH en WSL2 en Windows 10 desde una máquina externa

Cómo SSH en una máquina con Windows 10 desde Linux O Windows O en cualquier lugar