sshpass를 사용하면 유효한 명령을 사용할 때 알 수 없는 이유로 반환 코드(종료 상태)가 달라집니다.

sshpass를 사용하면 유효한 명령을 사용할 때 알 수 없는 이유로 반환 코드(종료 상태)가 달라집니다.

여기에는 몇 가지 일이 일어나고 있지만 궁극적으로 CLish 또는 SSH에서 반환된 종료 코드가 내 작업 흐름을 엉망으로 만들고 있다고 생각합니다.

sshpass를 사용하여 원격 시스템(CLish 쉘)에 연결하려고 합니다. 실행 중인 스크립트는 "exit 0"(로컬 컴퓨터에서 직접 호출할 때 작동함)으로 종료되지만 로컬 셸에 반환된 종료 코드는 "255"입니다. 예, 혼란스러울 수도 있지만 예를 들어보면 도움이 될 것입니다. 나는 문제를 간단한 예로 좁혔다고 생각합니다.

CLish를 실행하는 서버에 연결하고 단일 명령을 사용하여 로컬 컴퓨터에서 bash 셸로 끌어서 놓습니다.

me@local$ sshpass -p 'password' ssh -t [email protected] 'shell'
user@server:~$ exit 0
exit
Connection to 172.16.5.4 closed.

내 컴퓨터로 돌아가서 종료 코드를 확인하세요.

me@local$ echo $?
255

CLish를 사용하여 원격 시스템에 쉘을 수동으로 입력하십시오 sshpass.

me@local$ sshpass -p 'password' ssh [email protected]
CLishPrompt> shell
me@server$ exit
exit
CLishPrompt> exit
Connection to 172.16.5.4 closed.

내 컴퓨터의 종료 코드를 확인하세요.

me@local$ echo $?
0

서버의 파일 시스템에 스크립트를 작성하고 실행하기 위해 리디렉션을 사용하고 있기 때문에 첫 번째 예와 동일한 sshpass 호출에서 "shell" 명령을 실행해야 합니다(모두 한 번의 호출로). 두 번째 예와 같이 종료 코드 "0"을 반환하고 싶습니다. 이 문제에 대한 해결책을 찾지 못했습니다. 종료 코드 "0"이 필요한 이유는 스크립트가 Jenkins-CI "빌드"에서 결과를 반환하고 Jenkins-CI에 종료 코드 255를 허용하도록 지시하는 방법을 모르기 때문입니다. 이것이 bash라면 종료 코드를 직접 확인하고 스크립트의 다음 부분을 계속 진행할 수 있습니다.

이 경우 ssh가 "0"을 반환하도록 하거나 Jenkins에게 "255"가 괜찮다고 알려야 합니다. 여기서 무슨 일이 일어나고 있는지 알고 있거나 제안 사항이 있습니까?

관련 정보