如何在作为ProxyJump的堡垒机上记录连接信息?
你猜的完全没错!用ssh -J(也就是ProxyJump)的时候,堡垒机上建立的是纯转发通道,根本不会启动登录shell,所以你之前配置的ForceCommand只会在直接登录堡垒机时触发,转发连接时完全没反应。
下面给你两种靠谱的解决方法,按需选择:
方法一:调整SSH日志级别(简单省心,依赖日志分析)
这是最省事的办法,不用写脚本,只要改一下堡垒机的SSH配置:
- 打开堡垒机的
/etc/ssh/sshd_config文件,找到LogLevel这一行,改成:LogLevel VERBOSE - 重启SSH服务生效:
systemctl restart sshd(如果是老系统可能用service ssh restart)
之后,你去堡垒机的日志文件(一般是/var/log/auth.log或者/var/log/secure)里找,就能看到类似这样的条目:
Accepted publickey for username1 from 192.168.1.100 port 54321 ssh2: RSA SHA256:...
debug1: channel 0: new [direct-tcpip]
debug1: channel 0: direct-tcpip: listening port 0 for 10.0.0.10 port 22, originator 192.168.1.100 port 54321
这里面的信息刚好是你要的:
username1:通过堡垒机的用户账号192.168.1.100:用户的源IP地址10.0.0.10:目标服务器S1的IP地址
如果想要更规整的日志,你可以写个小脚本定期解析这个日志文件,把这些信息提取出来存到单独的日志文件或者数据库里。
方法二:自定义脚本实时记录(灵活可控,自定义格式)
如果想直接用脚本实时记录,关键是让SSH服务在转发连接时也触发我们的脚本。我们可以通过Match块配合ForceCommand实现,同时让脚本区分直接登录和转发连接的场景:
步骤1:写记录脚本
创建一个脚本文件,比如/usr/local/bin/log_proxy_jump.sh,内容如下:
#!/bin/bash # 获取基础信息 CURRENT_USER=$(whoami) SOURCE_IP=$(echo "$SSH_CLIENT" | awk '{print $1}') LOG_FILE="/var/log/proxy_jump_connections.log" # 判断是否为ProxyJump转发连接 if [ -z "$SSH_ORIGINAL_COMMAND" ]; then # 检查当前进程关联的转发通道信息 CHANNEL_DETAILS=$(ss -tulpn | grep "$PPID" | grep -E 'ESTABLISHED.*ssh') if echo "$CHANNEL_DETAILS" | grep -q 'direct-tcpip'; then # 提取目标服务器IP TARGET_IP=$(echo "$CHANNEL_DETAILS" | awk '{print $5}' | cut -d: -f1) # 写入自定义日志 echo "$(date '+%Y-%m-%d %H:%M:%S') | USER: $CURRENT_USER | SOURCE_IP: $SOURCE_IP | TARGET_SERVER: $TARGET_IP" >> "$LOG_FILE" fi # 允许继续进入shell或转发 exec "$SHELL" else # 如果是直接在堡垒机执行命令,也记录下来 echo "$(date '+%Y-%m-%d %H:%M:%S') | USER: $CURRENT_USER | SOURCE_IP: $SOURCE_IP | COMMAND: $SSH_ORIGINAL_COMMAND" >> "$LOG_FILE" exec $SSH_ORIGINAL_COMMAND fi
然后给脚本加执行权限:
chmod +x /usr/local/bin/log_proxy_jump.sh
步骤2:修改SSH配置
打开/etc/ssh/sshd_config,添加或修改以下内容:
Match all ForceCommand /usr/local/bin/log_proxy_jump.sh
保存后重启SSH服务生效。
注意事项
- 确保堡垒机的
PermitTTY yes(默认就是yes,不用改),否则脚本可能无法正常运行。 - 测试的时候一定要开一个备用的SSH连接到堡垒机,避免配置错误导致自己连不上!
备注:内容来源于stack exchange,提问作者cyberpirate92

