我创建了一个 shell 脚本,该脚本向连接的用户询问一个问题,然后向他提供提示。shell 将问题发布到数据库进行记录。问题是我们的开发人员使用的是共享帐户,但每个用户都有自己的私钥。有没有办法用 shell 脚本 (bash) 读取连接用户拥有的公钥?
答案1
也有类似的问题Unix和Linux操作系统考虑到这一点,你可以 grep 日志中连接 IP 的最新条目:
REMOTE_IP=${SSH_CONNECTION%% *}
grep -B1 ${REMOTE_IP} /var/log/auth.log
假设您使用的是 debian,sshd 日志将转到auth.log
。如果使用类似 RH 的发行版,则它们将位于secure.log
。
答案2
您可以通过设置 LogLevel 指令将 sshd 日志记录级别提升至 VERBOSE/etc/ssh/sshd_config
LogLevel DEBUG
这会导致 sshd 为每个连接记录以下内容
Aug 17 12:16:20 centos sshd[9587]: Connection from 192.168.254.200 port 58107
Aug 17 12:16:20 centos sshd[9587]: Found matching RSA key: 54:d2:06:cf:85:ac:89:f6:3c:a8:73:c7:a1:30:c2:8b
Aug 17 12:16:20 centos sshd[9588]: Postponed publickey for user from 192.168.254.200 port 58107 ssh2
Aug 17 12:16:20 centos sshd[9587]: Found matching RSA key: 54:d2:06:cf:85:ac:89:f6:3c:a8:73:c7:a1:30:c2:8b
Aug 17 12:16:20 centos sshd[9587]: Accepted publickey for user from 192.168.254.200 port 58107 ssh2
Aug 17 12:16:20 centos sshd[9587]: pam_unix(sshd:session): session opened for user user by (uid=0)
环境变量 SSH_CONNECTION 包含当前连接的信息
192.168.254.200 58107 192.168.254.89 22
<sourece IP> <source port> <destination IP> <destination port>
只需编写一点脚本就可以将两者结合在一起。