Sshサーバーがパスワードを許可するかどうかをテストし、実際にログインを試行せずにすぐに接続を閉じたい。
このようなもの:
allows_password=$(ssh --some-option example.com)
if [ -z "$allows_password" ]; then
echo "Insecure Server Options"
else
echo "Insecure Password Access is not Allowed, Great!"
fi
実際にこれを一度行ったことがありますが、古いスクリプトやドキュメントを見つけることができませんでした。悲しい日。 :-/
私は古いスクリプトを見つけました:
ssh -v -n \
-o Batchmode=yes \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
DOES_NOT_EXIST@localhost 2>&1 | grep password
-o Batchmode=yes
オプションを指定すると、非インタラクティブモードになり、パスワードへのフォールバックが失敗します。
-v
は、認証方法を表示します(特に)。
-n
は、sshがシェル(多くの場合、トンネリングで使用されます)を開かないようにします。この場合、シェルはすぐに終了します(ハニーポットまたはserveo.netのような、認証なしのクライアントを許可するサービスに接続している場合に限ります)。
-o StrictHostKeyChecking=no
および-o UserKnownHostsFile=/dev/null
は、既知のホストファイルに書き込むことなく、ホストを自動的に受け入れます。
2>&1
は、デバッグメッセージ(stderr)をロギングシステム(stdout)に転送して、grep
がその魔法を実行できるようにします
一部のユーザーに対してパスワード認証が有効になっている場合、私が知る限り、すべてのユーザーに対して有効と表示されます(ただし、プロンプトの後に失敗します)。これは、ユーザーがシステムに存在することを明確に識別できないようにするためだと思います。
そして、私がそれを再び失うことがないように: https://coolaj86.com/articles/testing-if-ssh-allows-passwords/