在ssh命令中使用远程服务器的环境变量

时间:2017-05-04 06:50:48

标签: linux shell ssh

我有两台服务器X(主机)和Y(远程)。脚本abc.sh保存在Y服务器上。我正在使用ssh命令从服务器X运行abc.sh。

脚本运行成功但是包含服务器Y的环境变量(保存在/.bash_profile中)的命令给出了空白输出。

当我从服务器Y本身运行abc.sh时,所有命令都成功运行。

我的问题是如何包含远程服务器(Y)的环境变量,以便完整脚本将成功执行。

注意:我没有etc目录的写入权限,因此我无法更改其中的任何内容。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以包含以下环境变量:

ssh user@host_y 'source ~/.bash_profile; /path/to/your/script/abc.sh'

由于直接命令运行不是交互式shell,因此您的变量将不起作用。 source将在您当前的shell中运行脚本,并在该文件中为您的脚本创建可见的环境变量。

答案 1 :(得分:0)

我使用ssh连接远程计算机来运行一些cron作业。该代码无法加载所有环境变量。如果我在那台机器上运行代码,它将起作用。 我尝试了几种对我不起作用的方法。 最后,我在~/.bashrc文件中的以下行中进行注释。它对我有用。

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

ssh连接打开一个无交互的shell。因此,如果您注释或删除此阻止代码,它将为非交互式外壳加载环境变量。

或者,您可以将所有所需的环境行代码放在该行之上。