奇妙な問題があります。Computer A
わかりますComputer B
。Computer B
わかりますが、Computer C
わかりComputer A
ます。いいえ望むよりComputer C
。
A
私はそれに対して任意のコマンドを呼び出すことができるbashスクリプトを作成したいのですが、C
二重引用符が機能しないようです。アイデアは次のとおりです。
AMB_CMD='source eniron.dat; cd path/to/code/; make clean all'
ssh -t username@ComputerB "ssh -t username@ComputerC "$AMB_CMD""
B
何を実行するかを解決すると、次の問題が解決されると思います。
AMB_CMD='source eniron.dat; cd path/to/code/; make clean all'
B_CMD=ssh -t username@ComputerC "$AMB_CMD"
ssh -t username@ComputerB "$B_CMD"
しかし、まだ問題があります。
ベストアンサー1
私が知っている限り、実際のコマンドを引用する必要はありません。
ssh username@ComputerB ssh username@ComputerC make clean all
または、
ssh -J username@ComputerB username@ComputerC make clean all
ComputerB
これは、接続するジャンプホストとして使用されますComputerC
。
OpenSSH 7.3+では、設定オプションを使用して次のProxyJump
場所でジャンプホストを設定できます~/.ssh/config
。
Host ComputerC
User username
ProxyJump username@ComputerB
...それで、コマンドは次のように減ります。
ssh ComputerC make clean all
make
問題の実際の構成によっては(質問にエラーメッセージが記載されていない)、間違ったディレクトリで実行することに関連する可能性があります。cd
実行する前に正しいディレクトリに入るには、ユーティリティmake
の-C
オプションを使用してください。
ssh username@ComputerC make -C path/to/build/dir clean all
また、実際のコマンドを変数に保存するには、単一の文字列ではなくbash
配列を使用します。
cmd=( make -C "path/to/build/dir" clean all )
ssh ... "${cmd[@]}"