此问题在此处已有答案:
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是如何解析或解释上述命令的。有人能一步一步地解释命令是如何执行的吗?
1条答案
按热度按时间wpcxdonn1#
主机A上的shell执行以下命令:
字符串
不需要
型
因此,只有 first
hostname
是ssh
的参数。分号终止该命令,以便以下hostname
命令是ssh
的“对等项”,而不是ssh
的参数。将多个命令参数连接到单个命令的过程并不简单,我通常建议您自己传递单个字符串参数。
型