一个脚本来监控传入到服务器的 ssh 连接

一个脚本来监控传入到服务器的 ssh 连接

我想编写一个脚本来监控传入服务器的 ssh 连接。尝试在 sshd_config 中使用 ForceCommand,但如果我将它放在脚本中,它不会让我进入。
匹配用户 *
X11Forwarding 没有
AllowTcpForwarding 没有
ForceCommand ssh /usr/local/include/ssh.sh

#!/bin/bash
DP=/usr/local/include;
DT=$(w | grep pts | grep -v :0.0 > $DP/tmp.log);
FDATE=$(date +%Y-%m-%d);
while read -r values
do
PTSU=$(echo $values |  awk '{print $2}');
IP=$(echo $values |  awk '{print $3}');
LTIME=$(echo $values |  awk '{print $4}');
USA=$(echo $values |  awk '{print $1}');


  PROC=$( cat /proc/net/arp | grep $IP );
  MAC=$(echo $PROC |  awk '{print $4}');

  echo "$USA $PTSU $IP $MAC $FDATE $LTIME" >>$DP/ssh.log;

done < $DP/tmp.log
rm $DP/tmp.log

答案1

ForceCommand 必须实际执行用户想要运行的命令。可能是 shell、sftp 守护程序、rsync 或其他程序。您的脚本除了尝试记录您想要的数据外,不会执行任何其他操作。因此,ssh 守护程序会启动您的脚本并运行它,当脚本存在时,ssh 会话将终止。commanndForceCommand需要保持运行以保持会话打开,或者启动其他程序以保持会话打开。

该脚本有点乱。 ForceCommand以用户的权限运行。希望您的用户没有/usr/local/include此目录的写权限,只有 root 才可以写入,它不是数据文件夹。

您有一个硬编码的临时文件名。如果两个用户同时登录,这至少会导致错误。根据您存储内容的目录的安全性,它可能被滥用为安全绕过。您似乎没有任何过滤来将其限制为当前活动用户。

您似乎试图记录的大部分内容,SSH 守护程序都已经记录了,只需提高详细程度(LogLevel VERBOSE)并提取将转到系统日志的数据,而不是尝试为此目的构建某种黑客脚本。

唯一不会成为标准详细 sshd 日志的一部分的是你从 arp 命令获得的 mac 地址,我真的怀疑它在任何情况下都没有多大用处。但是,如果你真的认为你需要知道 mac 地址,也许可以安装类似阿帕勒特在您的系统日志中记录 mac 到 ip 的关联。

相关内容