Mentransfer file melalui SSH [ditutup]

461

Saya SSHing ke server jauh di baris perintah, dan mencoba menyalin direktori ke mesin lokal saya dengan scpperintah. Namun, server jarak jauh mengembalikan pesan "penggunaan" ini:

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

Saya ingin dapat mentransfer file di kedua arah. Dari apa yang saya baca, saya pikir perintah di atas akan berfungsi untuk mengunduh, dan scp -p [localpath] [remotepath]untuk mengunggah?

lobster biner
sumber

Jawaban:

735

Anda perlu scpsesuatu di suatu tempat. Anda punya scp ./styles/, jadi Anda mengatakan salinan aman ./styles/, tetapi tidak di mana untuk menyalinnya.

Secara umum, jika Anda ingin mengunduh, ia akan masuk:

# download: remote -> local
scp user@remote_host:remote_file local_file 

di mana local_filesebenarnya merupakan direktori untuk meletakkan file yang Anda salin. Untuk mengunggah, itu kebalikannya:

# upload: local -> remote
scp local_file user@remote_host:remote_file

Jika Anda ingin menyalin seluruh direktori, Anda perlu -r. Anggap scpseperti cp, kecuali Anda dapat menentukan file dengan user@remote_host:fileserta hanya file lokal.

Sunting: Seperti disebutkan dalam komentar, jika nama pengguna pada host lokal dan jarak jauh adalah sama, maka pengguna dapat dihilangkan saat menentukan file jarak jauh.

lemnisca
sumber
2
Perhatikan bahwa jika pengguna sama pada host jarak jauh dan host lokal, nama pengguna dapat dihilangkan: scp hello.c myserver.net:~/projects/
strager
Ya benar, saya akan menambahkan catatan tentang itu. Saya memasukkan pengguna karena contoh-contoh yang saya berikan akan selalu berfungsi. :)
lemnisca
Saya mengalami kesulitan dalam hal ini .. apakah ini benar? scp C: \ filename.txt server1 @ server2: home
Vincent
Harap tambahkan format tebal pada "donload" dan "unggah".
kursus
2
"secara alami" (saya katakan secara alami karena saya hanya membuang waktu 15 menit untuk ini) Anda tidak boleh terhubung ke host jarak jauh ketika mencoba untuk "mengunduh" ke lokal, karena jika Anda mengeksekusi kode dari instance jarak jauh, "local" akan diartikan sebagai "remote", jika Anda melihat apa yang saya maksud. Jadi jangan jalankan ssh dulu.
PatrickT
164

Jika menyalin ke / dari mesin desktop Anda, gunakan WinSCP, atau jika di Linux, Nautilus mendukung SCP melalui opsi Connect To Server.

scp hanya dapat menyalin file ke mesin yang menjalankan sshd, maka Anda perlu menjalankan perangkat lunak klien pada mesin jarak jauh dari yang Anda jalankan scp.

Jika menyalin di baris perintah, gunakan:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

atau

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile
Astaga
sumber
4
Kamulah orangnya. Saya menyebarkan blog dalam waktu kurang dari 10 detik tanpa instalasi tambahan di sisi server!
PM
2
Ini bekerja dengan sempurna. Saya menggunakan msysgit di cmd karena memiliki scp dan ssh.
Ibn Saeed
3
Ini bekerja dengan sempurna. Saya menggunakan scp * user @ host: / path / ke / where
Bastin Robin
3
Itu harus menjadi jawaban teratas.
gsamaras
3
Terima kasih atas saran WinSCP. Jauh lebih mudah daripada mencoba menulis semua perintah itu secara manual ...
Brian Leishman
23

Anda perlu menentukan sumber dan tujuan, dan jika Anda ingin menyalin direktori Anda harus melihat opsi -r.

Jadi untuk menyalin secara berulang / home / user / apa pun dari server jauh ke direktori Anda saat ini:

scp -pr user@remoteserver:whatever .
Ken
sumber
19

Tidak, Anda masih perlu scp [from] [to]menyalin dengan cara apa pun

Perbedaannya adalah, Anda perlu scp -p server:serverpath localpath

Gareth
sumber
8
apa tujuan -p?
Qinjie
1
Dari man scp: Mempertahankan waktu modifikasi, waktu akses, dan mode dari file asli.
pjmil
4
Yang jelas -phanya termasuk di sini karena OP memasukkan bendera dalam pertanyaan awal mereka. Ini sama sekali tidak relevan dengan jawaban
Gareth