SSH 里面的 SSH heredoc

SSH inside SSH heredoc

我正在编写一个脚本,通过 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 命令并获得我需要的东西,但我很好奇为什么会这样,是否有可能一次获得我期望的东西?

替换

ssh server2

ssh -n server2

防止 ssh 从 stdin 读取。