SSH出力を除いて、見つかったエラーのみを記録します。

SSH出力を除いて、見つかったエラーのみを記録します。
typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "
  $(cat);
  IFERROR=$(checkscript);
  echo "$IFERROR"" > ${SSHTEMPFILE} 2>&1    

この行は... Sshから「User Authorization」メッセージを除外することはできません...操作しようとしましたが、動作しません。

typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "
  $(cat);
  IFERROR=$(checkscript);
  echo "$IFERROR"" | grep -v "AUTHORIZED"  > ${SSHTEMPFILE} 2>&1    

答え1

除外するメッセージはSSHバナーです。これは上に示されているため、stderrスクリプトgrep -vでは機能しません。

stderr次にリダイレクトしてみてください。stdin 今後これgrep。動作する必要があります。私はあなたの命令をよく理解していませんが、次のようになります。

typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "$(cat); IFERROR=$(checkscript); echo "$IFERROR"" 2>&1 | grep -v "AUTHORIZED" > ${SSHTEMPFILE}

PS:これの目的は何ですか$(cat)

答え2

あなたが何をしたいのかわかりませんが、少なくともスクリプトには明らかなバグがあります。あなたは

ssh "$(cat); …"$IFERROR"" | …

このフラグメントは$IFERROR引用符で囲まれず、実行される SSH コマンドを構築するためにローカルシェルによって拡張されます。echo "$IFERROR"リモート側で実行しようとしているため、$ローカルに展開されないように引用符が必要です。

typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "
  $(cat);
  IFERROR=$(checkscript);
  echo \"\$IFERROR\"" > ${SSHTEMPFILE} 2>&1

このcheckscriptコマンドはローカルでも実行されます。リモートで実行するIFERROR=$(checkscript)にはに変更しますIFERROR=\$(checkscript)

checkscript出力を変数に保存する必要はありません。そうすることはできますが、そうすれば人生がより複雑になり、役に立ちません。出力を直接取得します。

typeset -f |
sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "$(cat); checkscript" > ${SSHTEMPFILE} 2>&1

関連情報