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