나중에 사용하기 위해 원격 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=$?