同じセッションでmpirunとssh-addをリモートで実行する

同じセッションでmpirunとssh-addをリモートで実行する

私はMPIを使用して複数のコンピュータで実行されるプログラムを開発しています。

Amazon EC2 から起動できるマシンがあります。マイレンそのうちの一つ(マスター)から。

ホストにsshを接続してトリガーすると、ssh-agentすべてが期待どおりに機能しますssh-add my_rsa_key

私がしたいのは、mpirunメインサーバーでリモートでトリガーできるスクリプトをローカルコンピュータに置くことsshです。問題は、私が経験している問題は、要求がそのセッションを通じて受信されないPermission denied (Public key)ためです。ssh-add)。

以下は、私が今試している展開スクリプトの非常に基本的なドラフトです。

#!/bin/bash

MACHINES_LIST="M1
M2"     

echo $MACHINES_LIST | tr " " "\n" | while read fn; do
    echo "$fn"

    echo "deploying and compiling to : $fn ..."
    scp -i key "sample.c" user@$fn:/home/user
    ssh $fn 'mpicc sample.c -o sample' &

done

echo "uploading lists of hosts to master M"
scp -i key .hosts user@M:/home/user

echo "starting mpirun on master M"

##### Here mpirun needs to execute after ssh-add
ssh M 'exec ssh-agent bash;ssh-add my_rsa_key;mpirun --hostfile .hosts -np 10 sample'

実行中のセッションmpirun内で(リモートで)これを行う方法はありますか?ssh-add

ベストアンサー1

問題は次の行にあると思います。

ssh M 'exec ssh-agent bash;ssh-add my_rsa_key;mpirun --hostfile .hosts -np 10 sample'

少なくとも次のような問題があります。

  1. このexec ssh-agentセクションでは、現在のシェル(sshで始まるリモートシェル)を[ssh-agent]に置き換えるため、次のコマンドは実行されません。

  2. [ssh-add]が[ssh-agent]と通信するには、エージェントにソケットの場所を知らせるいくつかの環境変数を定義する必要があります。

したがって、ssh-agentを起動する一般的な方法は、シェルeval コマンドを使用することです。

eval $(ssh-agent -s)

したがって、スクリプトの最後の行を次のように変更します。

ssh M 'exec $(ssh-agent); ...(keep the rest unchaged)'

'ここでは一重引用符を使用する必要があります。それ以外の場合は、$(...)スクリプトを実行するシェルによって拡張されます。つまり、SSH エージェントがローカルシステムで起動されます。

または、エージェントの配信を許可し、エージェントをローカルで実行するようにすべてのEC2ホスト(MおよびM1 + M2)とローカルSSHクライアントを設定できます。次に、ローカルに追加したキーが各リモートホストで認証されていることを確認するだけです。

おすすめ記事