如何获得一个用户ssh'd的端口号?

我正在将服务器从现有的多用户环境中的端口22转移出去。 我configuration了sshd来侦听两个端口:22和新的端口。

现在我想检测用户何时连接或连接到端口22.这显然比我预期的更难。

我尝试启动在sshd_config日志logging,但即使DEBUG不logging端口号。

我目前正在扫描netstat的TCP端口输出到端口22,但是从随机bot扫描器中列出了很多误报。 [港口移动的原因]

使用lsof -n -i TCP:22 -a -c sshd -a -u ^root,^sshd你可以在端口22上得到一个sshd进程和用户名列表以及它们的套接字。它跳过了由root或者sshd拥有的那些进程因为他们不对应login的用户。

一个完全不同的方法是将一些命令添加到/etc/ssh/sshrc ,它将parsing$SSH_CONNECTION并logging它: logger -p auth.notice -t "sshd[$$]" "$SSH_CONNECTION"

第三种方法是为端口22创build第二个sshd实例,并将其configuration为login到不同的设施。

尝试这样的事情:

 sudo lsof -i -n -P | egrep sshd.*ESTABLISHED | egrep `who -a|grep pts|awk '{print $7}'|sed ':a;N;$!ba;s/\n/\\|/g'` 

为了澄清,这个命令的目的是匹配lsof命中(显示使用的端口)与来自pts (从输出中提取PID)的用户的会话,以便过滤出误报。

换句话说,它显示了进程与持有pts ssh会话的PID的连接。