transferir transferencia subir por mover ejemplo desde archivos shell ftp ssh sftp openssh

shell - transferencia - transferir archivos sftp linux



SSH: ¿una forma de transferir archivos sin abrir una sesión SFTP por separado? (9)

En la escuela, si estoy transfiriendo un archivo de un sistema Linux a otro, generalmente uso el ssh de forma remota y luego uso scp para transferir el archivo del sistema remoto a mi computadora. No estoy seguro de si eso es lo que está buscando o si eso es incluso aplicable en su caso, pero esa es generalmente mi forma de evitar tener que abrir otra ventana de terminal.

Solo para aclarar si aún no está familiarizado con scp, tendría que especificar la ubicación de la ubicación en la que desea colocar el archivo en su computadora, pero para mí, de todos modos, esto es generalmente más fácil de recordar que la ubicación del archivo en el control remoto computadora. Aquí hay un enlace que puede ser útil: http://www.computerhope.com/unix/scp.htm

No es realmente una pregunta de programación, pero es relevante para muchos programadores ...

Digamos que he abierto una sesión de SSH en otra computadora.

remoto: html avalys $ ls
welcome.msg index.html readme.txt
remoto: html avalys $

¿Hay algún comando que pueda escribir en mi shell remoto que transfiera inmediatamente uno de los archivos en el directorio actual (por ejemplo, welcome.msg) a mi computadora local, es decir,

remoto: html avalys $ stransfer welcome.msg
Obteniendo /home/avalys/html/welcome.msg para welcome.msg
/home/avalys/html/welcome.msg 100% 23 KB 23,3 KB / s 00:00
remoto: html avalys $

La única forma que conozco de hacer esto es abrir una sesión SFTP paralela y un CD en mi directorio actual en la sesión SSH, que es un PITA real cuando se administra un servidor de forma remota.

EDITAR: Soy consciente de la posibilidad de utilizar una conexión sftp / scp inversa, pero eso implica más tipeo. Sería genial si pudiera escribir solo el nombre de algún comando (por ejemplo, "stransfer"), y el / los archivo (s) que deseo transferir, y hacer que funcione.


Podrías escribir un script bash llamado stransfer que tomaría un argumento de nombre de archivo, y luego intervendría el nombre del archivo en el comando scp, suponiendo que el servidor y la ruta a los archivos en el servidor no cambian.

O si el archivo es siempre el mismo, podría crear un alias en su archivo ~ / .bashrc.

alias getwelcome = ''scp avalys @ remotehost: /home/avalys/html/welcome.msg.''


Si le gustan los parches (que en mi humilde opinión no deberían tener parches), eche un vistazo a ssh-xfer


Puede configurar una conexión de transferencia invertida con ssh -Rport:127.0.0.1:22 user@host for scp back.

Use scp user @ host: puerto para acceder a él.


Tenía el mismo pensamiento que Paul Tomblin escribió en un comentario a la pregunta. Las antiguas sesiones de terminal solían usar los protocolos y herramientas x, yy z-modem ( sz y rz para las variantes z-modem) para lograr algo como esto. No estoy seguro de si funcionarán en una sesión ssh, pero podría valer la pena intentarlo.

Fink proporciona un paquete lrzsz con esta herramienta en Mac OS X.

Hacer esto una wiki comunitaria porque me sentiría mal por obtener un representante después de que Paul llegara primero ...


Al investigar esto, encontré un programa que funciona como un reemplazo directo para el cliente de openssh, zssh.

sudo apt-get install zssh zssh user@remote sudo apt-get install zssh sz file.name <ctrl>+<space> rz

Funciona de maravilla.


Puede montar una conexión ssh con sshfs. De esta forma puede transferir archivos dentro de la misma conexión ssh, mientras usa el cliente ssh que más le guste. Incluso puede configurarlo para automount si lo desea.



Aquí está mi solución preferida para este problema [como aparece en una pregunta duplicada que hice]. Configure un túnel ssh inverso al crear la sesión ssh. Esto se facilita con dos funciones bash: grabfrom () debe definirse en el host local, mientras que grab () debe definirse en el host remoto. Puede agregar cualquier otra variable ssh que use (por ejemplo, -X o -Y) como mejor le parezca.

function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; }; function grab() { scp -P 2202 $@ [email protected]:~; };

Uso:

localhost% grabfrom remoteuser@remotehost password: <remote password goes here> remotehost% grab somefile1 somefile2 *.txt password: <local password goes here>

Positivos:

  • Funciona sin software especial en cualquier host más allá de OpenSSH
  • Funciona cuando el host local está detrás de un enrutador NAT
  • Se puede implementar como un par de dos funciones bash de una sola línea

Negativos:

  • Utiliza un número de puerto fijo por lo que:
    • no funcionará con múltiples conexiones al host remoto
    • podría entrar en conflicto con un proceso que utiliza ese puerto en el host remoto
  • Requiere localhost accept ssh connections
  • Requiere un comando especial en la iniciación de la sesión
  • No maneja implícitamente la autenticación al host local
  • No permite especificar el directorio de destino en el host local
  • Si toma de múltiples locales al mismo host remoto, a ssh no le gustará que cambien las teclas

Trabajo futuro: esto todavía es bastante kludgy. Obviamente, sería posible manejar el problema de autenticación configurando las claves ssh de manera apropiada y es aún más fácil permitir la especificación de un directorio remoto agregando un parámetro a grab ()

Más difícil es abordar los otros aspectos negativos. Sería bueno elegir un puerto dinámico pero, por lo que puedo ver, no hay una forma elegante de pasar ese puerto al shell en el host remoto; Lo mejor que puedo decir es que OpenSSH no le permite establecer variables de entorno arbitrarias en el host remoto y bash no puede tomar variables de entorno de un argumento de línea de comando. Incluso si pudiera elegir un puerto dinámico, no hay forma de asegurarse de que no se use en el host remoto sin conectarse primero.