我有一个命令,
# ssh -t computer.A 'command'
通过 SSH 远程在计算机上执行简单的命令。
除此之外,我想通过计算机 A 在计算机 B 上执行命令。在我的脑海里它看起来像这样:
# ssh -t computer.A 'ssh -t computer.B 'shutdown -p now' shutdown -p now'
此命令将首先关闭计算机 B,然后关闭计算机 A,但它仅关闭计算机 B,而忽略关闭计算机 A 的命令。
出了什么问题?
答案1
您需要转义引号并将这两个命令彼此分开。
ssh -t computer.A 'ssh -t computer.B \\'shutdown -p now\\'; shutdown -p now'
如果您希望计算机上的第二次关闭仅在第一次成功时才运行,请将 替换;
为&&
。
您还可以像这样交替引用:
ssh -t computer.A 'ssh -t computer.B "shutdown -p now"; shutdown -p now'
答案2
想象一下在计算机 A 上。您想要关闭计算机 B。您如何执行此操作?
你输入,
ssh -t computer.B 'shutdown -p now'
现在你想执行那命令(“ssh -t 计算机.B...”)你的电脑。你需要引用它,但是在命令中已经有两个引号,所以你需要逃脱他们:
ssh -t computer.A 'ssh -t computer.B \'shutdown -p now\''
实际上你想执行两个命令,所以你需要将其添加到外引号内:
ssh -t computer.A 'ssh -t computer.B \'shutdown -p now\'; shutdown -p now'
如果你想迭代通过从外部连接到您的计算机,只需冲洗并重复:
第一阶段,转义所有引号和所有斜杠,所以
\
成为\\
和'
成为\'
。这意味着\'
变成\\\'
:ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'
第二阶段:用引号引起来,添加 shutdown 命令并在前面添加 ssh 指令:
ssh -t mycomputer 'ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'; shutdown -p now'