Si he iniciado sesión en un sistema a través de SSH, ¿hay alguna manera de copiar un archivo a mi sistema local sin activar otra terminal o sesión de pantalla y hacer scp o algo similar o sin hacer SSH desde el sistema remoto de nuevo al sistema local?
257
scp file.foo [email protected]:file.foo
: PRespuestas:
Conexión maestra
Es más fácil si planifica con anticipación.
Abra una conexión maestra la primera vez. Para conexiones posteriores, enrute las conexiones esclavas a través de la conexión maestra existente. En su
~/.ssh/config
, configure el uso compartido de la conexión para que se realice automáticamente:Si inicia una sesión ssh con el mismo (usuario, puerto, máquina) que una conexión existente, la segunda sesión se tunelizará sobre la primera. Establecer la segunda conexión no requiere una nueva autenticación y es muy rápido.
Entonces, mientras tenga su conexión activa, puede rápidamente:
scp
orsync
;Reenvío
En una conexión existente, puede establecer un túnel ssh inverso. En la línea de comando ssh, cree un reenvío remoto pasando
-R 22042:localhost:22
donde 22042 es un número elegido al azar que es diferente de cualquier otro número de puerto en la máquina remota. Luego,ssh -p 22042 localhost
en la máquina remota, se conecta de nuevo a la máquina de origen; puedes usarscp -P 22042 foo localhost:
para copiar archivos.Puede automatizar esto aún más con
RemoteForward 22042 localhost:22
. El problema con esto es que si te conectas a la misma computadora con varias instancias de ssh, o si alguien más está usando el puerto, no obtienes el reenvío.Si no ha habilitado un reenvío remoto desde el principio, puede hacerlo en una sesión ssh existente. Tipo Enter
~C
Enter-R 22042:localhost:22
Enter. Consulte "Caracteres de escape" en el manual para obtener más información.También hay información interesante en este hilo de Falla del servidor .
Copiar pegar
Si el archivo es pequeño, puede escribirlo y copiar y pegar desde la salida del terminal. Si el archivo contiene caracteres no imprimibles, use una codificación como base64 .
Más convenientemente, si tiene el reenvío X activo, copie el archivo en la máquina remota y péguelo localmente. Puede canalizar datos dentro y fuera de
xclip
oxsel
. Si desea conservar el nombre del archivo y los metadatos, copie y pegue un archivo.fuente
Otra forma fácil (IMO) sería:
O si prefieres algo parecido a una GUI, prueba Midnight Commander . Llaman a la función Shell-Link . La mayoría de las distribuciones tienen em en sus sistemas de paquetes como
mc
.fuente
mc
Es el más rápido de usar.tgz
archivos todo el tiempo :)SSH admite algunos comandos, a través del carácter de escape (
~
por defecto):El
!args
parece estar más cerca de lo que quieres. Tenga en cuenta que deberá tenerPermitLocalCommand
habilitado en su/etc/ssh_config
archivo para que los~C
comandos funcionen (verman ssh_config
).Se puede volver a utilizar la misma sesión ssh si se configura una
ControlMaster
enssh_config
. Si haces esto:técnicamente nunca ha dejado la sesión ssh y no necesita volver a autenticarse. Probablemente más complicado de lo que te gustaría, pero no puedo pensar en otra manera fácil.
fuente
!args
en el mensaje de ayuda.args
no está en el primer mensaje de ayuda (~?
), pero en el segundo (una vez que se ingresa elssh>
mensaje con~C
, se puede escribirhelp
en elssh>
mensaje)Esos son todos métodos muy complicados.
Puede montar el sistema de archivos remoto en su máquina local con
sshfs
:Luego puede copiar y pegar el archivo con nautilus, gnome, konqueror, dolphin, bash o lo que sea.
fuente
sshfs -oIdentityFile=~/.ssh/keyfile.pem [email protected]:/ /mnt/sshfs/
-R
, para remoto a local) o reenviar (-L
, para local a remoto) puertos para ejecutar transferencias de archivos, suponiendo que tenga algún demonio de transferencia de archivos escuchando en el otro extremo.Pero ninguno de estos es realmente necesario, OMI. El protocolo SSH admite múltiples canales en una sola conexión, y el cliente OpenSSH admite multiplexación. Suponiendo que tiene
ControlMaster
yControlPath
configuró (tambiénControlPersist
es útil),fuente
Un enfoque aún más simple: abra Filezilla (o su navegador ftp favorito), abra una conexión ssh al mismo sitio, encuentre el archivo y arrástrelo a su estructura de archivos local. Si es nuevo en Filezilla, use la función "administrador del sitio" para volver a conectarse rápidamente la próxima vez.
Sí, sé que esto es obvio para la mayoría de ustedes (y no precisamente en el punto), pero algunos (como yo) que encontraron este hilo buscando una solución solo terminal pueden haber pasado por alto lo obvio.
fuente
ssh://SERVER
.Lo que he encontrado como la mejor y más eficiente solución es usar
xclip-copyfile
yxclip-pastefile
.En el servidor, usted usa
xclip-copyfile
para copiar uno o más archivos. Estos archivos están disponibles en su servidor local. Ahí puedes usarxclip-pastefile
.Esto evita la necesidad de usar
scp
o tener un servidor ssh local. Lo uso con cygwin por ejemplo. El único problema es que esto requiere instalaciónxclip
si aún no lo tiene. Ah, y esto también funciona con archivos binarios.fuente
Una de las muchas razones por las que usamos SecureCRT , a pesar de preferir el software de código abierto donde sea práctico, es la facilidad de realizar transferencias de archivos. Simplemente no hay reemplazo directo en el mundo F / OSS.
SecureCRT comenzó como un programa puro de Windows a mediados de la década de 1990, pero fue portado a Mac OS X y Linux hace un par de años .
SecureCRT tiene tres características principales para transferir archivos desde y hacia un sistema en el que está SSH:
ZModem , YModem , XModem , Kermit y ASCII : SecureCRT es un emulador de terminal de la vieja escuela que admite varios protocolos de transferencia de archivos en banda.
El más fácil de usar es ZModem. Cuando escribe algo como
sz file-to-download
en la línea de comando remota, elsz
programa remoto escribe una secuencia de escape que le dice a SecureCRT que comience a descargar de inmediatofile-to-download
en el directorio de descarga predeterminado.Un buen detalle es que el directorio de descargas es personalizable por sesión. Usamos esto para tener directorios por sitio en nuestro servidor de archivos de la oficina principal, por lo que no tenemos que ordenar manualmente los archivos descargados.
(
sz
es el programa "enviar ZModem", parte dellrzsz
paquete. Ya está empaquetado para la mayoría de los sistemas Unixy. Si por alguna razón su sistema remoto ya no lo tiene instalado y no puede instalar fácilmente un paquete binario, el El paquete fuente es pequeño y altamente portátil. Más de una vez, tuve que enviar unlrzsz
"sharchive" ouuencode
'd tarball a un sistema remoto simplificado para poder enviarle archivos ZModem).SFTP : SecureCRT tiene una implementación básica de SFTP estrechamente integrada.
Por "estrechamente integrado", quiero decir que cuando le das al comando de menú SFTP o al atajo de teclado, se abre una nueva pestaña conectada al sitio remoto a través de la misma conexión SSH. Por lo tanto, no necesita volver a iniciar sesión y la conexión se establece un poco más rápido que si hubiera abierto una conexión SFTP separada al mismo servidor.
Caracterizo la función SFTP como "básica", porque VanDyke Software tiene un producto de transferencia de archivos separado, SecureFX . Es más funcional que el cliente SFTP incorporado y también se integra con SecureCRT.
La función SFTP de SecureCRT le permite configurar directorios remotos y locales predeterminados que son independientes de la configuración de ZModem.
Esta función SFTP tiene una interfaz de línea de comandos básica, que imita el
sftp
programa de OpenSSH , excepto que tiene ventajas como la Tabfinalización de comandos. Por lo tanto, recuperar un archivo remoto llamadosomefile.tar.gz
podría ser tan fácil comoget so
TabEnter.Arrastrar y soltar : si arrastra y suelta un archivo en la ventana del terminal, se teclea automáticamente
rz
y comienza a enviar el archivo.Alternativamente, puede abrir una pestaña SFTP y soltar un archivo en esa pestaña para enviarlo a través de SFTP. Por lo tanto, el envío de un archivo a un sistema remoto podría ser tan simple como Alt-P, arrastrar , soltar .
Descubrimos que las transferencias se realizan mucho más rápido a través de SFTP, probablemente porque es un protocolo basado en TCP, por lo que se beneficia de las grandes ventanas deslizantes de las modernas pilas TCP / IP . ZModem fue diseñado en los días en que un tamaño de bloque de 64 kiB se consideraba "grande". Por lo tanto, gran parte de la velocidad potencial en un enlace se absorbe en ZModem mientras cada extremo espera confirmaciones de transferencia de bloque.
Una cosa buena del modo de operación de arrastrar y soltar es que elimina una de las tensiones de usar ZModem. Cuando escribe
rz
en el sistema remoto, SecureCRT muestra automáticamente un selector de archivos. Luego tiene aproximadamente un minuto para buscar y seleccionar el archivo antes de que se agote el tiempo del lado remoto. Esto crea un ambiente de carrera contra reloj que no es agradable. Arrastrar y soltar le permite encontrar el archivo a su gusto, luego comenzar la transferencia con un solo movimiento rápido del mouse.Todavía utilizamos el método manual, comenzando la transferencia con un
rz
comando explícito . Esto se debe a que SecureCRT le permite configurar un directorio de carga por sesión, que apuntamos a la carpeta en el servidor de archivos que siempre contiene la última versión del software que está ejecutando ese sitio remoto en particular. Para tales transferencias, no hay carrera contra reloj, ya que el selector de archivos se abre en el lugar correcto para comenzar.fuente
Utilizar "!" para convertir el archivo a una representación ASCII de su archivo (por ejemplo
! uuencode myfile.bin >uuencode.dat
). Entonces usar! cat uuencode.dat >target.dat
. Después de eso, use uudecode en el lado objetivo:! uudecode target.dat >myfile.bin
fuente