server-2
我有一些脚本要通过 ssh在远程服务器()上执行server-1
,我必须将该输出写入名为file.log
on 的日志文件中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