Registra a saída do shell ssh e preserva o status de saída

2

Eu tenho algum script para ser executado no servidor remoto ( server-2 ) através do ssh de server-1 e eu tenho que escrever essa saída em um arquivo de log chamado file.log on server-1 .

Estou tentando isso: sc.sh

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

Agora, executando o sc.sh por meio do 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

Agora, devido ao comando tee -a file.log , ele sempre retornará 0 mesmo que meus comandos no arquivo de script falhem. Como posso escrever no arquivo de log e deve verificar a condição if após o comando ssh , que deve funcionar com base no código de saída dos comandos ssh ?

    
por Ejjagiri Venkatesh 15.05.2017 / 08:00

2 respostas

5

verificando ${PIPESTATUS[0]} funcionou para mim ...

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

echo ${PIPESTATUS[*]} imprime os códigos de saída de todos os comandos do pipeline.

    
por 15.05.2017 / 09:21
2

A resposta para: "como registrar a saída do shell ssh?" é

  • use um redirecionamento simples >

por exemplo.

ssh user@remote_host "command" > local_log_file.txt

ou

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

Se você quiser verificar o resultado do cp cmmand no servidor remoto, sugiro executar a instrução if no host remoto como parte do comando que você envia, imediatamente após executando o comando cp

algo como:

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
    
por 15.05.2017 / 08:16