Execute mpirun e ssh-add remotamente na mesma sessão

5

Estou desenvolvendo um programa que está sendo executado em várias máquinas usando MPI.

Eu tenho máquinas no Amazon EC2 onde eu posso iniciar mpirun de um deles (o mestre).

Tudo funciona como espero se eu ssh para a máquina master, depois acione ssh-agent e, em seguida, ssh-add my_rsa_key .

O que eu quero fazer é poder ter um script na minha máquina local onde eu acionar o mpirun no mestre remotamente com ssh , o problema é que eu recebo Permission denied (Public key) porque ssh-add não está recebendo solicitações sobre essa sessão (suponho).

Aqui está um rascunho muito básico do script de implantação que estou tentando agora.

#!/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'

Existe uma maneira de executar mpirun (remotamente) em uma sessão em que ssh-add esteja sendo executado?

    
por 0xFF 29.06.2011 / 17:04

2 respostas

3

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:

  1. 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.

  2. 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.

    
por 29.06.2011 / 18:29
2

Que tal simplificar todo esse problema usando o ssh-agent-forwarding ? Você pode passar credenciais de um local ssh-agent para uso em uma máquina remota, para que você não precise se preocupar com a execução de um novo agente e a adição de chaves.

    
por 29.06.2011 / 23:01

Tags