これは、BatchModeオプションと出力の「解析」を組み合わせて行うことができます。(ssh何らかの理由で接続に失敗した場合は常に255を返すため、戻りコードを使用して失敗のタイプを区別することはできません。)
とBatchModeに、パスワードプロンプトまたは他の相互作用が試行されませんので、パスワードを必要とする接続は失敗します。(私もConnectTimeoutあなたのニーズに合わせて調整する必要があります。そして、本当に悪いファイル名を選びました。)
#! /bin/bash
rm good no_auth other
while read ip host ; do
status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
case $status in
ok) echo $ip $host >> good ;;
*"Permission denied"*) echo $ip $host $status >> no_auth ;;
*) echo $ip $host $status >> other ;;
esac
done < list.txt
より詳細な分類が必要な場合は、他のタイプのエラー(サーバー公開キーの欠落など)を検出できます。単一のソートされたファイルで結果が必要な場合はcat、さまざまな出力ファイルのみを適切にまとめます。