¿Cómo copiar un archivo sin usar scp dentro de una sesión ssh?

55

He iniciado sesión en un sistema con ssh y no hay ningún scp presente en ambos sistemas. Cómo copiar un archivo sin usar el programa scp.

Talespin_Kit
fuente
¿Netcat (nc) está presente en ambos sistemas? Si es así, use su sesión ssh para hacer un túnel en un puerto TCP y use nc en ese puerto.
¿Tiene usted rsync?
slhck 01 de
3
También puede hacer esto:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
n. 'pronombres' m.
@nm citas requeridas (para mí, servidor ubuntu)
Ivan Black
@nm no funciona para mí: el archivo está dañado (supongo que el mensaje de inicio de sesión lo rompe).
monnef

Respuestas:

94

Para enviar un archivo:

cat file | ssh ajw@dogmatix "cat > remote"

O:

ssh ajw@dogmatix "cat > remote" < file

Para recibir un archivo:

ssh ajw@dogmatix "cat remote" > copy
Flexografía
fuente
20
@ggg eso no es cierto en absoluto. cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testTodo funciona bien. No hay nada inherentemente "mágico" en los archivos binarios. Ambos archivos en mi ejemplo son idénticos y tienen la misma suma de verificación. Es cierto que copiar y pegar desde una ventana de terminal no funcionará debido a cosas como secuencias de control y caracteres no imprimibles, pero el uso de tuberías como estas nunca se acercan a una terminal.
Flexo
@Flexo Necesito algo como esto, la única excepción es que necesito canalizar todos los archivos jpg desde una carpeta. ¿Cómo podría iterar a través de / storage / sdcard1 / * jpg y >a los archivos con el mismo nombre?
George Profenza
2
@GeorgeProfenza necesitarás agregar tara la mezcla. tar cvf - /path/*.jpg | ssh [email protected] "tar xvf -"o algo similar debería funcionar.
Flexo
Una implicación de lo que dicen ggg y Flexo es que no se puede usar la opción "-t" para ssh.
mjg123
1
¡Agradable! También puede usar pv en lugar del primer gato para obtener una pv file | ssh ajw@dogmatix "cat > remote"
barra de
3

Prueba esto:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 
Keith
fuente
2
no hay necesidad de tantas llamadas de gatos
Flexo
1

Puede usar xxdy algunas citas feas para copiar varios archivos, así como ejecutar comandos en ellos y ejecutarlos:

ssh -t foo@bar.com "
echo $'"$(cat somefile | xxd -ps)"' | xxd -ps -r > "'somefile'"
chmod +x somefile
echo $'"$(cat someotherfile | xxd -ps)"' | xxd -ps -r > "'someotherfile'"
chmod +x someotherfile
./somefile
./someotherfile
"
Aric
fuente
ah, mi respuesta es claramente demasiado l33t
Aric
-1

Además de canalizar el archivo a un control remoto cat, también puede usar algún cliente SFTP para transferir los archivos.

salva
fuente
+1 pero debe tenerse en cuenta que el OP está intentando evitar scp porque no existe en los sistemas. Dada esta restricción, también es probable que un servidor FTP deba existir en el extremo receptor, lo que hace que el proceso de copia dependa de un software que no sea el que normalmente está allí por defecto.
Paul Sasik
-1

python3 -m http.serveren el mismo directorio con el archivo deseado - después de que pueda curlo wgeto descargar un archivo con su navegador. Tenga en cuenta que con ese comando en ejecución todos sus archivos del directorio actual estarán disponibles públicamente, hasta que presione Ctrl+ C.

Vitaly Zdanevich
fuente