동일한 세션에서 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 클라이언트를 구성할 수 있습니다. 그런 다음 로컬로 추가한 키가 각 원격 호스트에서 인증되었는지 확인하기만 하면 됩니다.

답변2

다음을 사용하여 전체 문제를 단순화하는 방법SSH 에이전트 전달대신에? 원격 시스템에서 사용하기 위해 로컬에서 자격 증명을 전달할 수 있으므로 ssh-agent새 에이전트를 실행하고 여기에 키를 추가하는 것에 대해 걱정할 필요가 없습니다.

관련 정보