원격 sshpass 명령의 종료 코드를 로컬로 실행되는 스크립트의 변수에 저장하는 방법

원격 sshpass 명령의 종료 코드를 로컬로 실행되는 스크립트의 변수에 저장하는 방법

나중에 사용하기 위해 원격 sshpass 명령의 종료 코드를 로컬 스크립트의 변수에 어떻게 쓸 수 있습니까?

원격으로 명령을 실행하기 위해 sshpass를 사용하고 있습니다. 인증서 기반 인증이 더 낫다는 것을 알고 있지만 이는 내 시스템이 아니므로 인증서 기반 인증을 설정할 수 없습니다.

내 문제는 원격 명령의 종료 코드를 내 변수 $errm에 캡처할 수 없다는 것입니다.

내 명령은 다음과 같습니다

#!/bin/bash
sshpass -p $pass ssh -o StrictHostkeyChecking=no -t $user@$Hostip 'touch /does/not/exist.txt &>/dev/null errm=$?'

echo $errm

echo $errm실제 경로나 /does/not/exist.txt를 지정해도 아무 것도 표시되지 않습니다. 하지만 유효한 경로를 제공하면 파일이 원격으로 생성되므로 sshpass와 관련된 모든 것이 작동하지만 종료 코드를 캡처할 수 없습니다.

그러나 이렇게 하면 원격 명령이 실행될 때 적어도 내 스크립트가 종료 코드를 표시하지만 앞서 언급한 것처럼 동일한 스크립트에서 추가로 사용하기 위해 변수에 캡처할 수 없습니다.

sshpass -p $pass ssh -o StrictHostkeyChecking=no -t $user@$Hostip 'touch /does/not/exist.txt &>/dev/null && echo $? || echo $?'

문제는 내 스크립트가 로컬에서 실행될 때 원격 시스템에서 발생하는 오류 코드와 관련이 있는 것 같습니다! ?

답변1

나는 스스로 해결책을 찾았습니다.

sshpass -p $passvar ssh -o StrictHostkeyChecking=no -t $uservar@$ItemHostIp 'touch /does/not/exist.txt &>/dev/null'; errm=$?

관련 정보