SSH를 사용하여 원격 호스트에서 스크립트를 실행하면 반환되지 않습니다.

SSH를 사용하여 원격 호스트에서 스크립트를 실행하면 반환되지 않습니다.

원격 호스트에 여러 스크립트가 있으며 아래와 같이 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'

관련 정보