假设我有两个主机:A 和 B,用户 a 和 b。B 是安装了 Cygwin 的 Windows 机器,如果这很重要的话。
B 配置为无需密码即可通过 SSH 从 A 访问(它包含 A 的公共 RCA 密钥),因此我可以通过以下方式从 A 对其运行命令:
ssh b@B [command]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行需要访问环境变量的命令时,该命令失败:
[15:54:08] - a@A - ~
$ ssh b@B 'echo $ANT_HOME'
Run Code Online (Sandbox Code Playgroud)
返回空字符串。
相同的命令,如果直接连接(不是通过 SSH)可以正确执行:
b@B ~
$ echo $ANT_HOME
/cygdrive/c/PROGRA~1/apache-ant-1.9.0
Run Code Online (Sandbox Code Playgroud)
后者是可能的,因为相关变量是在“bash_profile”中导出的:
export JAVA_HOME="/cygdrive/c/PROGRA~1/Java/jdk1.7.0_45"
export ANT_HOME="/cygdrive/c/PROGRA~1/apache-ant-1.9.0"
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,这不适用于 SSH 案例。
一些可能有用的附加信息。
主机 B 有 Windows XP + Cygwin。CYGWIN sshd 在 SYSTEM 帐户下运行。JAVA_HOME 和 ANT_HOME 在 Windows 的“系统”环境变量部分定义。
当我运行“$ ssh b@B env”命令时,它不会打印 ANT_HOME 或 JAVA_HOME,但如果我将它们包含在 sshd_config 文件中,它会打印。但即使这样,简单的命令 …