无法使用 ssh 获取配置文件变量

无法使用 ssh 获取配置文件变量

无法使用 ssh 检索配置文件变量。

server2 ==> 用户 apptst ==> bash 配置文件有 $APPHOME 变量。

尝试使用 ssh 从 server1 检索值但失败了。

使用以下选项

server1> ssh apptst@server2 'echo $APPHOME'

server1> ssh apptst@server2 echo '$APPHOME'

server1> ssh apptst@server2 echo "$APPHOME"

server1> ssh apptst@server2 "echo $APPHOME"

当尝试

server1> ssh apptst@server2 ls -ld $APPHOME

它工作正常。

有什么建议缺少什么以及如何从 server2 获取变量?

答案1

该命令应该可以工作:

 server1> ssh apptst@server2 'bash -l -c "echo \$APPHOME"'
  • 您需要使用'引号将完整的命令作为一个参数传递给 ssh;这也会阻止 server1 上的 shell$APPHOME自行扩展
  • bash -l启动登录 shell,读取配置文件,其中 $APPHOME 被定义(如下@chepner 指出在他的回答中,这不是 sshd 调用时的默认设置)
  • -c执行下一个参数,再次用引号引起来,表示执行完整的 echo 命令。
  • 逃避\$是必要的,因为否则父(非登录)shellsshd 调用的(以及直接从 init (*) 继承环境的)确实会扩展$APPHOME。但这还为时过早,因为$APPHOME只定义了登录贝壳(通过~/.profile)。[在 OP 评论后添加了这一点]

(*) 如果我错了,请纠正我。

答案2

问题是,当你指定通过运行的确切命令时ssh,遥控器sshd不会不是启动登录 shell 来执行它,但启动常规的非交互式 shell。在这种情况下,.bash_profile不会执行,因此APPHOME未定义。

在写这篇文章的时候,mph 发布了正确的解决方案强制处理登录 shell .bash_profile

相关内容