當我以普通用戶身份執行以下命令時,一切正常:
fabio@myclient:~$ rsync -rv myserver:~/backup /home/fabio/backup/
它無需任何用戶互動即可工作,但我需要在以 root 身份執行的腳本中運行,所以我嘗試了:
root@myclient:~# sudo -u fabio rsync -rv myserver:~/backup /home/fabio/backup/
並且也嘗試過:
root@myclient:~# su - fabio -c "rsync -rv myserver:~/backup /home/fabio/backup"
兩者都有效,但要求我輸入“密鑰密碼”,我可以避免嗎?
答案1
「金鑰密碼」可能來自 SSH notrsync
或sudo
,它要求輸入密碼來解鎖您的 SSH 私鑰。
由於我確實不建議您使用沒有密碼的金鑰,因此請考慮腳本以 root 身份運行的情況。在您登入後,腳本是否總是以 root 身分執行?登入後可以輸入一次密碼嗎?
如果是這種情況,我建議使用類似的東西keychain
確保腳本在以 root 身分執行時使用以您的使用者身分啟動的 ssh-agent。您可以進行設置,以便在登入後只需輸入一次密碼,並且以後的任何調用都不需要互動。
如果情況並非如此,如果腳本必須自主運行而無需您進行任何互動式身份驗證,請考慮專門為備份腳本產生金鑰對,然後限制它可以執行的操作,方法是讓它以遠端另一個使用者的身份進行身份驗證end (即不是fabio
,而是例如),或使用遠端檔案中的參數fabio-backup
來限制它(儘管這有點複雜,因為它需要查看環境變數;請參閱command=
.authorized_keys
SSH_ORIGINAL_COMMAND
授權密鑰(5)詳情)
答案2
您的 ssh 私鑰受密碼保護。當您以(登入)使用者身分手動執行它時,它使用 ssh 代理,您曾經在其中儲存過密碼金鑰庫。
然而,當無人值守運行時,這種情況不會發生——畢竟,用戶甚至可能沒有登入(因此其密鑰庫不可用)。為了讓它始終工作,您需要從 ssh 私密金鑰中刪除密碼(透過以ssh-keygen -p
使用者身分登入時fabio
- 只需按 Enter 鍵取得新密碼,它就會被刪除)。
次要安全說明:當私鑰不受密碼保護時,任何獲得fabio
帳戶存取權限的人都可以透過 ssh 連線到允許該金鑰的其他主機,而無需先從使用者嗅探密碼)