通过 ssh 识别我的特定客户端机器到服务器

通过 ssh 识别我的特定客户端机器到服务器

我与其他几位工程师共享一个开发服务器/环境,并且我们都在该服务器上共享一个用户帐户。

我经常使用它,所以我想通过 .bashrc 进行一些配置,但我不想让这些更改影响使用该帐户的其他人。理想情况下,我想做类似的事情:

if [ "$SSH_CLIENT_USER" = "<me>" ]; then
    # do my config
fi

ssh 是否设置了任何此类环境变量,可用于唯一标识我?或者有任何其他区分客户端计算机的方法?也许我可以用我的笔记本电脑进行一些 ssh 配置,让它识别自己?我没有服务器的管理员权限(而且无论如何也不想使用它们),但我当然愿意对我的笔记本电脑的配置进行任何更改。

答案1

Jakuje 有很多好主意,但不幸的是由于不同的原因都没有奏效,但关于代理转发的建议给了我一个确实有效的想法。

ssh-add -l列出了可用的代理,并且由于我的密钥存储在我的笔记本电脑的主目录中,其中包含我的唯一工作 ID,因此我能够使用它:

if [[ $(ssh-add -l 2> /dev/null) == *"<my-id>"* ]]; then
    # do my config
fi

ForwardAgent yes(与我的本地配对~/.ssh/config

答案2

手册页ssh提供了一些可能的答案。有许多不同的变量,其中这个可能对你来说很有趣:

如果你总是从同一个 IP 地址(或有限集)连接,你可以使用

SSH_CONNECTION

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

您可以定义变量

我希望您使用 ssh 密钥进行身份验证。如果您可能在authorized_keys文件中为密钥加上修饰符前缀,则可定义另一个环境变量,例如:

environment="WHOIAM=my-mane" ssh-rsa AAAAB3Nza...LiPk== [email protected]

然后您可以在 中检查此变量~/.bashrc。如手册页中所述sshd

您可以从客户端传递变量

如果您有权访问服务器配置,您可以配置客户端和服务器来发送和接受您选择的一些环境变量(SendEnvAcceptEnv选项)。

您可以检测特殊配置

其他想法可能是使用ssh-agent转发(如果您知道同事不使用它)并检查变量$SSH_AUTH_SOCK

答案3

如果您不介意弄乱本地 SSH 命令(您在机器上运行以连接到服务器),那么您可以像这样执行它:

ssh user@remote -t 'export SPECIAL_ID=magic; bash -l'

(显然您想将其放在脚本或 shell 别名中)。

这将启动一个新的 shell,非常像您平常所做的那样,但首先设置一个环境变量,然后您可以签入.bashrc并登录。

实现相同效果的另一种方法是SendEnv.ssh/config文件中设置选项,但这也要求您能够AcceptEnv在服务器的/etc/ssh/sshd_config文件中设置适当的选项,如果您没有服务器的管理员权限,这可能无法实现 - 因此上述解决方案无需服务器的管理员权限即可提供相同的效果。

相关内容