Linux

在一個 SSH 命令中執行多項操作

  • February 7, 2018

我有一個命令,

# ssh -t computer.A 'command'

在電腦上執行一個簡單的命令。通過 SSH 遠端執行。

除此之外,我想通過computer.A在computer.B上執行命令。在我的腦海中,它看起來像這樣:

# ssh -t computer.A 'ssh -t computer.B 'shutdown -p now' shutdown -p now'

該命令會先關閉computer.B,然後關閉computer.A,但它只關閉computer.B,而忽略關閉computer.A的命令。

出了什麼問題?

您需要轉義引號並將兩個命令彼此分開。

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'

想像一下在電腦 A 上。您想關閉電腦 B。您如何做到這一點?

你打字,

ssh -t computer.B 'shutdown -p now'

現在您想在您的電腦上執行**該命令(“ssh -t computer.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'

如果您想通過從外部連接到電腦來重複此操作,只需沖洗並重複:

  • 第一階段,轉義所有引號和所有斜杠,so \become\\'become \'。這意味著\'變成\\\'
ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'
  • 第二階段:用引號括起來,添加關閉命令並添加 ssh 指令:
ssh -t mycomputer 'ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'; shutdown -p now'

引用自:https://unix.stackexchange.com/questions/422657