Ssh

如何在不提示輸入密碼且不使用公鑰身份驗證的情況下進行 rsync?

  • October 8, 2021

我需要執行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

請注意命令開頭的空格,在bashshell 中,這將阻止命令(和密碼)儲存在歷史記錄中。除非絕對必要,否則我不建議使用該RSYNC_PASSWORD變數(根據對此答案的先前編輯),我建議禁止歷史儲存或至少在之後清除歷史記錄。此外,您可以使用tput reset清除您的終端歷史記錄。

引用自:https://unix.stackexchange.com/questions/111526