记录 ssh shell 的输出并保留退出状态

记录 ssh shell 的输出并保留退出状态

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命令退出代码起作用?

答案1

检查${PIPESTATUS[0]}对我有用...

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

echo ${PIPESTATUS[*]}打印所有管道命令的退出代码。

答案2

答案:“如何记录 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

相关内容