remote permission password how from ejemplo linux ssh scp

linux - permission - ¿Cómo hacer scp para volver a local cuando ya he accedido a una máquina remota?



scp linux password (4)

A menudo me enfrento a esta situación: me inscribí en un servidor remoto y ejecuté algunos programas, y quiero copiar sus archivos de salida a mi máquina local. Lo que hago es recordar la ruta del archivo en la máquina remota, salir de la conexión, luego scp user@remote:filepath .

Obviamente esto no es óptimo. Lo que estoy buscando es una forma de permitirme volver a enviar el archivo a la máquina local sin tener que salir de la conexión. Hice una búsqueda, casi todos los resultados me dicen cómo hacer scp desde mi máquina local, que ya sé.

es posible? Mejor aún, ¿es posible sin necesidad de conocer la dirección IP de mi máquina local?


Dado que tiene un sshd ejecutándose en su máquina local, es posible y no necesita conocer 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 finalizarla.

Supongamos 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 copiar ese archivo a 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 (Enter, luego tilde, luego mayúscula C):

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 igual que las opciones regulares -L/R/D Necesitaremos -R , por lo que presionamos Enter ~C nuevamente y escribimos:

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 otro puerto, utilícelo en lugar de 22).

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

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 simplemente ejecutar scp desde otra terminal, podría ayudar.


En su computadora local:

scp root @ remotemachine_name_or_IP: / complete_path_to_file / local_path


Encontré que esta solución de una sola línea en la SU es mucho más directa que la respuesta aceptada. Dado que utiliza una variable de entorno 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 a la baja" un archivo (es decir, pasar de una 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 dl somefile.txt mientras SSH se encuentra en el control remoto y somefile.txt aparece en mi carpeta de descargas local.

extras:

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

Nota: esto requiere acceso SSH a la máquina local desde el control remoto (¿suele ser el caso de alguien?)


Necesitaría un servidor ssh local ejecutándose en su máquina, entonces puede simplemente:

scp [-r] local_content your_local_user@your_local_machine_ip:

De todos modos, no necesita cerrar su conexión remota para hacer una copia remota, simplemente abra otra terminal y ejecute scp allí.