Truyền tệp qua SSH [đã đóng]


461

Tôi đang SSH vào một máy chủ từ xa trên dòng lệnh và cố gắng sao chép một thư mục vào máy cục bộ của tôi bằng scplệnh. Tuy nhiên, máy chủ từ xa trả về thông báo "sử dụng" này:

[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%

Tôi muốn có thể chuyển tập tin theo cả hai hướng. Từ những gì tôi đọc được, tôi nghĩ lệnh trên sẽ hoạt động để tải xuống và scp -p [localpath] [remotepath]để tải lên?

Câu trả lời:


735

Bạn cần scpmột cái gì đó ở đâu đó. Bạn có scp ./styles/, vì vậy bạn đang nói bản sao an toàn ./styles/, nhưng không phải nơi để sao chép nó.

Nói chung, nếu bạn muốn tải xuống, nó sẽ đi:

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

nơi local_filethực sự có thể là một thư mục để đặt tệp bạn đang sao chép. Để tải lên, nó ngược lại:

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

Nếu bạn muốn sao chép toàn bộ thư mục, bạn sẽ cần -r. Hãy suy nghĩ scpnhư thế cp, ngoại trừ bạn có thể chỉ định một tệp user@remote_host:filecũng như chỉ các tệp cục bộ.

Chỉnh sửa: Như đã lưu ý trong một nhận xét, nếu tên người dùng trên máy chủ cục bộ và máy chủ từ xa giống nhau, thì người dùng có thể bị bỏ qua khi chỉ định một tệp từ xa.


2
Lưu ý rằng nếu người dùng giống nhau trên máy chủ từ xa và máy chủ cục bộ, tên người dùng có thể bị bỏ qua: scp hello.c myserver.net:~/projects/
strager

Vâng, đúng, tôi sẽ thêm một lưu ý về điều đó. Tôi bao gồm người dùng vì sau đó các ví dụ tôi đưa ra sẽ luôn hoạt động. :)
lemnisca

Tôi có một thời gian khó khăn về điều này .. là chính xác. scp C: \ filename.txt server1 @ server2: home
Vincent

Vui lòng thêm định dạng in đậm trên "donload" và "upload".
kursus

2
"tự nhiên" (tôi nói một cách tự nhiên vì tôi chỉ lãng phí 15 phút cho việc này) bạn không nên kết nối với máy chủ từ xa trong khi cố gắng "tải xuống" về cục bộ, bởi vì nếu bạn đang thực thi mã từ một cá thể từ xa, "cục bộ" sẽ được hiểu là "từ xa", nếu bạn hiểu ý tôi là gì. Vì vậy, đừng chạy ssh trước.
PatrickT

164

Nếu sao chép vào / từ máy tính để bàn của bạn, hãy sử dụng WinSCP hoặc nếu trên Linux, Nautilus hỗ trợ SCP thông qua tùy chọn Connect To Server.

scp chỉ có thể sao chép tệp vào máy đang chạy sshd, do đó bạn cần chạy phần mềm máy khách trên máy từ xa từ máy bạn đang chạy scp.

Nếu sao chép trên dòng lệnh, sử dụng:

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

hoặc là

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

4
Bạn là người đàn ông. Tôi đã triển khai một blog trong chưa đầy 10 giây mà không cần cài đặt thêm ở phía máy chủ!
PM

2
Điều này làm việc hoàn hảo. Tôi đã sử dụng msysgit trong cmd vì nó có cả scp và ssh.
Ibn Saeed

3
Điều này làm việc hoàn hảo. Tôi đã sử dụng scp * user @ host: / path / to / where
Bastin Robin

3
Đó nên là câu trả lời hàng đầu.
gsamaras

3
Cảm ơn đề xuất WinSCP. Cách dễ dàng hơn là cố gắng viết tất cả các lệnh đó một cách thủ công ...
Brian Leishman

23

Bạn cần chỉ định cả nguồn và đích và nếu bạn muốn sao chép các thư mục, bạn nên xem tùy chọn -r.

Vì vậy, để sao chép đệ quy / home / user / bất cứ thứ gì từ máy chủ từ xa vào thư mục hiện tại của bạn:

scp -pr user@remoteserver:whatever .

19

Không, bạn vẫn cần scp [from] [to]sao chép mọi cách

Sự khác biệt là, bạn cần phải scp -p server:serverpath localpath


8
mục đích của -p là gì?
Qinjie

1
From man scp: Giữ nguyên thời gian sửa đổi, thời gian truy cập và chế độ từ tệp gốc.
pjmil

4
Để rõ ràng -pchỉ được bao gồm ở đây vì OP bao gồm cờ trong câu hỏi ban đầu của họ. Nó không liên quan đến câu trả lời
Gareth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.