web-dev-qa-db-ja.com

ssh Shellの出力をログに記録し、終了ステータスを保持します

server-2からsshを介してリモートサーバー(server-1)で実行するスクリプトがあり、その出力をfile.logserver-1という名前のログファイルに書き込む必要があります。

私はこれを試しています:sc.sh

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

ここで、sshを介してsc.shを実行します。

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コマンドの後のif条件を確認する必要がありますか?

2

チェック${PIPESTATUS[0]}うまくいきました...

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

echo ${PIPESTATUS[*]}すべてのパイプラインコマンドの終了コードを出力します。

5

答え:「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 cmmandの結果を確認する場合は、送信したコマンドの一部として、直後にリモートホストでif statementを実行することをお勧めします。 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
2
Yaron