SSH를 통해 액세스할 수 있는 머신에서 프로그램을 실행하고 싶고, SSH를 통해 게이트웨이 머신에도 액세스할 수 있습니다.
대상 컴퓨터에서 mpi 프로그램을 실행하려면 T
일반적인 방법으로 로컬 컴퓨터에서 게이트웨이에 액세스합니다.G
ssh user@Gateway
G
컴퓨터 에 들어가면 다음 과 같이 대상 컴퓨터에서 프로그램을 시작합니다.
ssh Target 'eval $(ssh-agent -s);ssh-add my_key;mpirun --hostfile .hosts program'
이렇게 하면 모든 것이 잘 작동합니다( 전에 필요 ssh-agent
하고 실행한다는 점에 유의 하세요.ssh-add
mpirun
이 문제에 대한 세부정보.)
아래와 같이 게이트웨이에 액세스할 때 두 번째 ssh 명령을 로컬 컴퓨터의 ssh 명령에 직접 전달하고 싶습니다.
ssh user@Gateway "ssh Target 'eval $(ssh-agent -s);ssh-add my_key;mpirun --hostfile .hosts program'"
"
그런데 이게 생각 대로 안 되더라구요 .
추신: ssh-agent-forwarding을 사용할 수 없습니다.
답변1
명령은 $(ssh-agent -s)
큰따옴표로 묶여 있으므로 로컬 컴퓨터에서 실행됩니다. 게이트웨이에서 실행하려는 전체 명령을 작은따옴표 안에 넣어야 합니다. 명령 자체에는 작은따옴표(대상에서 실행되어야 하는 코드를 보호하기 위해)가 포함되어 있으므로 이러한 작은따옴표를 이스케이프해야 합니다 '\''
.
ssh user@Gateway 'ssh Target '\''eval $(ssh-agent -s); ssh-add my_key; mpirun --hostfile .hosts program'\'
로컬 SSH 클라이언트를 구성하여 게이트웨이 단계를 자동화할 수 있습니다. 이것을 당신의 ~/.ssh/config
:
Host Target
User user
ProxyCommand ssh Gateway nc %h %p
nc
예인터넷 고양이. 그런 다음 실행
ssh Target 'eval $(ssh-agent -s);ssh-add my_key;mpirun --hostfile .hosts program'
로컬 컴퓨터에서 직접.
답변2
당신은 탈출했습니다 $
. 그렇지 않으면 $(ssh-agent -s)
게이트웨이 머신 대신 로컬 머신에서 평가가 수행됩니다.
ssh user@Gateway "ssh Target 'eval \$(ssh-agent -s);ssh-add my_key;mpirun --hostfile .hosts program'"
echo를 사용하여 이스케이프된 결과를 확인할 수 있습니다.
$ echo "foo $(echo bar)"
foo bar
$ echo "foo \$(echo bar)"
foo $(echo bar)