我正在从 Windows cygwin 向 Open SUSE Linux 服务器执行 ssh。我试图通过 ssh 命令发送我的一个本地环境变量,以便在登录后立即加载一些特定的 .bashrc 文件。以下是我尝试过的方法。
Windows Machine有这个环境变量
IDENTITY=samiron
echo %IDENTITY%
samiron
在Linux机器上我有
vim /etc/ssh/sshd_config
AcceptEnv IDENTITY
我/home/user/.bashrc
曾经写过类似的东西
export ME=$IDENTITY
我的计划是拥有一个类似的文件.bashrc.samiron
并source ~/.bashrc.$ME
从.bashrc
文件中执行。
但是,我正在像下面这样执行 ssh,并期望变量$ME
包含"samiron"
ssh -o SendEnv=IDENTITY [email protected]
但登录后
user@server:~> echo $ME
什么都没显示。有人能告诉我我做错了什么吗?
答案1
必须满足这两个条件才能使其按预期工作:
您的 ssh 服务器必须配置为接受来自本地客户端环境的变量转发。由于允许此类行为可能存在安全风险,因此通常默认禁用它。您可以通过指定“接受环境”在你的 ssh 服务器配置中设置指令。因此,将类似下面的内容放入/etc/ssh/sshd_config文件和重新加载ssh 服务器服务(变量名可以包含通配符,您可以指定多个以空格分隔的变量,详细信息sshd_config 命令)
AcceptEnv 变量名
此功能适用于 ssh 协议版本 2仅。如果没有更改,几乎所有现代 Linux 发行版都默认满足此要求(“协议”指示)。
答案2
哦,我错过了重新启动 sshd 服务器的部分。
sudo /etc/init.d/sshd restart
解决了我的问题