如何在不提示輸入密碼且不使用公鑰身份驗證的情況下進行 rsync?
我需要執行
rsync
,而不提示我輸入密碼。我在
rsync
手冊頁中看到它不允許將密碼指定為命令行參數。但我注意到它允許通過變數指定密碼
RSYNC_PASSWORD
。所以我嘗試導出變數,但
rsync
一直要求我輸入密碼。export RSYNC_PASSWORD="abcdef" rsync root@1.2.3.4:/abc /def
我究竟做錯了什麼?
請考慮:
- 我知道從安全方面來看這是一個壞主意
- 我只能用
rsync
,不能用其他軟體- 我不能使用基於密鑰的身份驗證
- 我已經閱讀了很多 SE 問題,例如:
how-to-pass-password-for-rsync-ssh-command @ stackoverflow.com
rsync-cron-job-with-a-password @ superuser.com
how-to-setup -rsync-without-password-with-ssh-on-unix-linux @ superuser.com
換句話說,我需要讓
RSYNC_PASSWORD
方法起作用!:-)
此密碼環境變數似乎僅在使用 rsync 協議時使用:
rsync rsync://username@1.2.3.4:/abc /def
為此,您還需要將 rsync 作為守護程序執行(
--daemon
選項),這通常使用inetd.conf
.使用此協議時,
abc
應對應於/etc/rsyncd.conf
. 使用者名應出現在auth users
此目標的一行中,並且應使用該secrets file
選項指定密碼文件。正是這個秘密文件包含以下格式的使用者名和密碼之間的映射:
username:password
您可以使用 RSYNC_PASSWORD 環境變數指定此密碼。
如果
rsync
守護程序沒有在目標機器上執行,並且您不關心向本地機器上的每個人公開密碼(為什麼不應該有人在命令行中使用密碼?),您可以使用sshpass
:sshpass -p "password" rsync root@1.2.3.4:/abc /def
請注意命令開頭的空格,在
bash
shell 中,這將阻止命令(和密碼)儲存在歷史記錄中。除非絕對必要,否則我不建議使用該RSYNC_PASSWORD
變數(根據對此答案的先前編輯),我建議禁止歷史儲存或至少在之後清除歷史記錄。此外,您可以使用tput reset
清除您的終端歷史記錄。