透過 SSH 進行無密碼 Rsync,無需金鑰驗證

透過 SSH 進行無密碼 Rsync,無需金鑰驗證

我想設定一個透過 SSH 連線的 RSync 作業。

我有我的電腦( backup@myhost )和遠端主機( test@remhost ),我需要備份資料夾 ~/something 及其所有內容。 ssh 使用者測試僅對 ~/ 資料夾中的所有檔案和資料夾具有讀取存取權限。我想使用 rsync 將 test@remhost:~/something 資料夾複製到 backup@myhost:~/bak 資料夾。

為此,我在 Ubuntu 11.10 (Oneiric) 上透過 BASH 使用以下命令:

rsync -avz -e ssh test@remhost:~/something/ ~/bak/

按回車後我得到這個:

test@remhost's password:

我輸入密碼,rsync 就可以工作了。

我想讓上面的命令自動輸入密碼並將其作為參數傳遞,或者自動輸入密碼並啟動作業。

我嘗試執行,rsync -avz -e ssh test:password@remhost:~/something/ ~/bak/但它仍然要求輸入密碼,這很煩人。

我不想聽到任何類型的金鑰(RSA、DSA 或任何其他金鑰)。我只想要一個簡單的命令來讓我登入並完成工作。

編輯:一種可能的情況是,如果公鑰身份驗證已停用並且您無法更改它。例如,如果您使用 OpenSSH,則需要伺服器上的 root 權限才能編輯檔案sshd_config並新增PubkeyAuthentication yes.

編輯:這最終對我有用:

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/

請注意,此方法不被認為是安全的,因為它以純文字形式發送密碼,並且容易受到中間人攻擊。建議使用金鑰認證,安全性更強。

答案1

也許嘗試一下 sshpass

使用起來似乎很簡單...它也可以透過 apt 獲得。

在複製鑰匙之前,我一直在尋找類似的東西,但由於我已經在需要的地方找到了鑰匙,所以我沒有花時間嘗試這個。

不過,請注意該教程中有關密碼可見性的免責聲明。


對於所有需要這樣做的人:

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/

答案2

針對安全威脅更安全的解決方案的變體是將您的密碼儲存在具有嚴格權限的檔案中,並使用以下-f標誌shpass

sshpass -f '/home/me/.password' rsync --progress -avz -e ssh
test@remhost:~/something/ ~/bak/

不同之處在於,列出正在運行的進程不會在命令列中顯示您的密碼,它現在只會顯示密碼所在檔案的路徑。

答案3

我無法想像沒有密碼的公鑰身份驗證不會成為自動 ssh/rsync 登入的更好解決方案的情況。

無論如何expect應該是實現你想做的事情的一種方式。您無法將密碼透過管道傳輸到 ssh,但這非常相似。如何做到這一點,已回答這裡在 stackoverflow

答案4

這也有效:

system <<~ "RSYNC";
    rsync \\
      --rsh="sshpass -p '$password' ssh -p 22" \\
      --archive \\
      --verbose \\
      --progress \\
      --partial \\
      --human-readable \\
      "$directory" \\
      "$options{host}:${directory}"
RSYNC

IE。通過而不是sshpass--rsh前面rsync

此方法以及環境變數的用法SSHPASS在手冊的範例部分中進行了描述:

https://www.freebsd.org/cgi/man.cgi?query=sshpass&sektion=1

相關內容