通過 SSH 強制 Rsync 守護程序
感謝@roaima 的敏銳眼光,我注意到我下面的遠端伺服器備份腳本實際上並沒有像我希望的那樣使用 SSH 加密。
我的 rsync 命令基於此處找到的範例:
https ://www.man7.org/linux/man-pages/man1/rsync.1.html
rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest
但是,當我目前的備份腳本執行時,實際發生的是:
1.)它以指定使用者身份連接到 ssh,然後
2.)我的登錄通知腳本通過電子郵件確認 ssh 使用者的登錄(在斷開/重新連接時重複),
3.)問題:rsync 守護程序連接並執行ssh shell 之外的業務,這意味著我實際上並沒有得到我想要的 ssh shell 加密。
我通過執行備份腳本然後在遠端伺服器上執行命令來驗證這一點,該命令
who
確認在執行rsync守護程序時未連接到伺服器。ssh-backup-user
我目前的備份腳本(必須以非 root 使用者身份執行)
#!/bin/bash while [ 1 ] do rsync -avxP --delete --append --checksum --timeout=180 --bwlimit=150 --rsync-path="sudo rsync" --log-file=/var/log/rsync.log --password-file=/etc/rsyncd.passwd -e "ssh -l backup-user" 111.22.333.444::data /media/user/WebMade/Server-Backups/Prod/today/ if [ "$?" = "0" ] ; then echo "rsync completed normally" exit else echo "Rsync failure. Backing off and retrying..." sleep 10 fi done #EOF
可能有人能夠澄清發生了什麼,要麼我誤解了手冊頁(很可能:-/),要麼提供的範例是錯誤的。
謝謝
一切都很好,這裡沒有問題。
這裡的其他答案部分是錯誤的,部分是錯誤的。您所做的是通過 SSH 連接生成並與 rsync 守護程序通信的正確記錄方式。對於不熟悉這種模式的人,我建議查看 rsync 手冊中名為“通過遠端外殼連接使用 RSYNC-DAEMON 功能”的部分。
設置
--rsh
或-e
結合ssh
雙冒號::
語法啟用此模式。然後,Rsync 將使用 ssh 連接到遠端機器,在那裡(在 SSH 會話下)生成一個守護程序,並通過 SSH 隧道與其通信。這是一種非常有用的模式,因為它允許您將僅守護程序功能與 SSH 身份驗證和加密一起使用。
who
沒有告訴你你認為它做了什麼。who
(就像w
和其他替代方案一樣)僅列出互動式會話,ssh
用於啟動 rsync 守護程序的會話不是互動式的(甚至根本不使用 shell),所以它不會出現在這裡。如果您不只是相信 rsync 會按照手冊中的說明進行操作,則可以使用ps -efH
來查看遠端電腦上執行的 ssh 會話和 rsync 守護程序,ss -t
以查看除了埠上的 SSH 之外機器之間沒有 TCP 連接22、或者strace
在rsync程序上看到rsync程序與ssh程序通信。