SSH シェルの出力を記録し、終了状態を保存します。

SSH シェルの出力を記録し、終了状態を保存します。

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

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

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

sc.shSSHを介して実行します。

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

答え1

確認は${PIPESTATUS[0]}私にとって効果的でした...

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

echo ${PIPESTATUS[*]}パイプで接続されたすべてのコマンドの終了コードを印刷します。

答え2

回答:「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リモートサーバーでコマンドの結果を確認するには、次のコマンドを実行することをお勧めします。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

関連情報