Sil*_*ver 6 linux unix ssh cygwin
假设我有两个主机: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 文件中,它会打印。但即使这样,简单的命令 ssh b@B 'echo $ANT_HOME' 也不能像我预期的那样工作。
请给我一个提示,需要做什么才能通过 SSH 运行命令。
小智 3
从我的服务器的手册页:
您需要声明环境变量并允许它们位于远程服务器位置/etc/ssh/sshd_config,方法是启用属性 PermitUserEnvironment asPermitUserEnvironment yes并在 ~/.ssh/environment 中设置环境变量。