题 非交互式SSH连接的环境变量?


我正在使用一个名为vlad的产品,它正在与我的Ubuntu服务器进行非交互式ssh连接,但问题是它无法看到任何环境变量。

我一直在谷歌搜索疯狂但无法找到解决方案。我已经尝试将变量添加到服务器上的用户的.ssh / environment文件中,并且还更改/ etc / ssh / sshd_config中的设置但没有快乐。

有人可以帮忙吗?

干杯,

克里斯


6
2018-02-04 08:44






答案:


检查/ etc / ssh / ssh_config(在客户端上)并查看SendEnv选项。就我而言,我有 SendEnv LANG LC_*

这里有一些有趣的信息 man ssh_config 


5
2018-02-04 08:49



感谢Dom的回复,对不起,我的问题不是很清楚,我真的在服务器上寻找解决方案,所以我不需要在每个客户端上设置一些东西。 - ChrisInCambo
不幸的是,客户端不会发送环境变量,除非您告诉它要发送哪些变量。如果要设置许多客户端,可以考虑使用工具来部署SSH客户端配置,例如puppet。 - ℝaphink


如果你可以控制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"
+++

1
2018-03-18 17:54





你有定义的环境变量吗? ~/.bashrc 在服务器上?有时候有些人会读 ~/.profile 代替。我做的一个技巧是符号链接 ~/.profile 至 ~/.bashrc

例如。:

ln -s ~/.bashrc ~/.profile

0
2018-02-04 10:18



那没用 - ChrisInCambo


我的猜测是你的环境变量是在错误的文件中。有两个不同的文件来源于登录/交互式shell。

看看这篇文章:
'Login'和'Interactive'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)


0
2018-02-04 09:05



我对非交互式shell感兴趣 - ChrisInCambo
对不起,还没读过这个。我已经相应地编辑了我的答案。 - Christian
不,那也没用。 - ChrisInCambo


服务器上该用户的shell是什么?如果是bash,则〜/ .bash_profile或〜/ .profile包含所有变量(或类似“./ etc / environment”)应该有效。如果不是bash,请考虑改变:)


0
2018-03-18 18:06





@Dom(我不能发表评论):对我而言,这是有效的 /etc/ssh/sshd_config

AcceptEnv LANG LC_*

0
2017-09-26 11:31