Acho que o problema está nesta linha:
ssh M 'exec ssh-agent bash;ssh-add my_rsa_key;mpirun --hostfile .hosts -np 10 sample'
Há pelo menos alguns problemas:
-
a parte
exec ssh-agent
substituirá o shell atual (o shell remoto iniciado por ssh) com [ssh-agent], então o seguinte comandos nunca são executados. -
para [ssh-add] falar com [ssh-agent], alguns ambientes variáveis devem ser definidas, informando a localização do soquete do agente.
Portanto, a maneira usual de iniciar o ssh-agent é através do shell eval
comando:
eval $(ssh-agent -s)
Por isso, altero a última linha do seu script para:
ssh M 'exec $(ssh-agent); ...(keep the rest unchaged)'
Observe que você deve usar as aspas simples '
aqui, caso contrário,
$(...)
será expandido pelo shell executando o script, ou seja, um
O ssh-agent será iniciado em sua máquina local.
Como alternativa, você pode configurar todos os seus hosts EC2 (M e M1 + M2) e seu cliente ssh local para permitir o encaminhamento de agentes e apenas executar o agente localmente. Então você só precisa ter certeza de que a chave que você adiciona localmente é autenticada em cada host remoto.