我有一个命令,运行良好,如果我ssh到一台机器并运行它,但失败时,我试图运行它使用远程ssh命令,如:

ssh user@IP <command>

比较使用这两种方法的“env”的输出会得到不同的环境。当我手动登录到机器并运行env时,我得到了比运行时更多的环境变量:

ssh user@IP "env"

知道为什么吗?


当前回答

只需要导出在~/.bashrc中检查非交互式shell时需要的环境变量。

其他回答

我发现一个简单的解决方法是添加 源/ etc / profile 到我试图在目标系统上运行的script.sh文件的顶部。 在这里的系统上,这会导致script.sh所需的环境变量被配置,就像从登录shell中运行一样。

在先前的一个响应中,建议~/。bashr_profile等等……被使用。 我没有花太多时间在这个问题上,但是,如果您ssh到目标系统上的不同用户,而不是您登录的源系统上的shell,在我看来,这将导致源系统用户名用于~。

我也有类似的问题,但最后我发现~/。bashrc是我所需要的。

但是,在Ubuntu中,我必须注释停止处理~/的行。bashrc: (

#If not running interactively, don't do anything
[ -z "$PS1" ] && return

在运行命令之前如何获取概要文件?

SSH user@host "source /etc/profile;/道路/ script.sh”

您可能会发现最好将其更改为~/。bash_profile、~ /。Bashrc之类的。

(如这里(linuxquestions.org))

只需要导出在~/.bashrc中检查非交互式shell时需要的环境变量。

执行remote ssh命令时Shell环境未加载。您可以编辑ssh环境文件:

vi ~/.ssh/environment

其格式为:

VAR1=VALUE1
VAR2=VALUE2

此外,检查sshd配置的PermitUserEnvironment=yes选项。