Bagaimana cara menyalin file tanpa menggunakan scp di dalam sesi ssh?

55

Saya telah masuk ke sistem dengan ssh dan tidak ada scp di kedua sistem. Cara menyalin file tanpa menggunakan program scp.

Talespin_Kit
sumber
Apakah netcat (nc) ada di kedua sistem? Jika ya, gunakan sesi ssh Anda untuk melakukan tunnel port TCP dan gunakan nc pada port tersebut.
Apakah Anda memiliki rsync?
slhck
3
Anda juga dapat melakukan ini:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
n. 'kata ganti' m.
Diperlukan kutipan @nm (untuk saya, server ubuntu)
Ivan Black
@nm Tidak berfungsi untuk saya - file rusak (saya kira pesan login memecahnya).
monnef

Jawaban:

94

Untuk mengirim file:

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

Atau:

ssh ajw@dogmatix "cat > remote" < file

Untuk menerima file:

ssh ajw@dogmatix "cat remote" > copy
Flexo
sumber
20
@ggg itu tidak benar sama sekali. cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testsemua berfungsi dengan baik. Tidak ada yang secara inheren "ajaib" tentang file biner. Kedua file dalam contoh saya dibandingkan identik dan memiliki checksum yang sama. Memang benar bahwa menyalin dan menempel dari jendela terminal tidak akan berfungsi karena hal-hal seperti urutan kontrol dan karakter yang tidak diinginkan, tetapi menggunakan pipa seperti ini ini tidak pernah mendekati terminal.
Flexo
@Flexo Saya perlu sesuatu seperti ini, satu-satunya pengecualian adalah, saya perlu menyalurkan semua jpg dari folder. Bagaimana bisa melakukan iterate melalui / storage / sdcard1 / * jpg dan >ke file dengan nama yang sama?
George Profenza
2
@GeorgeProfenza Anda harus menambahkan tarke dalam campuran. tar cvf - /path/*.jpg | ssh [email protected] "tar xvf -"atau sesuatu yang serupa seharusnya bekerja.
Flexo
Salah satu implikasi dari apa yang dikatakan ggg dan Flexo di atas adalah bahwa Anda tidak dapat menggunakan opsi "-t" untuk ssh.
mjg123
1
Bagus! Anda juga dapat menggunakan pv sebagai ganti kucing pertama sehingga Anda mendapatkan progressbar, misalnyapv file | ssh ajw@dogmatix "cat > remote"
Theolodus
3

Coba ini:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 
Keith
sumber
2
tidak perlu banyak panggilan kucing sama sekali
Flexo
1

Anda dapat menggunakan xxddan mengutip beberapa jelek untuk menyalin lebih dari beberapa file serta menjalankan perintah pada mereka dan menjalankannya:

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
sumber
ah, jawaban saya jelas terlalu l33t
Aric
-1

Selain catmemindahkan file ke remote , Anda juga dapat menggunakan beberapa klien SFTP untuk mentransfer file.

salva
sumber
+1 tetapi perlu dicatat bahwa OP berusaha menghindari scp karena tidak ada pada sistem. Dengan adanya kendala ini, kemungkinan server FTP harus ada pada sisi penerima yang membuat proses penyalinan bergantung pada perangkat lunak selain dari apa yang biasanya ada secara default.
Paul Sasik
-1

python3 -m http.serverdalam direktori yang sama dengan file yang diinginkan - setelah itu Anda dapat curlatau wgetatau mengunduh file dengan browser Anda. Perhatikan bahwa dengan perintah yang berjalan semua file Anda dari direktori saat ini akan tersedia untuk umum, hingga Anda menekan Ctrl+ C.

Vitaly Zdanevich
sumber