我有一个命令,运行良好,如果我ssh到一台机器并运行它,但失败时,我试图运行它使用远程ssh命令,如:
ssh user@IP <command>
比较使用这两种方法的“env”的输出会得到不同的环境。当我手动登录到机器并运行env时,我得到了比运行时更多的环境变量:
ssh user@IP "env"
知道为什么吗?
我有一个命令,运行良好,如果我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选项。