Bash

記錄 ssh shell 的輸出並保留退出狀態

  • May 15, 2017

我有一些腳本要server-2通過 ssh 在遠端伺服器()上執行server-1,我必須將該輸出寫入名為file.logon的日誌文件中server-1

我正在嘗試這個:sc.sh

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

現在,sc.sh通過 ssh 執行:

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命令後的 if 條件,該條件應根據ssh命令退出程式碼工作?

檢查${PIPESTATUS[0]}對我有用…

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

echo ${PIPESTATUS[*]}列印所有管道命令的退出程式碼。

答案:“如何記錄 ssh shell 的輸出?” 是

  • 使用簡單的重定向 >

例如

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

引用自:https://unix.stackexchange.com/questions/365085