gpt4 book ai didi

linux - 在 screen session 中访问 SSH 客户端 IP 地址

转载 作者:太空狗 更新时间:2023-10-29 11:17:52 28 4
gpt4 key购买 nike

可以通过环境变量(例如 SSH_CONNECTION)访问连接的 SSH 客户端的 IP 地址,如

中所述

Find the IP address of the client in an SSH session

但是在 GNU screen session 中,这些环境变量由启动 screen 的人定义。有没有什么方法可以同时获取 SSH 连接信息,以供稍后进入已经存在的 screen session 的人使用,例如来自另一台主机?

我想不出一种方法来确定这一点,但这在 screen session 在不同人之间共享的情况下可能很有用,例如。

最佳答案

如果 screen session 以 root 身份启动,你可以,但它不会完全可靠

  1. 如果两个用户在同一个 screen 窗口中键入,他们将在同一个 shell 中进行交互。可以写一个命令。对方可以按<enter>键。

  2. 您必须能够访问环境变量 SSH_CONNECTION (或更好的 SSH_CLIENT )这只有在您是根用户或在 screen session 中使用同一用户时才有可能。

假设您是 screen session 中的 root,您可以使用 ps 知道在 screen session 中最后一个事件的用户命令并查找最后一个事件 session 。

ps h -C screen katime -o pid,user

通过使用 pid,并访问 /proc/<pid>/environ文件,你可以得到SSH_CLIENT变量。

sed -z '/SSH_CLIENT/p;d' /proc/`ps h -C screen katime -o pid |head -1`/environ

--> SSH_CLIENT=257.31.120.12

所有这些都假设您的 screen 是以 root 身份执行的

您还可以选择记录所有事件连接。对于这种需要,我建议您存储连接的完整列表及其最后的事件。

ps eh -C screen kstime -o pid,atime | while read pid stime; do echo -n "$stime: ";\
gawk -v 'RS=\0' -F= '$1=="SSH_CLIENT" {print $2}' /proc/$pid/environ; done

Result:
00:00:00: 257.31.120.12 61608 22
00:07:11: 258.1.2.3.4 49947 22

请注意,您还可以解析 ps eh -C screen kstime -o args 的结果命令,如果你觉得它更容易。

编辑:

这是一个有效的 Debian 命令,可以让所有用户当前连接到同一个 screen session :

 find /var/run/screen/
-name $(pstree -sp $$ |sed 's/.*screen(\([0-9]*\)).*/\1/;q').*
-printf "%h\n"
| cut -f2 -d-

关于linux - 在 screen session 中访问 SSH 客户端 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37478810/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com