Làm cách nào tôi có thể rsync mà không cần nhắc mật khẩu mà không cần sử dụng xác thực khóa chung?


44

Tôi cần phải thực thi rsync, mà không cần nó nhắc tôi nhập mật khẩu.

Tôi đã thấy trong rsyncmanpage rằng nó không cho phép chỉ định mật khẩu làm đối số dòng lệnh.
Nhưng tôi nhận thấy rằng nó cho phép chỉ định mật khẩu thông qua biến RSYNC_PASSWORD.

Vì vậy, tôi đã thử xuất biến, nhưng rsyncvẫn hỏi tôi mật khẩu.

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

Tôi đang làm gì sai?

Xin vui lòng xem xét:

Nói cách khác, tôi cần có RSYNC_PASSWORDcách tiếp cận làm việc! :-)


Bạn đã kích hoạt rsync daemon trên máy chủ từ xa chưa?
Rahul Patil

Câu trả lời:


13

Biến môi trường mật khẩu này chỉ xuất hiện để được sử dụng khi sử dụng giao thức rsync:

rsync rsync://username@1.2.3.4:/abc /def

Để làm việc này, bạn cũng cần chạy rsync như một daemon ( --daemontùy chọn), thường được thực hiện bằng cách sử dụng inetd.conf.

Khi sử dụng giao thức này, abcnên tương ứng với một mục tiêu được xác định trong /etc/rsyncd.conf. Tên người dùng phải có trong một auth usersdòng cho mục tiêu này và tệp mật khẩu phải được chỉ định với secrets filetùy chọn.

Đây là tệp bí mật chứa ánh xạ giữa tên người dùng và mật khẩu theo định dạng sau:

username:password

Và đó là mật khẩu mà bạn có thể chỉ định bằng cách sử dụng biến môi trường RSYNC_PASSWORD.


một cách nhanh chóng để chạy máy chủ rsync là với https://s3.amazonaws.com/skaperen/rsend
Skaperen 22/03/2015

65

Nếu rsynctrình nền không chạy trên máy đích và bạn không quan tâm đến việc tiết lộ mật khẩu cho mọi người trên máy cục bộ ( Tại sao không nên sử dụng mật khẩu trong dòng lệnh? ), Bạn có thể sử dụng sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

Lưu ý không gian khi bắt đầu lệnh, trong bashshell, điều này sẽ ngăn lệnh (và mật khẩu) được lưu trữ trong lịch sử. Tôi không khuyên bạn nên sử dụng RSYNC_PASSWORDbiến trừ khi thực sự cần thiết (theo chỉnh sửa trước đó cho câu trả lời này), tôi khuyên bạn nên loại bỏ lưu trữ lịch sử hoặc ít nhất là xóa lịch sử sau. Ngoài ra, bạn có thể sử dụng tput resetđể xóa lịch sử thiết bị đầu cuối của bạn.


2
Tại sao bạn lại đề xuất thêm mật khẩu xóa văn bản trên một lệnh, đó là quản trị viên linux xấu 101.
Eddie

Siêu tiện dụng .. đã tìm kiếm một cách tiếp cận này trong một thời gian. Cảm ơn bạn.
Isaac Gregson

6
Mặc dù điều này là xấu khi thêm mật khẩu dưới dạng văn bản rõ ràng, đây hiện là cách duy nhất hợp lý đơn giản để làm điều này.
Weston Ganger

15
bạn luôn có thể làm một cái gì đó như thế này: sshpass -p $(cat passFile) ..để ẩn đường chuyền rõ ràng trong lịch sử bash ,, và chmod 400 trên passFile để bảo vệ nó
Kresimir Pendic

3
Tôi biết rằng đây là cũ, nhưng vì lợi ích của những người đọc mới hơn, vui lòng trích dẫn mật khẩu - mật khẩu có thể chứa các ký tự và khoảng trắng đặc biệt. -p "$RSYNC_PASSWORD"
Paddy Landau

16

Bạn có thể sử dụng danh tính ssh tiêu chuẩn để đăng nhập không cần mật khẩu. Điều này được xử lý theo mặc định nếu bạn có ~/.ssh/id_rsahoặc tương tự, nhưng bạn cũng có thể mã hóa đường dẫn của riêng mình đến khóa riêng của một cặp khóa được ủy quyền.

Điều này cho phép tạo khối / tập lệnh mà không để lộ mật khẩu và khóa chung có thể bị xóa khỏi máy chủ đích nếu khóa riêng bị xâm phạm.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

Bạn cũng có thể thêm các đối số như -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullkhông bắt buộc xác minh khóa máy chủ từ xa. ! Chú ý - điều đó mở ra con người trong các cuộc tấn công ở giữa và nói chung là thực hành xấu!


1
Điều này đặc biệt hữu ích nếu bạn đang sử dụng shell Bash mới cho Windows 10. Tôi đã tự hỏi tại sao rsync không hoạt động mật khẩu. Tôi nhận ra nó đang sử dụng ~/.sshthư mục bên trong shell (nơi rsync sống). Khi tôi đã sử dụng -e để chỉ vào chìa khóa bên trong /mnt/c/Users/MyUsername/.ssh, nó hoạt động như mong đợi. (Cảm ơn .: D)
Toby Deshane

12

Rất hữu ích cho kịch bản là sử dụng --password-filetùy chọn dòng lệnh.

  • Tạo tập tin trống có tên rsync_pass
  • ghi mật khẩu vào tập tin này (không có gì hơn)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Điều này có thể được sử dụng cho kịch bản và cho phép an toàn hơn khi chỉ cần xuất mật khẩu sang biến hệ thống.


4
Lưu ý cho người đọc: điều này cũng yêu cầu một daemon rsync chạy trên máy chủ. Tôi thực sự hy vọng rằng các khóa ssh sẽ đủ cho rsync không mật khẩu.
Sridhar Sarnobat

IMHO đây là cách chính xác duy nhất để làm điều đó nếu một người không muốn sử dụng ssh.
maxf130

Câu trả lời này có ý nghĩa nhất
AJ Meyghani
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.