SSHセッション中の複数のコマンド

SSHセッション中の複数のコマンド

masterリモートコンピュータとSSHセッションを確立し、各リモートコンピュータmasterで別の内部SSHセッションを確立し、次に2つのコマンドを実行するローカルコンピュータがあります。slavesつまり、特定のディレクトリを削除して再作成します。

ローカルマシンにはマスター用のパスワードなしのSSHがあり、マスターにはスレーブ用のパスワードなしのSSHがあります。また、.ssh/configlocal / masterのすべてのホスト名が知られており、スレーブのホスト名はslaves.txtローカルであり、そこから読み取られます。

だから私がしたことは次のとおりです。

username="ubuntu"
masterHostname="myMaster"
while read line
do

    #Remove previous folders and create new ones.
    ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition""
    ssh -n $username@$masterHostname "ssh -t -t $username@$line "mkdir -p EC2_WORKSPACE/$project Input Output Partition""


    #Update changed files...
    ssh -n $username@$masterHostname "ssh -t -t $username@$line "rsync --delete -avzh /EC2_NFS/$project/* EC2_WORKSPACE/$project""

done < slaves.txt 

クラスターは Amazon EC2 にあり、繰り返しごとに 6 つの SSH セッションが作成され、かなりの遅延が発生することが確認されました。 SSH接続を減らすために、これら3つのコマンドを1に組み合わせたいと思います。だから最初の2つのコマンドを組み合わせてみました。

ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""

しかし、期待どおりに動作しません。最初のエントリ(rm -rf Input Output Partition)を実行してからセッションを終了し、続行します。どうすればいいですか?

ベストアンサー1

これを考慮して&&論理演算子だと思います。もちろんいいえ「このコマンドも実行」、「他のコマンドが成功すればこのコマンドを実行」を意味します。

つまり、rmコマンドが失敗した場合(3つのディレクトリのうちの1つが存在しない場合に発生)、mkdir実行されません。これは望ましい動作のようには聞こえません。これらのディレクトリが存在しない場合は、ディレクトリを作成することをお勧めします。

使用;

セミコロンは;コマンドを区切るために使用されます。コマンドは順次実行され、次のコマンドに進む前に各コマンドを待ちますが、成功や失敗は互いに影響しません。

内部引用符をエスケープしてください

他の引用符内の引用符はエスケープする必要があります。それ以外の場合は、追加のエンドポイントと始点が作成されます。あなたの命令:

ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""

になる:

ssh -n $username@$masterHostname "ssh -t -t $username@$line \"rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input OutputPartition\""

エスケープされた引用符がないため、現在のコマンドは次のように実行する必要があります。

ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition

成功した場合:

mkdir -p EC2_WORKSPACE/$project Input Output Partition"" # runs on your local machine

構文ハイライトはコマンド全体を赤で表示します。これは、コマンド全体がsshに渡された文字列であることを意味します。ローカルコンピュータを確認してください。おそらくディレクトリInput OutputPartitionそれを実行する場所があります。

おすすめ記事