使用 SSH 密钥时随时发送电子邮件

Joe*_*ato 6 ssh scp logs key-authentication

我有大约 30 个几乎相同的 CentOS 6 服务器,我需要能够使用 rsa 密钥自动推送更新的配置文件以作为 root 登录。通常这只是 rsync,但有时可能必须在服务器上运行命令,因此它也需要 ssh。由于这将作为脚本运行以更新所有 30 个服务器,因此我不想在密钥上设置密码。

我让那部分一切正常。我创建了 rsa 密钥,将它添加到了 root 的authorized_keys,所以我可以ssh 或rsync 到服务器,而无需输入密码。

我已将authorized_keys 设置为仅接受来自单个主机名的密钥,这将使此设置相对安全。但是,我对它仍然不太满意,所以想设置它在每次使用此密钥时向我们的共享技术邮箱发送一封电子邮件。

很多时候我会以我自己的身份登录这些服务器,并要求自己获得 root 权限。这很好,不想每次登录时都向技术邮箱发送垃圾邮件。我只想在使用 SSH 密钥时收到电子邮件。

这是我到目前为止在 server1[到 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
Run Code Online (Sandbox Code Playgroud)

这对 SSH 非常有效 - 如果我自己输入并运行 su 以获得 root 权限,我不会收到电子邮件,但是如果我登录 pusher 并运行:

ssh -i /root/.ssh/server1.pri server1.example.com
Run Code Online (Sandbox Code Playgroud)

我收到一封电子邮件。问题是推送文件。如果我运行:

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/
Run Code Online (Sandbox Code Playgroud)

我仍然没有收到电子邮件。

有没有办法,而不是依赖 bash_profile,将其设置为在使用密钥时发送电子邮件,用于任何目的?(或者,仅当它用于 scp 或 rsync 时,我将限制密钥仅运行它们?)

Nil*_*ils 6

您可以出于您的目的滥用 /root/.ssh/rc(请参阅 man sshd)并在其中包含一个mailx命令。