Come copiare un file senza usare scp all'interno di una sessione ssh?


55

Ho effettuato l'accesso a un sistema con ssh e su entrambi i sistemi non è presente scp. Come copiare un file senza usare il programma scp.


Netcat (nc) è presente su entrambi i sistemi? In tal caso, utilizzare la sessione ssh per eseguire il tunneling di una porta TCP e utilizzare nc su quella porta.

Hai rsync?
slhck,

3
puoi anche fare questo:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
n. 'pronomi' m.

@nm virgolette richieste (per me, server Ubuntu)
Ivan Black

@nm Non funziona per me - il file è corrotto (suppongo che il messaggio di login lo rompa).
lunedì

Risposte:


94

Per inviare un file:

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

O:

ssh ajw@dogmatix "cat > remote" < file

Per ricevere un file:

ssh ajw@dogmatix "cat remote" > copy

20
@ggg non è affatto vero. cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testtutto funziona bene. Non c'è nulla di intrinsecamente "magico" nei file binari. Entrambi i file nel mio esempio sono comparati identici e hanno lo stesso checksum. È vero che copiare e incollare da una finestra del terminale non funzionerà a causa di cose come sequenze di controllo e caratteri non stampabili, ma usando pipe come queste queste non si avvicinano mai ad un terminale.
Flexo,

@Flexo Ho bisogno di qualcosa del genere, l'unica eccezione è, ho bisogno di reindirizzare tutto il jpg da una cartella. Come si può passare da / storage / sdcard1 / * jpg >a file con lo stesso nome?
George Profenza,

2
@GeorgeProfenza dovrai aggiungerlo taral mix. tar cvf - /path/*.jpg | ssh foo@bar.com "tar xvf -"o qualcosa di simile dovrebbe funzionare.
Flexo,

Una delle implicazioni di ciò che ggg e Flexo dicono sopra è che non è possibile usare l'opzione "-t" per ssh.
mjg123,

1
Bello! Puoi anche usare pv invece del primo gatto in modo da ottenere una pv file | ssh ajw@dogmatix "cat > remote"
barra di

3

Prova questo:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 

2
non c'è bisogno di così tante chiamate di gatto
Flexo

1

È possibile utilizzare xxde alcune brutte citazioni per copiare su più file, nonché eseguire comandi su di essi ed eseguirli:

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
"

ah, la mia risposta è chiaramente troppo l33t
Aric

-1

Oltre a eseguire il piping del file su un telecomando cat, potresti anche essere in grado di utilizzare alcuni client SFTP per trasferire i file.


+1 ma va notato che l'OP sta tentando di evitare scp perché non esiste nei sistemi. Dato questo vincolo è anche probabile che un server FTP debba esistere sul lato ricevente, il che rende il processo di copia dipendente da software diverso da quello che di solito è lì di default.
Paul Sasik,

-1

python3 -m http.servernella stessa directory con il file desiderato, dopodiché puoi curlo wgeto scaricare un file con il tuo browser. Si noti che con quel comando in esecuzione tutti i file dalla directory corrente saranno disponibili pubblicamente, fino a quando non si preme Ctrl+ C.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.