我正在使用一款名为 vlad 的产品,它正在与我的 Ubuntu 服务器建立非交互式 ssh 连接,但问题是它看不到任何环境变量。
我疯狂地搜索,但找不到解决方案。我尝试将变量添加到服务器上用户的 .ssh/environment 文件中,并更改 /etc/ssh/sshd_config 中的设置,但无济于事。
有人可以帮忙吗?
干杯,
克里斯
答案1
检查 /etc/ssh/ssh_config(在客户端上)并查看 SendEnv 选项。就我而言,我有SendEnv LANG LC_*
。
其中有一些有趣的信息ssh_config 手册
答案2
如果您可以控制 ssh 命令调用本身,您可以尝试这样的操作:
ssh user@remoteserver MYVAR1="$MYVAR1" MYVAR2="$MYVAR2" command
我还使用“tee”(为了视觉清晰)和 heredoc 来发送远程 bash 脚本:
tee << '+++' | ssh user@remoteserver MYVAR1="$MYVAR1" MYVAR2="$MYVAR2" bash
set -x
echo "hey, your variable is $MYVAR1"
echo "and your other variable is $MYVAR2"
+++
答案3
服务器上该用户的 shell 是什么?如果是 bash,那么 ~/.bash_profile 或包含所有变量的 ~/.profile(或类似“. /etc/environment”)应该可以工作。如果不是 bash,请考虑更改 :)
答案4
我猜测是你的环境变量在错误的文件中。有两个不同的文件用于登录/交互式 shell。
看看这个帖子:
“登录”和“交互式” bash shell 之间有什么区别
编辑:好的,现在对于非交互式登录:
您是使用密钥登录的吗?如果是,您可以将其添加到您的authorized_keys
文件中:
environment="NAME=value"
Specifies that the string is to be added to the environment when logging in using this key. Environment variables set this way override other
default environment values. Multiple options of this type are permitted. Environment processing is disabled by default and is controlled via
the PermitUserEnvironment option. This option is automatically disabled if UseLogin is enabled.
(来自 man sshd)