在一个 SSH 命令中执行多个操作

在一个 SSH 命令中执行多个操作

我有一个命令,

# 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'
    

相关内容