【问题标题】:SSH inside SSH heredoc [duplicate]SSH heredoc中的SSH [重复]
【发布时间】:2023-03-24 13:59:01
【问题描述】:

我正在编写一个脚本,该脚本通过 SSH 登录到远程服务器并执行一些命令,其中一个通过 SSH 登录到第二个远程服务器(我无法在本地访问)并执行命令。在那个嵌套的 SSH 命令之后,我原来的 SSH 命令终止并且没有完成heredoc 的其余部分。我稍微简化了脚本,但得到了相同的结果:

#!/bin/bash
ssh server1 <<'EOF'
  echo one $HOSTNAME
  ssh server2 'echo two $HOSTNAME'    
  echo three $HOSTNAME
EOF

我的输出如下所示:

one server1
two server2

我希望在我的输出末尾看到three server1,但它没有发生。我能够将它们分成两个 SSH 命令并得到我需要的东西,但我很好奇为什么会发生这种情况,是否有可能一次性得到我所期望的?

【问题讨论】:

    标签: bash ssh heredoc


    【解决方案1】:

    替换

    ssh server2
    

    ssh -n server2
    

    防止 ssh 从标准输入读取。

    【讨论】:

    • 那行得通。我在 ssh 手册页中看到 -n 从 /dev/null 重定向标准输入,但我不确定这与后面的命令有何关系。
    • 我试图解释。 ssh server2 在您的示例中获取两个命令。第一个命令是echo two $HOSTNAME,第二个命令(echo three $HOSTNAME)通过标准输入。第二个被忽略。如果您删除第一个命令,ssh 会从标准输入执行您的第二个命令(将 ssh server2 'echo two $HOSTNAME' 替换为 ssh server2)。
    猜你喜欢
    • 2020-04-24
    • 2016-08-04
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2018-12-17
    • 2012-11-19
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多