it-swarm-id.com

Salin file kembali ke sistem lokal dengan ssh

Jika saya masuk ke sistem melalui SSH, apakah ada cara untuk menyalin file kembali ke sistem lokal saya tanpa menyalakan terminal atau sesi layar lain dan melakukan scp atau sesuatu yang serupa atau tanpa melakukan SSH dari sistem jarak jauh kembali ke sistem lokal?

271
Shawn J. Goff

Koneksi master

Ini paling mudah jika Anda berencana terlebih dahulu.

Buka koneksi master pertama kali. Untuk koneksi selanjutnya, rutekan koneksi slave melalui koneksi master yang ada. Di dalam ~/.ssh/config , atur pembagian koneksi agar terjadi secara otomatis:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Jika Anda memulai sesi ssh ke yang sama (pengguna, port, mesin) sebagai koneksi yang ada, sesi kedua akan diteruskan ke yang pertama. Membuat koneksi kedua tidak memerlukan otentikasi baru dan sangat cepat.

Jadi saat Anda memiliki koneksi aktif, Anda dapat dengan cepat:

Penerusan

Pada koneksi yang ada, Anda dapat membuat terowongan ssh terbalik. Pada baris perintah ssh, buat penerusan jarak jauh dengan melewatkan -R 22042:localhost:22 di mana 22042 adalah nomor yang dipilih secara acak yang berbeda dari nomor port lain pada mesin jarak jauh. Kemudian ssh -p 22042 localhost pada mesin jarak jauh menghubungkan Anda kembali ke mesin sumber; kamu bisa menggunakan scp -P 22042 foo localhost: untuk menyalin file.

Anda dapat mengotomatisasi ini lebih lanjut dengan RemoteForward 22042 localhost:22. Masalah dengan ini adalah bahwa jika Anda terhubung ke komputer yang sama dengan beberapa contoh ssh, atau jika orang lain menggunakan porta, Anda tidak mendapatkan penerusan.

Jika Anda belum mengaktifkan penerusan jarak jauh dari awal, Anda dapat melakukannya pada sesi ssh yang ada. Tipe Enter ~C Enter -R 22042:localhost:22 Enter. Lihat “Karakter melarikan diri” di manual untuk informasi lebih lanjut.

Ada juga beberapa informasi menarik di tas Kesalahan Server ini .

Salin-tempel

Jika file tersebut kecil, Anda dapat mengetiknya dan menyalin-menempel dari output terminal. Jika file berisi karakter yang tidak dapat dicetak, gunakan penyandian seperti base64 .

 remote.example.net $ base64 <myfile 
  (salin hasilnya) 
 local.example.net $ base64 -d> myfile 
  (rekatkan isi clipboard) Ctrl+D

Lebih mudah, jika Anda memiliki penerusan X aktif, salin file pada mesin jarak jauh dan rekatkan secara lokal. Anda dapat mem-pipe data masuk dan keluar dari xclip atau xsel . Jika Anda ingin mempertahankan nama file dan metadata, salin dan tempel arsip.

remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -

Cara mudah lain (IMO) adalah:

# to remote Host
cat localfile.conf | ssh [email protected] 'cat -> /tmp/remotefile.conf'

# from remote Host
ssh [email protected] 'cat /tmp/remotefile.conf' > /tmp/localfile.conf

Atau jika Anda lebih suka sesuatu yang mirip GUI, coba Midnight Commander . Mereka memanggil fitur Shell-Link. Kebanyakan distro memiliki em dalam sistem paket mereka sebagai mc.

75
Florian Fida

SSH mendukung beberapa perintah, melalui karakter escape (~ Secara default):

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

$ ~C
ssh> help
Commands:
      -L[bind_address:]port:Host:hostport    Request local forward
      -R[bind_address:]port:Host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward
      !args                                  Execute local command

!args Tampaknya paling dekat dengan yang Anda inginkan. Perhatikan bahwa Anda harus mengaktifkan PermitLocalCommand dalam file /etc/ssh_config Anda agar perintah ~C Bekerja (lihat man ssh_config).

Anda dapat menggunakan kembali sesi ssh yang sama jika Anda mengatur ControlMaster di ssh_config. Jika kamu melakukan ini:

$ ~C
ssh> !scp file [email protected]:

anda secara teknis tidak pernah meninggalkan sesi ssh, dan tidak perlu mengautentikasi ulang. Mungkin lebih rumit dari yang Anda inginkan, tetapi saya tidak bisa memikirkan cara lain yang mudah.

54
Corey Henderson

Itu semua adalah metode yang sangat rumit.
Anda dapat memasang sistem file jarak jauh pada mesin lokal Anda dengan sshfs:

mkdir -p /mnt/sshfs

[email protected]:~# sshfs 192.168.1.2:/ /mnt/sshfs
[email protected]:~# umount /mnt/sshfs

Kemudian Anda dapat menyalin tempel file tersebut dengan nautilus, gnome, konqueror, dolphin, bash atau apa pun.

38
Quandary
  • Gunakan ssh-xfer , agen ssh yang dimodifikasi yang secara efektif membebani saluran sisi ssh yang ada untuk penggunaan transfer file.
  • Gunakan zssh , yang secara efektif zmodem melebihi ssh. Jika Anda pernah menggunakan rzsz ini akan terasa sangat akrab.
  • Balik (-R, untuk remote-ke-lokal) atau meneruskan (-L, untuk port lokal-ke-remote) untuk menjalankan transfer file, dengan asumsi Anda memiliki beberapa daemon transfer file mendengarkan di ujung lainnya.

Tapi tidak ada yang benar-benar dibutuhkan, IMO. Protokol SSH mendukung banyak saluran pada satu koneksi, dan klien OpenSSH mendukung multiplexing. Anggap Anda memiliki ControlMaster dan ControlPathdisiapkan (ControlPersist juga berguna),

# koneksi pertama
 $ ssh jarak jauh 
 
 # akan multipleks melalui koneksi yang sama dengan ssh asli yang dibuka
 $ sftp remote 
15
ephemient

Pendekatan yang lebih sederhana: Buka Filezilla (atau browser ftp favorit Anda), buka koneksi ssh ke situs yang sama, cari file dan seret ke struktur file lokal Anda. Jika Anda baru mengenal Filezilla, gunakan fitur "pengelola situs" untuk menyambung kembali dengan cepat di lain waktu.

Ya, saya tahu ini jelas bagi sebagian besar dari Anda (dan tidak tepat pada titik), tetapi beberapa (seperti saya) yang menemukan utas ini mencari solusi terminal saja mungkin telah mengabaikan yang sudah jelas.

9
Larry Jones

Apa yang saya temukan sebagai solusi terbaik dan paling efisien adalah menggunakan xclip-copyfile dan xclip-pastefile.

Di server, Anda menggunakan xclip-copyfile untuk menyalin satu atau lebih file. File-file ini kemudian tersedia di server lokal Anda. Di sana, Anda dapat menggunakan xclip-pastefile.

Ini memotong kebutuhan untuk menggunakan scp atau memiliki server ssh lokal. Saya menggunakan ini dengan cygwin misalnya. Satu-satunya masalah adalah ini membutuhkan instalasi xclip jika Anda belum memilikinya. Oh, dan ini berfungsi dengan file biner juga.

8
Robert

Salah satu dari banyak alasan kami menggunakan SecureCRT - meskipun lebih memilih perangkat lunak open source yang praktis - adalah kemudahan melakukan transfer file. Tidak ada penggantian langsung di dunia F/OSS.

SecureCRT dimulai sebagai program Windows murni pada pertengahan 1990-an tetapi porting ke Mac OS X dan Linux beberapa tahun yang lal .

SecureCRT memiliki tiga fitur utama untuk mentransfer file ke dan dari sistem tempat Anda menggunakan SSH:

  • ZModem , YModem , XModem , Kermit dan ASCII - SecureCRT adalah semacam emulator terminal sekolah lama, mendukung beberapa protokol transfer file in-band.

    Cara termudah untuk digunakan adalah ZModem. Saat Anda mengetik sesuatu seperti sz file-to-download pada baris perintah jarak jauh, program jarak jauh sz menulis rutan keluar yang memberitahu SecureCRT untuk segera mulai mengunduh file-to-download ke direktori unduhan default.

    Sentuhan yang bagus adalah direktori unduhan dapat disesuaikan per sesi. Kami menggunakan ini untuk memiliki direktori per-situs di server file kantor utama kami, jadi kami tidak perlu mengurutkan file yang diunduh secara manual.

    (sz adalah program "send ZModem", bagian dari paket lrzsz Paket ini sudah dikemas untuk sebagian besar sistem Unixy. Jika karena alasan tertentu sistem jarak jauh Anda tidak sudah diinstal, dan Anda tidak dapat dengan mudah menginstal paket biner, paket sumbernya kecil dan sangat portabel. Lebih dari sekali, saya harus mengirim lrzsz"sharchive " atau uuencode 'tarball ke sistem jarak jauh yang dilucuti sehingga saya bisa ZModem file ke sana.)

  • [~ # ~] sftp [~ # ~] - SecureCRT memiliki implementasi SFTP dasar yang terintegrasi dengan ketat.

    Dengan "terintegrasi penuh," Maksud saya ketika Anda memberikan perintah menu SFTP atau pintasan keyboard, itu membuka tab baru yang terhubung ke situs jarak jauh melalui koneksi SSH yang sama. Dengan demikian, Anda tidak perlu masuk kembali, dan koneksi dibuat sedikit lebih cepat daripada jika Anda telah membuka koneksi SFTP terpisah ke server yang sama.

    Saya mencirikan fitur SFTP sebagai "dasar," karena Perangkat Lunak VanDyke memiliki produk transfer file terpisah, SecureFX . Ini lebih fitur daripada klien SFTP built-in, dan juga terintegrasi dengan SecureCRT.

    Fitur SFTP SecureCRT memungkinkan Anda mengonfigurasi direktori jarak jauh dan lokal default yang terpisah dari konfigurasi ZModem.

    Fitur SFTP ini memiliki jenis antarmuka baris perintah dasar, meniru program sftp OpenSSH, kecuali ia memiliki biaya seperti Tab perintah selesai. Dengan demikian, mengambil file jarak jauh yang disebut somefile.tar.gz mungkin semudah get soTabEnter.

  • Seret-dan-lepas - Jika Anda seret-dan-jatuhkan file ke jendela terminal, secara otomatis ketik rz untuk Anda dan mulai mengirim file.

    Sebagai alternatif, Anda dapat membuka tab SFTP dan menjatuhkan file ke tab itu untuk mengirimkannya melalui SFTP. Jadi, mengirim file ke sistem jarak jauh bisa sesederhana Alt-P, seret, jatuhkan.

    Kami mendapati bahwa transfer terjadi jauh lebih cepat melalui SFTP, mungkin karena ini adalah protokol berbasis TCP, sehingga ia mendapat manfaat dari besar jendela geser modern tumpukan TCP/IP . ZModem dirancang pada hari-hari ketika ukuran blok 64 kiB dianggap "besar." Dengan demikian, banyak potensi kecepatan dalam suatu tautan direndam dalam ZModem sementara masing-masing ujung menunggu pengakuan transfer blok.

    Satu hal yang menyenangkan tentang mode operasi drag-and-drop adalah bahwa dibutuhkan salah satu tekanan dari penggunaan ZModem. Saat Anda mengetik rz di sistem jarak jauh, SecureCRT memunculkan pemilih file secara otomatis. Anda kemudian memiliki waktu sekitar satu menit untuk menemukan dan memilih file sebelum sisi jarak jauh habis. Ini menciptakan getaran balapan melawan waktu yang tidak menyenangkan. Seret-dan-jatuhkan memungkinkan Anda menemukan file sesuka hati, lalu mulai transfer dengan satu gerakan cepat mouse.

    Kami masih menggunakan metode manual, memulai transfer dengan perintah rz eksplisit. Ini karena SecureCRT memungkinkan Anda mengonfigurasi direktori unggahan per sesi, yang kami arahkan ke folder di server file yang selalu berisi versi terbaru perangkat lunak yang dijalankan oleh situs jarak jauh tertentu. Untuk transfer semacam itu, tidak ada perlombaan melawan waktu, karena pemilih file terbuka di tempat yang tepat untuk memulai.

3
Warren Young

Gunakan "!" untuk mengonversi file ke representasi ASCII dari file Anda (mis. ! uuencode myfile.bin >uuencode.dat). Kemudian gunakan ! cat uuencode.dat >target.dat. Setelah itu gunakan uudecode di sisi target: ! uudecode target.dat >myfile.bin

1
Nils