내가 달성하고 싶은 것은 점프 서버 뒤의 두 서버에서 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
"
command1
stdin이 닫혀서 이상한 오류가 발생하면 <&-
교체 할 수 있습니다.< /dev/null