如何讓 ssh-agent 始終在 Ubuntu 伺服器上執行
我正在嘗試使用 rsync 將某些文件夾從一台伺服器(目標伺服器)備份到另一台(備份伺服器)。我還需要從備份伺服器呼叫 rsync,以便更輕鬆地在一個地方維護多台伺服器的備份設置。
為此,我嘗試將 rsync 命令添加到備份伺服器上的 crontab,以便我的文件定期同步。該命令如下所示:
rsync -av --delete target_server_user@target_server:/path/to/directory/ /path/to/directory
據我所知,rsync 預設使用 SSH 進行傳輸。當我手動執行命令時,它會要求輸入
remote_server_user
. 雖然一次性手動同步是可以的,但顯然不允許使用 cron 進行預定的定期同步。因此,我使用 ssh-keygen 在備份伺服器上創建了身份驗證密鑰對,使用 ssh-copy-id 將創建的身份添加到目標伺服器。但是當我嘗試呼叫 rsync 時,它會要求輸入密碼。然後我發現我需要將身份添加到ssh-agent。然後我發現 ssh-agent 甚至沒有在使用這個答案的備份伺服器上執行。
然後我使用 啟動它
eval
ssh-agent -s``,使用 添加標識ssh-add path/to/identity
,檢查是否添加了標識ssh-add -L
並成功手動執行上面的 rsync 命令。但是,在關閉與備份伺服器的 ssh 連接並以同一使用者身份再次連接後,我得到了未執行的 ssh-agent。當我啟動它時,我看到
ssh-add -L
. 結果 rsync 命令要求輸入密碼。這是 ubuntu 伺服器的一個功能嗎(我從來沒有在我的 ubuntu 桌面上手動啟動 ssh-agent)?
當我修復 ssh-agent 並將上面的 rsync 命令添加到 crontab 時,它是否能夠使用
add-ssh
命令中添加的身份?如果 ssh-agent 和添加的身份僅對登錄使用者可用,那麼我似乎走錯了方向。或者也許有更好的方法來設置目錄的定期計劃同步?
我嘗試在守護程序模式下設置 rsync 並創建所有這些
rsyncd.conf
,秘密等等。但是在手動成功執行那個簡單的 rsync 命令之後,感覺就像它不需要大量配置就可以滿足我的需要。不工作的 ssh 授權除外。
因此,我能夠通過在標誌中明確指定身份文件的路徑來設置同步,
-e
如下所示。解決方案比我想要的還要簡單。在這種情況下,我不必考慮管理ssh-agent
和添加身份。rsync -ave "ssh -i /path/to/key" --delete target_server_user@target_server:/path/to/directory/ /path/to/directory
人們通常使用的一種解決方法是創建一個不使用密碼保護的特定於服務的 ssh 密鑰對。
為了遠端伺服器的安全,您可以使用文件中的額外選項
~/.authorized_keys
來限制使用該私鑰授予的訪問權限。例如,選項可能與授予的 ip-address 訪問權限不同
from="10.9.8.7"
,您可以限制只能啟動 rsynccommand="/bin/rsync"
並阻止互動式登錄會話等,no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding
並獲得如下所示的條目:~/.ssh/authorized_keys command="/bin/rsync",from="10.9.8.7",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAxxxxx..more..public..key..data Comment=This key can only be used for remote backup