2012-01-09 52 views
9

Tôi muốn biết một cách dễ dàng để sử dụng scp để sao chép các tệp và thư mục có mặt trong các đường dẫn khác nhau trên hệ thống tệp của tôi. Máy chủ đích ssh yêu cầu mật khẩu và tôi không thể đặt mật khẩu này vào các tệp cấu hình. Tôi biết rằng scp không có một tham số mật khẩu mà tôi có thể cung cấp từ một kịch bản, vì vậy bây giờ tôi phải sao chép từng tập tin hoặc thư mục từng người một, viết mật khẩu của tôi mỗi lần.Cách thông minh để sao chép nhiều tệp từ các đường dẫn khác nhau usp scp

+0

Có thể trùng lặp [scp hoặc sftp copy nhiều tệp với một lệnh] (http://stackoverflow.com/questions/16886179/scp-or-sftp-copy-multiple-files-with-single-command) – tripleee

Trả lời

4

Nếu bạn có thể biểu thị tất cả tên của các tệp mà bạn muốn sao chép từ hệ thống từ xa bằng một mẫu toàn cục, thì bạn có thể thực hiện điều này trong một lệnh scp. Việc sử dụng này sẽ chỉ hỗ trợ một thư mục đích duy nhất trên hệ thống cục bộ cho tất cả các tệp. Ví dụ:

scp 'RemoteHost:/tmp/[abc]*/*.tar.gz' . 

bản sao tất cả các tập tin từ các hệ thống từ xa mà là những cái tên (something).tar.gz và được nằm trong thư mục con của /tmp có tên bắt đầu với a, b, hoặc c. Các dấu ngoặc kép duy nhất là để bảo vệ các mô hình glob từ được giải thích từ vỏ trên hệ thống địa phương.

Nếu bạn không thể diễn tả tất cả các tệp bạn muốn sao chép dưới dạng một mẫu toàn cục và bạn vẫn muốn sao chép bằng một lệnh duy nhất (và một kết nối SSH chỉ yêu cầu mật khẩu của bạn một lần) có thể một trong hai:

  • Sử dụng một lệnh khác so với scp, như sftp hoặc rsync, hoặc
  • mở một kết nối tổng thể SSH vào máy chủ từ xa và chạy một số lệnh scp làm nô lệ của tổng thể đó. Các nô lệ sẽ piggyback trên kết nối chủ mà vẫn mở trong suốt và sẽ không yêu cầu bạn cho một mật khẩu. Đọc trên các kết nối phụ & nô lệ trong manpage ssh.
4

tạo cặp khóa, sao chép khóa công khai sang phía máy chủ.

ssh-keygen -t rsa 

Gắn nội dung bên trong tệp ~/.ssh/identity.pub vào tệp ~/.ssh/authorized_keys2 của người dùng phía máy chủ. Bạn không cần nhập mật khẩu nữa.

Tuy nhiên, hãy cẩn thận! bất kỳ ai có thể truy cập "tài khoản cục bộ" của bạn cũng có thể "ssh" vào máy chủ mà không cần mật khẩu.

+0

Oh , Tôi nghĩ rằng OP có một số lý do cho việc không thể sử dụng các khóa SSH. Tôi hiểu sai. Dường như không có bất kỳ yêu cầu nào như vậy. Chìa khóa, như bạn đề nghị, những gì tôi thường sử dụng! – Celada

+0

Tôi biết phương pháp này, nhưng tôi không muốn đặt tay lên các thư mục phổ biến như .ssh. –

11

ngoài các glob đã đề cập:

bạn có thể sử dụng {,} để xác định các đường thay thế/pathparts trong một tuyên bố đơn

ví dụ: scp [email protected]:/{PATH1,PATH2} DESTINATION

+6

Lưu ý rằng bạn phải báo giá hoặc thoát khỏi niềng răng để vỏ không mở rộng chúng nếu bạn muốn tránh nhập mật khẩu hai lần. ví dụ. 'scp 'user @ host: {PATH1, PATH2}' DESTINATION' – yonran

+1

Còn con đường đích thì sao? Có cách nào để có một cái gì đó giống như người dùng 'scp '@ host: {PATH1, PATH2}' DIRECTORY/{FILE1, FILE2}'? – Ant

2

Ngoài ra, nếu bạn không thể sử dụng xác thực khóa công khai , bạn có thể thêm cấu hình sau vào SSH (hoặc là ~/.ssh/config hoặc làm đối số dòng lệnh thích hợp):

ControlMaster auto 
ControlPath /tmp/ssh_mux_%h_%p_%r 
ControlPersist 2m 

Với cấu hình này, kết nối SSH sẽ được mở trong 2 phút, do đó bạn chỉ cần nhập mật khẩu lần đầu tiên.

This post có thêm chi tiết về tính năng này.

Các vấn đề liên quan