SSH 셸의 출력을 기록하고 종료 상태를 보존합니다.

SSH 셸의 출력을 기록하고 종료 상태를 보존합니다.

server-2SSH를 통해 원격 서버()에서 실행하려는 일부 스크립트가 있고 해당 출력을 on이라는 로그 파일 server-1에 작성해야 합니다 .file.logserver-1

나는 이것을 시도하고 있습니다 :sc.sh

echo 'testing'
cp $HOME/dir1/file1 $HOME/dir2

이제 sc.shSSH를 통해 실행하십시오.

sshpass -p 'psswd' ssh username@server-2 "bash -s" < sc.sh | tee -a file.log
if [ $? -eq 0]; then
  echo "successfully executed the script file"
  .
  .
  .
else
  echo "failed copying due to incorrect path"
fi

이제 명령으로 인해 tee -a file.log스크립트 파일의 명령이 실패하더라도 항상 0을 반환합니다. 로그 파일에 쓰는 방법과 명령 종료 코드에 따라 작동 ssh해야 하는 명령 후의 조건을 확인해야 합니까?ssh

답변1

확인이 ${PIPESTATUS[0]}나에게 효과적이었습니다 ...

if [ ${PIPESTATUS[0]} -eq 0 ]; then
  echo "successfull"
fi

echo ${PIPESTATUS[*]}파이프로 연결된 모든 명령의 종료 코드를 인쇄합니다.

답변2

답변: "Ssh 쉘의 출력을 어떻게 기록합니까?" 예

  • 간단한 리디렉션 사용 >

예를 들어

ssh user@remote_host "command" > local_log_file.txt

또는

sshpass -p 'psswd' ssh username@server-2 "echo 'testing'; cp dir1/file1 dir2;" > local_machine_ssh_log.txt

cp원격 서버에서 명령 결과를 확인하려면 다음 을 실행하는 것이 좋습니다.if 문cp명령을 실행한 직후에 보내는 명령의 일부로 원격 호스트에서

그것은 다음과 같습니다:

sshpass -p 'psswd' ssh username@server-2 "echo 'testing'; cp dir1/file1 dir2;if [ $? -eq 0 ]; then   echo "successfully copied"; else   echo "failed copying due to incorrect path"; fi" > local_machine_ssh_log.txt

관련 정보