如何检测SSH连接?

出于某种原因,我有他下面的情况:

启动时,我启动一个等待一定时间的脚本,并检查在此时间窗口内是否build立了SSH连接。 如果连接打开,脚本执行操作A,否则杀死sshd并执行B.

什么是检测打开连接的最佳方法? (脚本可以用Bash或Ruby编写)

谢谢

如果要检测当前的SSH会话,请使用lsof -i :22并查找它返回多于2行或grep for ESTABLISHED:
[root@nemo ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 3772 root 3u IPv6 9906 TCP *:ssh (LISTEN)
sshd 21376 root 3r IPv6 159072 TCP myserver:ssh->someip:27813 (ESTABLISHED)
sshd 21381 james 3u IPv6 159072 TCP myserver:ssh->someip:27813 (ESTABLISHED)

要查看会话是否完全打开,请在/ var / log / secure(在redhat / centos / fedora上)中查找类似于以下内容的内容:
Sep 27 05:05:28 nemo sshd[21376]: Accepted password for james from some_ip port 27813 ssh2
如果您通过密码以外的方式进行身份validation,日志条目可能会稍有不同。

 #client connecting from ${CLIENT_IP} to local ssh listening on SSHD_IP default port A() { echo "A" } B() { echo "B" } CLIENT_IP="" SSHD_IP="" sleeptime=5 #use this counter to sleep $sleeptime seconds, decrementing on match fail while [ ${sleeptime} -gt 0 ] ; do netstat -nt |grep -q -E "${CLIENT_IP}:[0-9]+[[:space:]]+${SSHD_IP}:22[[:space:]]+ESTA" if [ $? -eq 0 ] ; then A; exit 0 else sleeptime=$((${sleeptime} - 1)) sleep ${sleeptime} fi done kill -TERM `cat /var/run/sshd.pid` B