使用 SSH 密鑰時發送電子郵件
我有大約 30 台幾乎相同的 CentOS 6 伺服器,我需要能夠使用 rsa 密鑰自動推出更新的配置文件以以 root 身份登錄。通常這只是 rsync,但有時可能必須在伺服器上執行命令,所以它也需要 ssh。由於這將作為腳本執行以更新所有 30 台伺服器,因此我不想在密鑰上設置密碼。
我的那部分工作正常。我創建了 rsa 密鑰,將其添加到 root 的 authorized_keys 中,這樣我就可以 ssh 或 rsync 到伺服器而無需輸入密碼。
我已將 authorized_keys 設置為僅接受來自單個主機名的密鑰,這應該使此設置相對安全。但是,我仍然對它不太滿意,因此希望將其設置為在每次使用此密鑰時向我們的共享技術郵箱發送一封電子郵件。
很多時候,我會以自己的身份登錄這些伺服器,並尋求自己的根目錄。這很好,並且不想在我們每個人每次登錄時向技術郵箱發送垃圾郵件。我只想在使用 SSH 密鑰時收到電子郵件。
這是我到目前為止在 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`!" techs@example.com 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 時,我將限制密鑰僅執行它們?)
您可以出於您的目的濫用 /root/.ssh/rc(請參閱 man sshd)並在其中包含一個
mailx
命令。
從 sshd 手冊頁的“authorized_keys”部分:
命令=“命令”
指定只要使用此密鑰進行身份驗證,就執行該命令。使用者提供的命令(如果有)將被忽略。如果客戶端請求 pty,則該命令在 pty 上執行;否則它在沒有 tty 的情況下執行。如果需要 8 位清潔通道,則不得請求 pty 或應指定 no-pty。可以通過使用反斜杠將引號包含在命令中。此選項可能有助於限制某些公鑰只執行特定操作。一個範例可能是允許遠端備份的密鑰,但僅此而已。請注意,除非明確禁止,否則客戶端可能會指定 TCP 和/或 X11 轉發。最初由客戶端提供的命令在 SSH_ORIGINAL_COMMAND 環境變數中可用。請注意,此選項適用於 shell、命令或子系統執行。另請注意,此命令可能會被 sshd_config(5) ForceCommand 指令或嵌入在證書中的命令所取代。
您可以將該選項添加到您的密鑰中,就像您添加了“來自”和“環境”選項一樣:
cat /root/.ssh/authorized_keys from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher