2013-07-31 26 views
5

Tôi đang cố gắng để làm một sao lưu rsync từ Dreamhost sang máy chủ khác, đây là lệnh tôi muốn sử dụng:Trong bash, làm cách nào để nhập mật khẩu cho lệnh xử lý nền?

nohup rsync -e "/ usr/bin/ssh" --bwlimit = 2000 -av [email protected]: remote_directory local_directory &

Tôi muốn quy trình tiếp tục chạy ở chế độ nền và ngay cả khi tôi ngắt kết nối. Vấn đề là, tôi không biết cách đặt mật khẩu khi nó là một quá trình nền. Làm thế nào để tôi làm điều này?

+4

Tại sao bạn không sử dụng khóa? –

Trả lời

8

Thông thường việc này được thực hiện bằng cách không yêu cầu mật khẩu. Thay vào đó, hãy xem xét cấu hình SSH để sử dụng khóa chung. Có một số tài nguyên trực tuyến (chẳng hạn như this one from dreamhost) có thể giúp bạn làm điều đó.

4

Tôi sẽ sử dụng khóa. Nếu bạn cần để bảo vệ khóa với một mật khẩu hoặc bạn không thể sử dụng một chìa khóa vì lý do gì, sau đó sử dụng mong đợi để vượt qua mật khẩu:

rsync_auto.sh:

#/bin/bash 

expect <<<EOF 
spawn nohup rsync -e "/usr/bin/ssh" --bwlimit=2000 -av [email protected]:remote_directory 
expect "password:" 
send "your_password\r" 
expect eof 
EOF 

!!! Hãy chắc chắn rằng không ai ngoại trừ bạn có thể truy cập các tập tin !!!: cách xây dựng hơn

chmod 500 rsync_auto.sh 

một chút có thể để lưu trữ mật khẩu trong một ứng dụng keyring, như gnome-keyring thay vì lưu trữ chúng trong một tập tin đơn giản. Tôi đã tìm thấy điều này article nếu bạn quan tâm.

+1

Và nhận ra rằng bất cứ ai có thể đọc tệp này đều có thể đọc mật khẩu. – Paul

+0

@Paul đúng vậy. Nhưng bất kỳ ai có thể đọc tập tin cũng có thể sử dụng khóa này. Chỉ cần chắc chắn rằng tập tin chỉ có thể đọc được bởi chủ sở hữu – hek2mgl

+0

Đồng ý, ít nhất ssh client sẽ cho bạn biết khi nào tệp khóa của bạn là, có thể đọc được và chặn sử dụng nó. – Paul

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