Chỉ định tệp nhận dạng (id_rsa) bằng rsync


197

Tôi cần tạo các bản sao lưu định kỳ của một thư mục trên một máy chủ từ xa, đó là một máy ảo được lưu trữ bởi một tổ chức nghiên cứu. Họ yêu cầu quyền truy cập vào VM thông qua các khóa ssh, tất cả đều tốt, ngoại trừ việc tôi không thể tìm ra cách trỏ rsync vào khóa ssh cho máy chủ này.

Rsync không có vấn đề gì nếu tập tin chính là ~/.ssh/id_rsa, nhưng khi đó là thứ khác tôi nhận được Permission denied (publickey).

Với ssh tôi có thể chỉ định tệp nhận dạng với -i, nhưng rsync dường như không có tùy chọn đó.

Tôi cũng đã thử tạm thời di chuyển phím trên máy cục bộ sang ~/.ssh/id_rsa, nhưng điều đó tương tự không hoạt động.

tl; dr

Bạn có thể chỉ định một tập tin nhận dạng với rsync?


1
Cũng có ích để làm sudo rsync, mà không sử dụng khóa ssh của riêng ai, vì một số lý do.
ijoseph

1
@ijoseph Chính xác, tôi sử dụng rsync -aAP "sudo -u user ssh" user@server:dir local_dirkhi đồng bộ hóa từ các tập lệnh cron chạy bằng root
Martin Pecka

Câu trả lời:


342

Bạn có thể chỉ định lệnh ssh chính xác thông qua tùy chọn '-e':

rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/

Nhiều người dùng ssh không quen thuộc với tệp ~ / .ssh / config của họ. Bạn có thể chỉ định cài đặt mặc định cho mỗi máy chủ thông qua tệp cấu hình.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

Về lâu dài, tốt nhất là tìm hiểu tệp ~ / .ssh / config.


Không giúp tôi có IdentityFile trong ssh_config. Tôi có thể "ssh web1" mà không gặp vấn đề gì, nhưng khi sử dụng rsync cho web1: ... nó không thành công với "Quyền bị từ chối (khóa công khai)".
Zitrax

1
Hãy thử bật tính dài dòng của vận chuyển ssh: rsync -e 'ssh -vv' web1: / etc / vấn đề / tmp / vấn đề
Dan Garthwaite

1
Ah. Nếu bạn đang tự động hóa điều này và sẽ không thể cung cấp mật khẩu, bạn sẽ cần một khóa ssh không mật khẩu bổ sung được cấu hình ở cả hai đầu. Nếu bạn muốn rsync hoạt động mà không cần mật khẩu trong phiên tương tác, bạn sẽ cần sử dụng ssh-agent.
Dan Garthwaite

16
Duuuuuuude! các ~/.ssh/configtập tin - bạn đã mở một vũ trụ mới đối với tôi!
demaniak

2
~ / .ssh / config đã giúp tôi tiết kiệm trong ngày, cảm ơn rất nhiều.
smishra

17

Điều này có thể được thực hiện với cấu hình người dùng SSH, xem: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ về cơ bản chỉnh sửa ~ / .ssh / config:

$ nano ~/.ssh/config
#Add Hosts below 
Host server1
HostName examplehost.com
User username
Port 22
IdentityFile /path/to/key

$ rsync -e ssh /home/user/directory user@remote.host.net:home/user/directory/

Điều này sẽ hoạt động cho bất kỳ chương trình sử dụng SSH, rsync,



4

Tài chính

1) Khóa công khai luôn nằm trong thư mục chính của người dùng đăng nhập vào máy chủ từ xa, tức là nếu bạn đăng nhập như "sao lưu" thì nó nằm ở /home/backup/.ssh/authorized_keys. ID người dùng khi bạn đăng nhập xác định khóa chung được sử dụng tại đích.

Bạn có thể chọn ID người dùng khi thực hiện kết nối theo hai cách khác nhau:

ssh user_id@destination.server
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

Mặt khác, cuối cùng, khóa riêng cũng tương tự như vậy trong homedir của người dùng trừ khi bạn ghi đè lên nó như được mô tả trong câu trả lời của Dan.

2) Với mục đích sao lưu, có thể mong muốn tạo một khóa bị hạn chế để chỉ chạy một lệnh như "rsync". Có một mô tả hay về điều đó liên quan đến sao lưu "rsnapshot" cho phép bạn sao lưu từ xa toàn bộ máy chủ bằng tài khoản người dùng không có đặc quyền và "sudo":

"rsnapshot" làm thế nào

Rsnapshot có thể dễ dàng sao lưu một loạt các máy chủ từ xa hoặc cục bộ làm cho nó trở thành máy chủ sao lưu tập trung theo lịch trình & tiện dụng.

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.