我与其他几位工程师共享一个开发服务器/环境,并且我们都在该服务器上共享一个用户帐户。
我经常使用它,所以我想通过 .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
您可以从客户端传递变量
如果您有权访问服务器配置,您可以配置客户端和服务器来发送和接受您选择的一些环境变量(SendEnv
和AcceptEnv
选项)。
您可以检测特殊配置
其他想法可能是使用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
文件中设置适当的选项,如果您没有服务器的管理员权限,这可能无法实现 - 因此上述解决方案无需服务器的管理员权限即可提供相同的效果。