원격 호스트에 여러 스크립트가 있으며 아래와 같이 ssh를 사용하여 로컬 호스트에서 이러한 스크립트를 트리거합니다.
ssh remuser@remhost sh /web/bin/stop.sh
이번 주말에 OS 패치 이벤트가 있었는데 위의 ssh 명령이 반환되지 않고 정지되거나 입력을 기다리는 것처럼 느껴집니다.
운영 체제에 어떤 패치가 적용되었는지에 대한 자세한 정보를 얻는 것은 어려울 수 있습니다.
stop.sh의 세부 사항은 다음과 같습니다.
cat stop.sh
exec /usr/bin/java -jar /web/service.jar -DLOG_PATH=/web/logs --server.address=10.23.41.211 --server.port=10500 --spring.profiles.active=dev >> /web/logs/boot.log
exit 0;
먼저 이 포럼의 솔루션을 시도했지만 반환되지 않았습니다.
ssh remuser@remhost 'sh /web/bin/stop.sh my.jar dev &> /dev/null < /dev/null'
정지되어 반환되지 않을 때의 디버그 출력 ssh -vv
은 다음과 같습니다.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
debug2: channel 0: rcvd eow
debug2: channel 0: chan_shutdown_read (i0 o0 sock -1 wfd 4 efd 6 [write])
debug2: channel 0: input open -> closed
그런 다음 다음을 시도했고 ssh가 반환을 시작했지만 원격 호스트에서 스크립트를 실행할 수 없습니다.
ssh -fN remuser@remhost sh /web/bin/stop.sh my.jar dev
참고: ssh remuser@remhost id
반환되고 정상적으로 작동합니다. 다른 스크립트도 잘 작동합니다.
문제는 호출자의 호스트 <or <<
에 제어권을 반환하는 스크립트에만 있습니다 .> or >>
뭔가 제안해주실 수 있나요?
참고: 스크립트를 디버깅할 이유가 없습니다. 모든 스크립트가 다르고 일부는 매우 간단하기 때문에 문제의 원인은 아닙니다.
답변1
다음은 문제를 해결하는 데 도움이 되었으며 이제 대상 호스트에서 스크립트가 실행될 때 제어가 다시 이루어졌습니다.
ssh -f -n remuser@remhost 'sh -c /web/bin/stop.sh my.jar dev'