部署 用户 SSH 远程到后端执行命令时,保持用户的环境变量

johnwhm · 2016年03月28日 · 最后由 zoker 回复于 2016年03月28日 · 3759 次阅读

用户 ssh 远程到后端执行命令时,保持用户的环境变量

项目中有个地方需要程序中 ssh 到另外一台机器去执行 ruby 代码,但是会遇到这样的情况:

$ssh -p 10022 [email protected] rvm list;
$bash: rvm: 未找到命令

why?

直接登录到这台机器上看看呢?

$ssh -p 10022 [email protected];
rvm list;
rvm rubies

   ruby-1.9.3-p551 [ x86_64 ]
   =* ruby-2.1.2 [ x86_64 ]

   # => - current
   # =* - current && default
   #  * - default

so,应该是在 ssh 执行命令的时候,没有携带用户的环境变量

狗狗了一下,可以通过设置我想要登录机器的 SSHD 来允许保持用户环境

$sudo vim /etc/ssh/sshd_config;
add:
PermitUserEnvironment yes;
$sudo service ssh restart;

改完了后端,还需要给执行 ssh 的机器添加想要携带的环境变量

vim ~/.ssh/environment

设置你所需要的 GEM_HOME,PATH 等(这里的值还是应该以 target 机器的为准)

验证:

$ssh -p 10022 [email protected] rvm list;

顶一下,之前用OpenSSH的时候也遇到这个问题,处理方法跟这个一样,当时是在StackOverflow找到的答案。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号