有没有办法在 bash 脚本中获取用户的 SSH 客户端 IP 地址?

有没有办法在 bash 脚本中获取用户的 SSH 客户端 IP 地址?

由于应用程序限制,我有两个用户需要使用相同的登录信息。

这些用户对于 shell 提示符应该是什么样子有着截然不同的看法。其中一位甚至坚持要修改调色板。这导致了 .bashrc PS1 争议。我给了他们脚本来设置他们自己的偏好,但是……我们只能说这很复杂。

幸运的是,他们都从具有已知 IP 地址的位置进行连接。有没有办法可以将用户的远程 IP 地址合并到条件中,从而为他们提供所需的信息,而无需他们执行任何额外步骤?他们通过 ssh 进行连接。

答案1

来自 OpenSSH SSH 客户端手册(man 1 ssh):

ENVIRONMENT
ssh通常会设置以下环境变量:

[…]

SSH_CONNECTION标识连接的客户端和服务器端。该变量包含四个以空格分隔的值:客户端 IP 地址、客户端端口号、服务器 IP 地址和服务器端口号。

[…]

.bashrc应该这样做:

case "${SSH_CONNECTION%% *}" in
1.2.3.4|1.2.3.5 )
   PS1=…
   ;;
2.2.7.* )
   PS1=…
   ;;
# add support for more users if needed
esac

或者类似

if [ "${SSH_CONNECTION%% *}" = "1.2.3.4" ]; then
   PS1=…
else
   PS1=…
fi

答案2

如果他们使用密钥通过 ssh 登录,您可以执行以下操作:

myip=`grep 'Accepted publickey for bozo' /var/log/auth.log | tail -1 | awk '{print $11}'`

然后比较 $myip。如果他们使用密码,则进行相应修改。(如果出于某种原因他们的用户名不是 bozo,也请进行修改。)

(这应该适用于 Ubuntu 和其他 Debian 版本;身份验证日志文件位置/名称和确切格式可能因其他版本而异。)

相关内容