![每當使用 SSH 金鑰時發送電子郵件](https://rvso.com/image/23932/%E6%AF%8F%E7%95%B6%E4%BD%BF%E7%94%A8%20SSH%20%E9%87%91%E9%91%B0%E6%99%82%E7%99%BC%E9%80%81%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6.png)
我有大約 30 台幾乎相同的 CentOS 6 伺服器,我需要能夠使用 rsa 金鑰以 root 身分登入來自動推出更新的設定檔。通常這只是 rsync,但有時可能需要在伺服器上執行命令,因此也需要 ssh。由於這將作為腳本運行來更新所有 30 台伺服器,因此我不想在密鑰上有密碼。
我那部分一切正常。我建立了 rsa 金鑰,將其新增至 root 的authorized_keys中,這樣我就可以透過 ssh 或 rsync 到伺服器,而無需輸入密碼。
我已將authorized_keys 設定為僅接受來自單一主機名稱的金鑰,這應該會使此設定相對安全。但是,我仍然不太滿意它,因此希望將其設定為每次使用此金鑰時都會向我們的共用技術信箱發送電子郵件。
很多時候,我會以自己的身分登入這些伺服器,並申請取得 root 權限。這很好,並且不想每次登入時都向技術郵箱發送垃圾郵件。
這是我迄今為止在 server1[through 30].example.com 上所擁有的內容:
cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher
tail -n 3 /root/.bash_profile
if [[ "${SSHKEY}" == "1" ]] ; then
echo 'Either we are getting hacked, or somebody used the SSH key on pusher to push something out to ' `hostname` ' at ' `date` | mail -s "WARNING - ROOT SSH KEY USED ON `hostname`!" [email protected]
fi
這對 SSH 來說非常有效 - 如果我以我自己的身份登入並運行 su 來獲取 root,我不會收到電子郵件,但如果我登入 Pusher 並運行:
ssh -i /root/.ssh/server1.pri server1.example.com
我收到一封電子郵件。問題是推送檔案。如果我運行以下任一:
scp -i /root/.ssh/server1.pri /tmp/file.txt server1.example.com:/tmp/
rsync -e 'ssh -i /root/.ssh/server1.pri' /tmp/test.txt server1.example.com:/tmp/
我仍然沒有收到電子郵件。
有沒有辦法,而不是依賴 bash_profile,將其設定為在使用金鑰時發送電子郵件,無論做什麼? (或者,僅當它用於 scp 或 rsync 時,我會將金鑰限制為僅運行這些?)
答案1
你可能會濫用 /root/.ssh/rc出於您的目的(請參閱 man sshd)並mailx
在其中包含命令。
答案2
如果 bash 作為互動式登入 shell 調用,則使用 ~/.bash_profile。 ~/.bashrc 用於非登入 shell。但是,使用該檔案並不可靠,因為攻擊者可能要求根本不讀取 shell 初始化檔案。
答案3
從 sshd 手冊頁的“authorized_keys”部分:
命令=“命令”
指定每當使用此金鑰進行身份驗證時都執行該命令。用戶提供的命令(如果有)將被忽略。如果客戶端請求 pty,則該命令在 pty 上運行;否則它會在沒有 tty 的情況下運行。如果需要 8 位元乾淨通道,則不得請求 pty 或應指定 no-pty。透過用反斜線引用指令,可以將引號包含在指令中。此選項可能有助於限制某些公鑰僅執行特定操作。一個範例可能是允許遠端備份但僅允許其他任何內容的金鑰。請注意,客戶端可以指定 TCP 和/或 X11 轉發,除非明確禁止它們。用戶端最初提供的命令可在 SSH_ORIGINAL_COMMAND 環境變數中找到。請注意,此選項適用於 shell、命令或子系統執行。另請注意,此命令可能會被 sshd_config(5) ForceCommand 命令或嵌入在憑證中的命令取代。
您可以將該選項新增至您的金鑰中,就像新增「from」和「environment」選項一樣:
cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher