Quiero descargar un archivo de una sesión SSH activa. En muchos casos, probablemente podría sólo tiene que utilizar SFTP, scp
, rsync
et al, pero hay momentos en los que he elevados permisos en el servidor remoto de una manera que no puedo usar estos métodos.
Si te cuesta entender lo que quiero decir, imagina que deseas descargar algo de /root/
o /var/log/auth.log
. El inicio de sesión raíz está deshabilitado (porque no somos idiotas). ¿Cómo se obtiene ese archivo? ¿Copiarlo en un lugar menos protegido y luego moverlo? Esto es torpe. También hay escenarios en los que la ruta remota es compleja o temporal, o ni siquiera es una ruta porque quiero que la salida de un comando remoto se almacene localmente. ¿Almacenar de forma remota y luego copiar? Clunk!
Hay varias formas más torpes de lograr versiones de estos, pero en un mundo ideal, tendría algo similar al acceso de escritura local desde el servidor remoto, utilizando la sesión SSH existente como un conducto. Algo así (esto es solo la impresión de un artista):
$oli@remote: cp /root/cheesecake /local/
Y solo aparece en mi local cwd
. Y el acceso bidireccional no sería algo malo.
Han pasado ocho largos años desde que hice esta pregunta y hemos visto un rango real de clunk, pero sigue siendo un problema con el que todavía lucho ocasionalmente.
He refactorizado la pregunta en algo mucho más idealista. Entiendo completamente que puede que actualmente no haya una respuesta perfecta. Todos los esfuerzos pasados y futuros hacia mi ideal son apreciados.
zssh
probablemente esté más cerca del flujo de trabajo tipo zmodem que pueda estar recordando.Respuestas:
Es posible que desee consultar zssh , que está disponible en el universo y, por lo tanto, disponible con
sudo apt-get install zssh
Lo necesita en su servidor ubuntu y en su cliente, pero básicamente cuando inicia sesión con zssh, simplemente presiona 'ctrl- @' y aparece el "Modo de transferencia de archivos" que le permite enviar archivos de vuelta por la tubería a su máquina cliente, o cárguelas del cliente al servidor.
Sin embargo, no tiene que volver a autenticar o abrir una nueva ventana para scp.
Si está utilizando claves ssh y un agente ssh, puede hacer fácilmente:
Lo que hará ssh en segundo plano, y luego solo
scp $!:/whatever/whatever .'
Una vez que se transfiere el archivo,
fg
para recuperar ssh.Si no está usando las teclas ssh, aún puede usar las opciones "ControlMaster" y "ControlPath" agregadas a las versiones recientes de OpenSSh, pero eso se vuelve complicado, consulte man ssh_config
fuente
Suponiendo que esté ejecutando un servidor ssh en su escritorio (hay formas de evitar esto, pero creo que todos agregan complejidad y posiblemente tienen problemas de seguridad), puede configurar un túnel ssh inverso. Consulte SSH copiar fácilmente el archivo al sistema local. encima en unix.SE .
~C
Enter-R 22042:localhost:22
Enterpara 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).scp -P 22042 foo localhost:
copiará el archivofoo
en su directorio actual en el servidor a su hogar en el escritorio.~
Ctrl+ Zmv ~/foo .
Enterfg
Enter.Las secuencias de escape Ssh comienzan con
~
; la tilde solo se reconoce después de una nueva línea.~ Ctrl+Z
pone ssh en segundo plano.~C
ingresa una línea de comando donde puede crear o eliminar un reenvío.fuente
Se me ocurrió una manera de hacer esto con ssh estándar. Es un script que duplica la conexión ssh actual, encuentra su directorio de trabajo en la máquina remota y copia el archivo que especifique en 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:
Agregue estas 2 líneas a su
~/.ssh/config
:Ahora, si tiene una conexión ssh para abrir machineX, no necesitará contraseñas para abrir otra.
Haga un script de 1 línea en la máquina remota llamada
~/.grabCat.sh
Cree un script en la máquina local llamado ~ / .grab.sh
y crea un alias para grab.sh en (
~/.bashrc
o donde sea):Eso es todo, hecho. Ahora, si ha iniciado sesión
machineX:/some/directory
, simplemente inicie una nueva terminal y escribaEso 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
.fuente
Si su máquina cliente (la máquina en la que está sentado) se llama máquinaA y la máquina en la que se encuentra actualmente SSH se llama máquina B. MáquinaA, su máquina local debe tener SSHD funcionando y el puerto 22 abierto. Entonces:
Copias
myfile
en MachineB al directorio de inicio de mi MachineA en machineA. Esto supone que el ID de usuario / contraseña son los mismos.Copias
myfile
uno a machineB/newdir/newname
de Machinea. Esto supone que el ID de usuario / contraseña son los mismos.Obtiene una copia de
otherfile
mi directorio MachineA en MachineA y la coloca en mi directorio de trabajo actual en la máquina MachineB (designada en forma UNIX estándar por el carácter "punto" (.)). Esto supone que el ID de usuario / contraseña son los mismos.Si el ID de usuario / contraseña no son los mismos, use:
scp myfile user@MachineA:
para obtener el archivoscp user@MachineA:/path/to/my/otherfile .
poner archivosNOTAS sobre SCP:
Al igual que el
cp
comando,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 archivos nuevos) y una opción -r para copiar un árbol de directorios completo con uno mando.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 quescp
no puede realizar la conversión automática de terminación de fin de línea entre diferentes tipos de sistemas operativos, como se puede hacer con ftp en modo "ascii". Eso no será un problema al copiar entre sistemas Unix, que utilizan la misma convención de fin de línea.fuente
si accede al servidor a través de ssh, también puede conectarse a través de sftp. Mantenga a mano el cliente de filezilla (GUI) y pegue la ruta en la que se encuentra actualmente
fuente
Si su archivo es lo suficientemente pequeño, puede codificarlo con base64 y luego decodificarlo localmente:
Respuesta original de donde obtuve esto (y probado) de: https://unix.stackexchange.com/a/2869/194134
fuente
No está sobre la conexión SSH activa, pero scp copia archivos usando los mismos mecanismos y permisos que ssh.
fuente
get file
y aparece mágicamente en mi máquina local. Si tiene que hacer eso a través de algún servicio tunelizado a través de SSH, que así sea ... Pero debería estar vinculado a la sesión.sshd
ejecutado y, por lo tanto, debería poder usarlosscp
en la línea de comandos del servidor para devolver los archivos al cliente. Solo hay mucha magia para todos; a veces todavía tenemos que presionar los botones. La solución FileZilla también es útil.Esto no es posible con una sesión ssh predeterminada, pero podría usar un script en lugar de ssh, que inicia algo así como un simple servidor ftp o rsh en su sistema local y ejecuta ssh con las opciones necesarias para configurar un túnel en su escritorio para conectarse a este servidor.
fuente
konsole
tiene esa capacidad a través del menú "Editar-> Subir ZModem" mientras está en una sesión remota (o Ctrl-Alt-U).Tenga en cuenta: el paquete
lrzsz
debe instalarse primero. Para mí, parece que solo funciona para cargar archivos ASCII.fuente
Como se está conectando desde un escritorio, supongo que puede abrir una segunda terminal.
Así es como lo hago a menudo:
realpath myfile
oreadlink -f myfile
(las versiones anteriores de Ubuntu no se preinstalanrealpath
) y lo copio.scp
osftp
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.
fuente
Sorprendentemente, no veo ninguna mención del buen viejo Comandante de Medianoche aquí. En mi opinión, es probablemente el administrador de archivos más universal y útil para shell con capacidades de potencia, una de las herramientas "imprescindibles" para el caso, que también le permite conectarse a través de SSH, FTP, SFTP, mientras está encendido el segundo panel puede abrir cualquier otro sistema de archivos (su local) y trabajar con archivos libremente.
Todo lo que necesitas 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 de shell, ingrese username @ remote-ip, la contraseña; en realidad, eso es todo ... copie (aquí: descargue) archivos / carpetas de una máquina a otra con F5, muévase con F6, y así sucesivamente según los botones a continuación. Para los antiguos usuarios de MS: al igual que en NC para DOS
fuente
MANERA de pensar demasiado en esto, amigos. Estaba buscando todas las respuestas profundas, oscuras y complejas también. Resulta que puedes hacer esto directamente desde Dolphin directamente de la lata. fish: // nombre de usuario @ servidor: puerto
fuente