SSH 主机进程如何检测哪些端口已被客户端转发(-R 而不是 -L)

SSH 主机进程如何检测哪些端口已被客户端转发(-R 而不是 -L)

(我无法决定是在这里还是在 SuperUser 上发布这个,但由于这是出于系统管理员的目的,所以这似乎更合适)

我遇到过这样的情况:SSH 客户端将使用 SSH 选项请求端口转发-R。在连接时,我希望能够记录它们转发了哪些端口。

我计划通过强制运行特定命令(即command=my-commandauthorized_keys文件中)来执行此操作,该命令将执行此日志记录,然后运行原始命令(登录或用户指定)。

到目前为止我发现的唯一方法需要运行sudo并且感觉很不安全:

sudo lsof [email protected] -Fn -p12345 | grep "^n" | grep -v '\->' | awk -F: '{print $NF}' | sort | uniq*处理此连接12345的进程 ID 在哪里sshd(即我运行来检查它的任何脚本的父进程)。

有没有更优雅的东西(例如SSH_*为其他连接信息设置的环境变量)可以提供给我?

* 出于好奇,该命令的第一部分获取绑定到属于进程 12345 ( ) 的本地接口 ( [email protected]) 和 ( ) 的所有网络端口,并将其格式化为机器可读的 ( )。and标志使其提供原始端口号和网络地址。第二部分 ( ) 仅返回网络信息。下一部分 ( ) 消除已建立的连接(从而留下“监听”端口)。下一部分 ( ) 使用 awk 获取由“:”分隔的最后一个字段,为我提供端口(我在这里不使用 cut,因为对于 IPv6 连接,字段编号可能会更改)。最后两部分仅给我一个唯一的端口列表。我在这里解释这个,因为这是一个很棒的命令,每个人都应该知道。-a-p12345-Fn-P-ngrep "^n"grep -v '\->'awk -F: '{print $NF}'lsof

答案1

您可以将 sshd 的日志记录级别设置为DEBUG1,然后 grep 日志,您将会找到如下行:

Dec 25 21:40:25 d34dh0r53 sshd[21963]: debug1: Local forwarding listening on ::1 port 8085.

根据您使用的日志文件和权限,您无需以 root 身份读取它。

答案2

ssh ~ 密钥?

~# 列出转发的连接。

相关内容