我尝试通过多个 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 自动连接起来。