间接 ssh,单个命令后关闭连接

间接 ssh,单个命令后关闭连接

我尝试通过多个 ssh 执行多个命令,基本上是:

ssh -t 主机1 ssh -t 主机2 ssh -t 主机3 ‘cmd1; cmd2; cmd3’

我想在终端主机(host3)上执行所有命令。但是如果我使用上面这行代码,与 host3 和 host2 的连接会在“cmd1;”之后立即关闭。

例如,如果我对 cmd1、cmd2 和 cmd3 使用主机名,则输出将是

host3
与 host3 的连接已关闭。
与 host2 的连接已关闭。
host1
host1
与 host1 的连接已关闭。

如果我按以下方式使用双引号

ssh -t 主机1 “ssh -t 主机2 ssh -t 主机3 ‘cmd1;cmd2;cmd3’”
或者
ssh -t 主机1 ssh -t 主机2 “ssh -t 主机3 ‘cmd1;cmd2;cmd3’”

我得到输出:

host3
与 host3 的连接已关闭。
host2
host2
与 host2 的连接已关闭。
与 host1 的连接已关闭。

有人能给我解释一下吗?如何让所有命令在 host3 上执行

答案1

所需要的只是大量的引用:

ssh -t host1 'ssh -t host2 "ssh -t host3 '"'"'cmd1; cmd2; cmd3'"'"'"'

我在这里所做的只是采用你的最后一个命令并'在其周围添加内容。但是,还需要相应地调整其他内容。'我添加的任何先前存在于该部分的内容'都需要替换为'"'"'

'用works替换的原因'"'"'是这样的:

  • 第一个'终止引用的字符串。
  • 第一个"开始一个新字符串,引用"
  • 中间的内容'不被 shell 解释,而只是被当作文字处理。
  • 最后"结束引用的字符串"
  • 最后'开始一个新的引用字符串。
  • 这三个字符串由 shell 自动连接起来。

相关内容