shell 使用嵌套SSH执行远程命令时的奇怪行为[重复]

ct3nt3jp  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(119)

此问题在此处已有答案

How to have simple and double quotes in a scripted ssh command(1个答案)
How do I pass arbitrary arguments to a command executed over SSH? [duplicate](1个答案)
26天前关闭。
我在使用ssh在远程主机上执行命令时遇到了一个奇怪的问题。假设hostname在hostA上返回hostA,hostname在hostB上返回hostB,依此类推。猜猜下面的命令会返回什么?

ssh -A -t userA@hostA ssh -A -tt userB@hostB "hostname;hostname;hostname"

字符串
我原本以为会是:

hostB
hostB
hostB


但实际结果是:

hostB
Connection to hostB closed.
hostA
hostA


一个更复杂的例子是:

ssh -A -t userA@hostA ssh -A -t userB@hostB ssh -A -tt userC@hostC \
    "hostname \''&&'\' hostname '&&' hostname '&&' hostname && hostname && hostname"


它实际上返回:

hostC
hostC
Connection to hostC closed.
hostB
hostB
Connection to hostB closed.
hostA
hostA
Connection to hostA closed.


我想知道shell或SSH是如何解析或解释上述命令的。有人能一步一步地解释命令是如何执行的吗?

wpcxdonn

wpcxdonn1#

主机A上的shell执行以下命令:

ssh -A -tt userB@hostB hostname;hostname;hostname

字符串
不需要

ssh -A -tt userB@hostB "hostname;hostname;hostname"


因此,只有 firsthostnamessh的参数。分号终止该命令,以便以下hostname命令是ssh的“对等项”,而不是ssh的参数。
将多个命令参数连接到单个命令的过程并不简单,我通常建议您自己传递单个字符串参数。

ssh -A -t userA@hostA 'ssh -A -tt userB@hostB "hostname;hostname;hostname"'

相关问题