SSH AuthorizedKeysCommand 执行过程中能否获取远程IP?

Can you get the remote IP during SSH AuthorizedKeysCommand execution?

是否可以在连接授权之前获取 SSH 连接的传入 IP 地址?

我们正在使用按预期工作的 AuthorizedKeysCommand bash 脚本,但我希望至少能够记录包括传入 IP 地址在内的尝试。我一直找不到任何可以含糊地暗示它可用的东西。 $SSH_CLIENT$SSH_CONNECTION 等环境变量在脚本中为空,并且在包含 IP 的 sshd 配置中没有可用的令牌。

授权密钥脚本非常简单。

#!/bin/bash
curl -sf -X GET "http://10.x.x.x/gatekeeper//$IP_WOULD_GO_HERE"

看起来您自己基本上已经回答了这个问题:该值既不能作为令牌也不能作为环境变量使用。您剩下的选择是在 sshd 本身之外的某个地方记录连接:

  • 如果您让 systemd 监听端口 22 上的连接而不是 sshd...

    systemctl disable --now ssh
    systemctl enable --now ssh.socket
    

    ...然后您会看到所有连接记录在您的日记中,如下所示:

    Apr 14 17:43:41 node1 systemd[1]: Started OpenSSH per-connection server daemon (192.168.121.19:45516).
    
  • 或者,您可以添加防火墙规则来记录连接 端口 22:

    iptables -A INPUT -p tcp --dport 22 --syn -j LOG --log-prefix 'SSH '
    

    这将使您记录如下消息:

    Apr 14 17:46:33 node1 kernel: SSH IN=eth0 OUT= MAC=52:54:00:e9:91:6f:52:54:00:4f:05:26:08:00 SRC=192.168.121.19 DST=192.168.121.35 LEN=60 TOS=0x08 PREC=0x40 TTL=64 ID=40136 DF PROTO=TCP SPT=45518 DPT=22 WINDOW=64240 RES=0x00 SYN URGP=0