Descargar un archivo durante una sesión activa de SSH

83

Así que estoy SSHed en mi servidor Ubuntu desde mi escritorio Ubuntu. Estoy en una ruta determinada y quiero descargar un archivo a mi sistema de archivos local (preferiblemente la ruta en la que estaba antes de ingresar a la sesión de SSH).

Podría montar SSH y pasar el archivo por el mouse, pero ¿qué sucede si estaba intentando obtener un archivo raíz y el inicio de sesión directamente no está permitido? Incluso si ese no era el caso (no lo es ahora), seguramente debe haber una forma simple de retirar un archivo a través de una conexión SSH activa.

¡Seguro!

    
pregunta Oli 15.11.2010 - 15:59

11 respuestas

32

Le recomendamos que consulte zssh , que está disponible en el universo y, por lo tanto, está disponible con

sudo apt-get install zssh

Lo necesitas en tu servidor ubuntu y en tu cliente, pero básicamente cuando inicias sesión con zssh, simplemente presionas 'ctrl- @' y aparece el "Modo de transferencia de archivos" que te permite enviar archivos de vuelta al conectar a su máquina cliente, o subirlos de cliente a servidor.

Sin embargo, no tiene que volver a autenticar ni abrir una nueva ventana para scp.

Si está utilizando claves ssh y un agente ssh, puede hacerlo con bastante facilidad:

[enter]~[ctrl]-Z

¿Cuál será el fondo ssh, y luego solo scp $!:/whatever/whatever .'

Una vez que se transfiere el archivo, fg para recuperar ssh.

Si no está utilizando las claves ssh, puede seguir utilizando las opciones "ControlMaster" y "ControlPath" agregadas a versiones recientes de OpenSSh, pero eso es complicado, consulte man ssh_config

    
respondido por el SpamapS 17.11.2010 - 01:46
24

Suponiendo que está ejecutando un servidor ssh en su escritorio (hay formas de evitar esto, pero creo que todos agregan complejidad y posiblemente tengan problemas de seguridad), puede configurar un túnel ssh inverso. Ver SSH copiar fácilmente el archivo al sistema local. en unix.SE .

  • Escriba Ingrese ~C Ingrese -R 22042:localhost:22 Ingrese para crear un reenvío de puerto inverso desde su servidor a su escritorio (22042 puede ser cualquier número de puerto entre 1024 y 65534 que no esté en uso).
  • Entonces scp -P 22042 foo localhost: copiará el archivo foo en su directorio actual en el servidor a su hogar en el escritorio.
  • Ahora mueve el archivo a tu directorio actual en el escritorio escribiendo Enter ~ Ctrl + Z mv ~/foo . Ingrese fg Ingrese .

Secuencias de escape de Ssh comienzan con ~ ; la tilde solo se reconoce después de una nueva línea. ~ Ctrl+Z pone ssh en el fondo. ~C ingresa a una línea de comando donde puede crear o eliminar un reenvío.

    
respondido por el Gilles 15.11.2010 - 23:37
10

Se me ocurrió una forma de hacer esto con ssh estándar. Es una secuencia de comandos que duplica la conexión ssh actual, encuentra su directorio de trabajo en la máquina remota y copia el archivo que especificó a la máquina local. Necesita 2 scripts muy pequeños (1 remoto, 1 local) y 2 líneas en su configuración ssh. Los pasos son los siguientes:

  1. Agregue estas 2 líneas a su ~/.ssh/config :

    ControlMaster auto
    ControlPath ~/.ssh/socket-%r@%h:%p
    

    Ahora, si tienes una conexión ssh para machineX open, no necesitarás contraseñas para abrir otra.

  2. Cree una secuencia de comandos de 1 línea en la máquina remota llamada ~/.grabCat.sh

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/
    
  3. Cree una secuencia de comandos en la máquina local llamada ~ / .grab.sh

    \#!/bin/bash
    [ -n "" ] && dir="" || dir="."
    ssh "" ".grabCat.sh " > "$dir/"
    
  4. y cree un alias para grab.sh en ( ~/.bashrc o donde sea):

    alias grab=~/.grab.sh
    

Eso es todo, hecho. Ahora, si ha iniciado sesión en machineX:/some/directory , simplemente inicie una nueva terminal y escriba

grab machineX filename

Eso coloca el archivo en su directorio de trabajo actual en la máquina local. Puede especificar una ubicación diferente como tercer argumento para "agarrar".

Nota: Obviamente, ambos scripts deben ser "ejecutables", es decir, chmod u+x filename .

    
respondido por el user6702 30.11.2010 - 11:29
5

Si su máquina cliente (la máquina en la que está sentado) se llama machineA y la máquina a la que está conectado actualmente SSH se llama máquina B. MachineA, su máquina local debe tener SSHD en funcionamiento y el puerto 22 abierto. Entonces:

scp myfile machineA:

Copia myfile en MachineB en el directorio de inicio de MachineA en machineA. Esto supone que el ID de usuario / contraseña es el mismo.

scp myfile machineA:/newdir/newname

Copia myfile one MachineB en /newdir/newname en machineA. Esto supone que el ID de usuario / contraseña es el mismo.

scp MachineA:/path/to/my/otherfile . 

Obtiene una copia de otherfile de mi directorio de MachineA en MachineA y la coloca en mi directorio de trabajo actual en la máquina MachineB (designada en la moda estándar de UNIX por el carácter "punto" (.)). Esto supone que el ID de usuario / contraseña es el mismo.

Si el ID de usuario / contraseña no es el mismo, utilice:

scp myfile user@MachineA: para obtener el archivo.

scp user@MachineA:/path/to/my/otherfile . para colocar archivos

NOTAS sobre SCP:

Al igual que el comando cp , scp tiene una opción -p para propagar la configuración de permisos del archivo original a la copia (de lo contrario, la copia se realiza con la configuración normal para los archivos nuevos) y una -r opción para copiar un árbol de directorios completo con un comando.

scp crea un canal de datos cifrados completamente transparente entre las dos máquinas, por lo que los datos binarios (como imágenes o programas ejecutables) se conservan correctamente. Esto también significa que scp no puede realizar la conversión de finalización de línea automática entre diferentes tipos de sistemas operativos, como se puede hacer con ftp en el modo "ascii". Eso no será un problema al copiar entre sistemas Unix, que todos usan la misma convención de fin de línea.

    
respondido por el LukeInDC 07.12.2012 - 20:39
2

si accede al servidor a través de ssh, también tiene la capacidad de conectarse a través de sftp. Mantenga el cliente de Filezilla (GUI) a mano y pegue la ruta en la que se encuentra actualmente

    
respondido por el jet 16.11.2010 - 02:12
1

No se trata de la conexión SSH activa, pero scp copia archivos utilizando los mismos mecanismos y permisos que ssh.

    
respondido por el msw 15.11.2010 - 17:11
1

Esto no es posible con una sesión ssh predeterminada, pero podrías usar una secuencia de comandos en lugar de ssh, que comienza algo así como un simple servidor ftp o rsh en tu sistema local y ejecuta ssh con las opciones necesarias para configurar un túnel a su escritorio para conectarse a este servidor.

    
respondido por el JanC 15.11.2010 - 18:45
1

konsole tiene esa capacidad a través del menú "Editar- & gt; ZModem Upload" mientras estás en una sesión remota (o Ctrl-Alt-U).

Tenga en cuenta que el paquete lrzsz debe instalarse primero. Para mí parece que funciona solo para cargar archivos ASCII.

    
respondido por el jet 13.09.2015 - 22:58
1

Si su archivo es lo suficientemente pequeño, puede codificarlo con base64 y luego decodificarlo localmente:

remote.example.net$ base64 <myfile
(copy the output)
local.example.net$ base64 -d >myfile
(copy the output)
Ctrl+D

Respuesta original en la que obtuve esto (y lo probé) desde: enlace

    
respondido por el wesalius 20.01.2017 - 20:17
0

Como se está conectando desde un escritorio, creo que puede abrir un segundo terminal.

Así es como lo hago a menudo:

  • desde el primer terminal, aquel en el que se está ejecutando la sesión ssh, obtengo la ruta completa del archivo que necesito obtener, usando realpath myfile o readlink -f myfile (las versiones anteriores de Ubuntu no preinstalan realpath ) y cópielo.
  • del segundo terminal utilizo scp o sftp para obtener el archivo, pegando la ruta completa que obtuve antes. Por ejemplo: scp user@host:/etc/some/file ./

Es bastante básico, pero también es fácil de recordar y no necesita ningún paquete adicional para funcionar.

    
respondido por el gerlos 20.01.2018 - 10:59
0

Sorprendentemente, no veo ninguna mención del buen viejo Midnight Commander aquí. En mi opinión, es probablemente el más universal y amp; útil administrador de archivos para shell con capacidades de energía, una de las herramientas "imprescindibles" para el caso, que también le permite conectarse a través de SSH, FTP, SFTP también, mientras que en el segundo panel puede abrir cualquier otro (su local) sistema de archivos y así trabajar con archivos libremente.

Todo lo que necesita es: apt-get install mc (del universo)

Después de eso, ejecute mc, abra el menú para el panel izquierdo o derecho, elija la conexión del shell, ingrese username @ remote-ip, la contraseña - en realidad, eso es .. copiar (aquí: descargar) archivos / carpetas de una máquina a otro con F5, muévete con F6, y así sucesivamente de acuerdo con los botones a continuación. Para los viejos usuarios de MS: al igual que en NC para DOS

    
respondido por el Nex0 04.07.2018 - 15:10

Lea otras preguntas en las etiquetas