1つのSSHコマンドで複数のタスクを実行する

1つの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

引用符をエスケープし、これら2つのコマンドを互いに分離する必要があります。

ssh -t computer.A 'ssh -t computer.B \\'shutdown -p now\\'; shutdown -p now'

最初のシャットダウンが成功した場合にのみコンピュータの2番目のシャットダウンを実行するには、;に置き換えます&&

次のように代替参照を使用することもできます。

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 computer.B...")あなたのコンピュータ。引用する必要がありますが、コマンドにはすでに2つの引用があります。脱出するそれらを:

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

実際には2つのコマンドを実行したいので、二重引用符で囲む必要があります。

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:引用符で囲み、shutdownコマンドを追加し、その前にsshコマンドを追加します。

    ssh -t mycomputer 'ssh -t computer.A \'ssh -t computer.B \\\'shutdown -p now\\\'; shutdown -p now\'; shutdown -p now'
    

関連情報