SSH는 프롬프트를 기다리고 종료합니다.

SSH는 프롬프트를 기다리고 종료합니다.

내가 달성하고 싶은 것은 점프 서버 뒤의 두 서버에서 SSH 연결을 테스트하는 것입니다. 요구 사항은 실제로 셸을 로드(프롬프트)한 다음 서버를 종료(연결)하는 것입니다. 처음에는 다음을 시도했습니다.

ssh -A -t [email protected] \
"command1; ssh user1@server1 exit; ssh user2@server2 exit"

프롬프트(셸)를 로드하기 전에 SSH 연결을 연결하고 즉시 종료합니다. 해결 방법을 찾았습니다.

ssh -A -t [email protected] \
"command1; ssh user1@server1 <<EOF
EOF
ssh user2@server2 <<EOF
EOF
"

EOF를 사용하면 실제로 몇 가지 명령이 필요하기 때문에 프롬프트를 기다리고, 프롬프트가 없으므로 종료합니다.

내 목표를 달성하는 더 나은/더 나은 방법이 있습니까?

답변1

라는 대안이 있습니다.ssh/config

.ssh/config라는 파일을 생성하고 다음과 같이 편집합니다.

Host Server-Jump-*
    User username
    IdentityFile ~/.ssh/id_rsa # -- if you want to provide key
    ForwardAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 12

Host Server1 
    Hostname 21.19.6.19
    Port 2222

Host Server2 
    Hostname Server2-IP
    Port 22
    ProxyCommand ssh -W %h:%p Server1 

이 파일을 저장하세요.

이제 다음 명령을 시도해 보세요.

ssh Server2

프록시 명령 부분 설명

-W host:port
             Requests that standard input and output on the client be forwarded to host on port over the secure channel.  Implies -N, -T, ExitOnForwardFailure and ClearAllForwardings.  Works
             with Protocol version 2 only.

`%h` Host name to connect 
`%p` Port name to connect 

답변2

여러 컴퓨터에서 더 많은 사람들이 사용할 것이기 때문에 구성 파일을 사용하고 싶지 않기 때문에(변경할 때마다 모든 것을 업데이트하고 싶지 않음) 다음 솔루션을 생각해 냈습니다.

ssh -A -t user@server1 \
"command1
echo -e "command2" | ssh user1@server2
echo -e "command3" | ssh user2@server3"

이것은 나에게 필요한 정확한 출력을 좋은 형식으로 제공합니다.

답변3

분명히 이것은 완전 자동 연결 종료 프로세스이므로 표준 입력이 필요하지 않습니다. 그렇다면 표준 입력을 닫으면 어떨까요?

<&- ssh -A -t [email protected] "
    command1
    ssh user1@server1
    ssh user2@server2
"

command1stdin이 닫혀서 이상한 오류가 발생하면 <&-교체 할 수 있습니다.< /dev/null

관련 정보