【问题标题】:use environment variables of remote server in ssh command在 ssh 命令中使用远程服务器的环境变量
【发布时间】:2017-10-02 05:09:53
【问题描述】:

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

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

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

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

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

提前致谢!

【问题讨论】:

  • 不,我没有在其中找到我的答案,这就是为什么要单独询问。
  • 为什么不呢。你完整阅读了吗?例如:“当 bash 作为交互式登录 shell 或作为带有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令,如果该文件存在的话”。也就是说,您是否尝试将 env 值放在 /etc/profile 中?还有其他几个建议 - 您是否尝试了所有建议,但没有一个对您有用?如果是这种情况,您需要说明您尝试了什么以及为什么它们不适合。
  • 我不是服务器的超级用户,因此我在 etc 目录中没有写入权限。这就是为什么该链接上的大多数解决方案都不适合我的原因。
  • 嗯,这是一个相当重要的约束,对吧?建议将其放入您的问题中。

标签: linux shell ssh


【解决方案1】:

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

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

由于直接命令运行不是交互式 shell,因此您的变量将无法在那里工作。 source 将在您当前的 shell 中运行脚本,并使该文件中的环境变量对您的脚本可见。

【讨论】:

  • 感谢您的回答。 ssh $username@$server "source $REMOTE_HOME/.bash_profile" ssh $username@$server "sh $REMOTE_HOME/users/prasoon/env_var.sh" 我已经尝试过了,但是在执行时它给出了以下错误,因此没有工作为了我。 stty:标准输入:无效参数
  • 非常感谢。我工作。这是我的错误。当您不是服务器的超级用户时,这是最好的解决方案。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多