Làm thế nào để bạn sử dụng một tập tin nhận dạng với rsync?


125

Làm thế nào để bạn sử dụng một tập tin nhận dạng với rsync?

Đây là cú pháp tôi nghĩ rằng tôi nên sử dụng với rsync để sử dụng tệp nhận dạng để kết nối:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234-sắc' \
"/ local / dir /" remoteUser@22.33.44.55: "/ remote / dir /"

Nhưng nó cho tôi một lỗi:

Cảnh báo: Tệp nhận dạng ~ / .ssh / 1234-không thể truy cập danh tính: Không có tệp hoặc thư mục như vậy.

Tệp ổn, quyền được đặt chính xác, nó hoạt động khi thực hiện ssh - không phải với rsync - ít nhất là trong cú pháp của tôi. Tôi đang làm gì sai? Có phải nó đang cố gắng tìm kiếm tập tin nhận dạng trên máy từ xa? Nếu vậy, làm cách nào để xác định rằng tôi muốn sử dụng tệp nhận dạng trên máy cục bộ của mình ?

Câu trả lời:


86

Bạn có thể muốn sử dụng ssh-agentssh-addtải khóa vào bộ nhớ. sshsẽ tự động thử danh tính từ ssh-agent nếu nó có thể tìm thấy chúng. Các lệnh sẽ là

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agentlà một trình nền người dùng chứa các khóa ssh không được mã hóa trong bộ nhớ. ssh tìm thấy nó dựa trên các biến môi trường mà ssh-agent xuất ra khi chạy. Sử dụng evalđể đánh giá đầu ra này tạo ra các biến môi trường. ssh-addlà lệnh quản lý bộ nhớ phím. Các tác nhân có thể được khóa bằng ssh-add. Tuổi thọ mặc định cho khóa có thể được chỉ định khi ssh-agent được khởi động và hoặc được chỉ định cho khóa khi được thêm.

Bạn cũng có thể muốn thiết lập tệp ~ / .ssh / config để cung cấp định nghĩa cổng và khóa. (Xem `man ssh_config để biết thêm tùy chọn.)

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

Trích dẫn một lệnh ssh sẽ ngăn chặn sự mở rộng shell cần thiết cho ~hoặc $HOME. Bạn có thể sử dụng đường dẫn đầy đủ hoặc tương đối đến khóa trong dấu ngoặc đơn.


2
Báo giá kép và sử dụng $ HOME đã giải quyết vấn đề của tôi. Bạn có thể giải thích về hai lệnh đầu tiên đang làm gì không? Tôi đã quen với việc thiết lập tệp cấu hình - vấn đề duy nhất là khi tôi có nhiều tài khoản trên một máy chủ. Tôi không hy vọng rằng nó sẽ cho phép tôi chỉ định nhiều tệp nhận dạng cho cùng một máy chủ.
cwd

+1 Điều này đã khắc phục sự cố của tôi với drone.io :) Cảm ơn rất nhiều.
Bhargav Nanekalva

Điều này thật tuyệt vời. FTR, bạn cũng có thể chỉ định tên người dùng mặc định để kết nối, ví dụ như User ubuntukhi định cấu hình cho phiên bản Ubuntu EC2 :) Cảm ơn!
DanielSmedegaardBuus

Nếu bạn đang sử dụng shell kiểu csh (chẳng hạn như fish) thì hãy làmeval (ssh-agent -c)
Dave

77

Sử dụng $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

hoặc đường dẫn đầy đủ đến khóa:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

Đã thử nghiệm với rsync 3.0.9 trên Ubuntu


3
Có, điều này hoạt động tốt, không cần sử dụng ssh-agent hoặc các tùy chọn cấu hình khác.
nguyệt quế

2
+1: đây là sự cố toàn cầu, giống như bạn không thể thực hiện "ls '~'"
Alex

$HOMEsẽ không hoạt động bên trong các trích dẫn đơn giản (không mở rộng biến), vì vậy bạn phải sử dụng dấu ngoặc kép hoặc đường dẫn tuyệt đối.
anol

trong Bash tiêu chuẩn nên hoạt động "$HOME"hoặc $HOMEkhông có bất kỳ sự khác biệt nào (cũng "${HOME}"có thể, nếu bạn muốn làm cho nó phức tạp)
Tombart

Tôi đã thay đổi dấu ngoặc đơn thành gấp đôi.
Steve Bennett

36

Bạn phải chỉ định đường dẫn tuyệt đối đến tệp khóa nhận dạng của bạn. Đây có lẽ là một số loại quirck trong rsync. (rốt cuộc nó không thể hoàn hảo)

Tôi gặp vấn đề này chỉ vài ngày trước :-)


Bạn có thể sử dụng ~ nhưng bạn không thể nhúng nó trong các dấu ngoặc đơn, vì sau đó nó không được thay thế chính xác thành / home / tên người dùng / bạn phải sử dụng dấu ngoặc kép để có chính xác hoạt động chính xác, xem giải pháp của @ilcavero
X Tian

24

Điều này làm việc cho tôi

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

2
Vì một số lý do, tôi đã phải chỉ định đường dẫn đầy đủ đến tệp nhận dạng, tức là /home/user/.ssh/1234-identity. Sau đó, nó làm việc. Có thể bởi vì đó là một cái vỏ khác, như được đề xuất trong câu trả lời của Darhuuk.
osa 17/05/2015

@osa bạn đã cứu tôi đấy! Tôi đã gặp vấn đề với Drupal và rSYNC và vấn đề là con đường ... kỳ lạ.
Lee Woodman

6

Bạn đang thực hiện lệnh trong bash hoặc sh? Điều này có thể làm cho một sự khác biệt. Hãy thử thay thế ~bằng $HOME. Hãy thử trích dẫn chuỗi cho -etùy chọn.


6

sử dụng tệp chính với rsync:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
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.