Bagaimana cara menyalin folder dari jarak jauh ke lokal menggunakan scp? [Tutup]

2697

Bagaimana cara menyalin folder dari remote ke host lokal menggunakan scp?

Saya gunakan sshuntuk masuk ke server saya.
Kemudian, saya ingin menyalin folder jarak jauh fooke lokal /home/user/Desktop.

Bagaimana saya mencapai ini?

Slasengger
sumber
61
Pertanyaan OP adalah apakah mungkin untuk menyalin file dari remote ke host lokal sementara ssh'd ke host remote . Saya tidak yakin mengapa tidak ada satu jawaban yang menjawab pertanyaannya dengan benar.
JeffDror
3
Premis dari pertanyaan itu salah. Idenya adalah, begitu masuk ke ssh, cara memindahkan file dari mesin yang masuk kembali ke klien yang masuk. Namun, scp tidak mengetahui atau tidak dapat menggunakan koneksi ssh. Itu membuat koneksi sendiri. Jadi solusi sederhana adalah membuat jendela terminal baru di workstation lokal, dan jalankan scp yang mentransfer file dari server jauh ke mesin lokal. Misalnya, scp -i key user @ remote: / remote-dir / remote-file / local-dir / local-file
jeffmcneill
12
Pertanyaannya mungkin di luar topik, tetapi juga pos berperingkat tertinggi di Google. Menguncinya berarti tidak ada yang dapat memperbaruinya untuk memberikan solusi yang lebih baik.
Alex Harvey
3
Saya baru-baru ini mengajukan pertanyaan serupa "sedikit lebih dalam" tentang baris perintah untuk alat lain pada SuperUser, dan itu dipindahkan oleh mod di sana ke StackOverflow. Ngomong-ngomong, saya setuju dengan pendapat para mod: Bisakah kita PINDAHKAN ini ke SuperUser dan buka kunci dan ada lebih banyak jawaban masuk?
Nikhil VJ
3
Secara umum, seluruh reaksi "di luar topik" pada stackoverflow adalah satu-satunya kelemahan terbesar pada platform. Martinets yang terlalu bersemangat.
AdamC

Jawaban:

4942
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

Dengan tidak menyertakan trailing '/' di akhir foo, Anda akan memindahkan direktori itu sendiri (termasuk konten), daripada hanya isi direktori.

Dari man scp(Lihat manual online )

-r Salin seluruh direktori secara rekursif

Gryphius
sumber
1412
Saya google ini setiap waktu. Komik terkait: xkcd.com/1168
cptloop
10
Dua yang saya tahu: -Cbendera menambah kompresi dan -cbendera memungkinkan Anda memasukkan tipe sandi lain untuk kinerja yang lebih baik, seperti yang scp -c blowfish a@b:something . terlihat dalam jawaban dimuthu
Automatico
79
gunakan -p untuk menjaga waktu modifikasi file, izin, dll! scp -pr user @ ...
Ber
27
Jawaban ini tidak memiliki penjelasan penting. Akankah Anda berakhir dengan Desktop/fooatau akankah Anda memiliki Desktop/allcontentsofFooGoherescp yang tampaknya bertingkah aneh kadang-kadang bagi saya itu melakukan satu dan lain hal
Toskan
7
@Toskan dengan scp -r [email protected]:/path/to/foo /home/user/Desktop/Anda harus berakhir dengan Desktop/foo. Dengan scp -r [email protected]:/path/to/foo/. /home/user/Desktop/ Anda akan berakhir dengan isi foodi Desktopdan semua sub-dirs dari foobertebaran di bawahDesktop
Ioannis
307

Untuk menggunakan kekuatan penuh scp Anda harus melalui langkah-langkah selanjutnya:

  1. Otorisasi kunci publik
  2. Buat alias ssh

Kemudian, misalnya jika Anda memiliki ~ / .ssh / config ini :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

Anda akan menyelamatkan diri dari entri kata sandi dan menyederhanakan sintaks scp seperti ini:

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

Terlebih lagi, Anda akan dapat menggunakan penyelesaian jalur jarak jauh:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Memperbarui:

Untuk mengaktifkan penyelesaian-bash jarak jauh, Anda perlu memiliki bash-shell di kedua <source>dan <target>host, dan penyelesaian-bash yang berfungsi dengan baik. Untuk informasi lebih lanjut, lihat pertanyaan terkait:

Bagaimana mengaktifkan pelengkapan otomatis untuk jalur jauh saat menggunakan scp?
Penyelesaian tab nama file SCP

Alexander Yancharuk
sumber
12
Tidak tahu tentang file konfigurasi, ini luar biasa!
dmastylo
Penyelesaian tab tidak masuk akal, hanya melengkapi dari host lokal untuk saya.
Bernhard
14
@ b.panjang Pertanyaannya adalah "Cara menyalin folder jauh foo ke Desktop lokal". Jawaban saya adalah "scp -r prod: / path / foo / home / user / Desktop" . Semoga Anda bisa melihat hubungan.
Alexander Yancharuk
2
@ Bernhard Bagi saya jelas karena saya menggunakan bash-shell. Terima kasih telah menunjukkannya pada saya! Jawaban diperbarui.
Alexander Yancharuk
1
@Alexander Yancharuk: Terima kasih atas jawabannya, ini lebih rinci daripada hanya mencakup sintaks saja.
Gladiator
217

Untuk menyalin semua dari Lokasi Lokal ke Lokasi Jarak Jauh (Unggah)

scp -r /path/from/destination username@hostname:/path/to/destination

Untuk menyalin semua dari Lokasi Jarak Jauh ke Lokasi Lokal (Unduh)

scp -r username@hostname:/path/from/destination /path/to/destination

Kustom Pelabuhan mana xxxxadalah pelabuhan kustom nomor

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Salin pada direktori saat ini dari Remote ke Lokal

scp -r username@hostname:/path/from/file .

Tolong:

  1. -r Salin semua direktori dan file secara rekursif
  2. Selalu gunakan lokasi penuh dari /, Dapatkan lokasi lengkap olehpwd
  3. scp akan mengganti semua file yang ada
  4. hostname akan menjadi nama host atau alamat IP
  5. jika port khusus diperlukan (selain port 22) gunakan -P portnumber
  6. . (dot) - itu berarti direktori kerja saat ini, Jadi unduh / salin dari server dan tempel di sini saja.

Catatan: Terkadang port khusus tidak akan berfungsi karena port tidak diizinkan di firewall, jadi pastikan port custom diizinkan di firewall untuk koneksi masuk dan keluar

Shiv Singh
sumber
1
Tampaknya (setidaknya dalam versi terbaru dari Raspbian Jessie dan Ubuntu) bahwa scp menggunakan -P (P huruf besar) untuk port, sementara (anehnya) ssh menggunakan -p (huruf kecil).
Adam Plocher
-p dicadangkan untuk menjaga "waktu modifikasi, waktu akses, dan mode dari file asli". Jadi jika Anda menggunakannya untuk port, mungkin tidak berfungsi ;-) Kecuali jika Anda memiliki versi berbeda yang menggunakan huruf kecil secara berbeda.
Adam Plocher
Dengan ssh, ya. Tidak dengan scp (saya berasumsi).
Adam Plocher
Apa yang harus saya masukkan jika direktori berisi spasi?
Brethlosze
@ hyprfrcb Gunakan pwduntuk mendapatkan lokasi dan menggunakan yang sama
Shiv Singh
48

Yang selalu saya gunakan adalah:

scp -r username@IP:/path/to/server/source/folder/  .

. (titik) : artinya current folder. jadi salin dari server dan tempel di sini saja.

IP : bisa berupa alamat IP 125.55.41.311atau bisa berupa host ns1.mysite.com.

Manish Shrivastava
sumber
9
Terima kasih telah menunjukkan bahwa .merujuk ke direktori saat ini!
ericmjl
35

Lebih baik mengompres katalog di server jauh:

tar czfP backup.tar.gz /path/to/catalog

Kedua, unduh dari jarak jauh:

scp user@your.server.example.com:/path/to/backup.tar.gz .

Pada akhirnya, ekstrak file:

tar -xzvf backup.tar.gz
hanya saya
sumber
10
"Lebih baik" sangat tergantung pada data yang Anda transfer dan upaya untuk ssh ke server untuk melakukan zipping / unzipping. Dan: Anda dapat menambahkan kompresi ke scp dengan -Cflag, seperti scp -C a@b:bigfile ..
Otomatis
4
Ini mengingatkan saya pada komentar yang dibuat oleh @cptloop! : D xkcd.com/1168
GoodSp33d
22

Dan jika Anda memiliki satu file yang sangat besar untuk diunduh dari lokasi yang jauh dan jika Anda tidak terlalu peduli dengan keamanan, coba ubah enkripsi default scp (Triple-DES) menjadi sesuatu seperti 'blowfish'.

Ini akan mengurangi waktu penyalinan file secara drastis.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
dimuthu
sumber
2
Menurut posting blog ini Anda mendapatkan kinerja yang lebih baik dengan arcfourmenggantikan blowfish, tetapi memiliki kelemahan keamanan.
Otomatis
20

Skenario khas,

scp -r -P port username@ip:/path-to-folder  .

dijelaskan dengan sampel,

scp -r -P 27000 [email protected]:/tmp/hotel_dump .

dimana,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
Arun G
sumber
Terima kasih atas jawabannya. -P untuk port SSH tertentu membantu saya.
ganti rugi
19

Buka File di bilah alat kesatuan Anda

masukkan deskripsi gambar di sini

Tekan Ctrl + l dan tulis di [email protected]

192.168.1.103 adalah tuan rumah yang ingin Anda sambungkan.

Ini salah satu contohnya

masukkan deskripsi gambar di sini

Ronald
sumber
12

Pertanyaannya adalah bagaimana cara menyalin folder dari jarak jauh ke lokal dengan scpperintah.

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Tapi di sini adalah cara yang lebih baik untuk melakukannya dengan sftp- SSH File Transfer Protocol (juga Secure File Transfer Protocol, atau SFTP) adalah protokol jaringan yang menyediakan akses file, transfer file, dan manajemen file melalui aliran data yang andal. (Wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Untuk bantuan tentang sftpperintah cukup ketik helpatau ?.

Fulvio
sumber
12

Jika Anda mengalami "Terlalu banyak kegagalan otentikasi" , tentukan kunci SSH yang tepat yang telah Anda tambahkan ke server ssh severs Anda:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
kaisar
sumber
5

Saya tidak tahu mengapa, tetapi saya harus menggunakan folder lokal sebelum direktif server sumber. untuk membuatnya bekerja

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
Salem
sumber
1
Dengan asumsi pengguna memiliki izin, dapatkah Anda melakukan jalur absolut tanpa menggunakanroot@
Jonathan