利用可能なSSH認証タイプをプログラムで検出するにはどうすればよいですか?
-
01-10-2019 - |
質問
ネットワーク上のさまざまなホストをチェックする監視プラグインを書き込み、パスワードまたはインタラクティブなSSH認証が有効になっていないことを確認したいと思います。つまり、次のコードを書く必要があります。
- SSHポートに接続します。
- 利用可能な認証方法を列挙します。
- キーベースの認証のみが可能であることを確認します。
PythonまたはBourne SHコードのいずれかを使用した方法(使用 ssh
)私にとって最も興味深いですが、他の言語、図書館、またはヒントも高く評価されています。
解決
私は現在、自分で1つを構築していますが、SSHに、PreferredAuthenticationsオプションを使用して、サポートされている方法を(STDERRに)強制することができます。これは、選択したGrep/Python/言語で簡単に解析できます。
HostA$ ssh -o PreferredAuthentications=none HostB
Permission denied (publickey,gssapi-with-mic).
HostA$ ssh -o PreferredAuthentications=none HostC
Permission denied (publickey,gssapi-with-mic,password,keyboard-interactive,hostbased).
他のヒント
RFC 4252, 、SSHの認証を定義しています、次のように述べています。
SSH-Arch]で定義されているように、認証方法はその名前で識別されます。 「なし」メソッドは予約されており、サポートされているとおりにリストされてはなりません。ただし、クライアントから送信される場合があります。クライアントが認証なしでアクセスを許可されない限り、サーバーは常にこの要求を拒否する必要があります。その場合、サーバーはこのリクエストを受け入れる必要があります。このリクエストを送信する主な目的は次のとおりです サポートされているメソッドのリストを取得します サーバーから。
そのため、リクエストを送信できます 無し サポートされているもののリストを取得するための認証。ただし、認証自体は、特定の低レベルのアクションが行われた後に発生します(キーエクスチェンジはその1つです)ため、SHスクリプトでSSHプロトコルの一部を作成する必要がある場合があります。
これで使用できます nmap
内蔵NSEスクリプトと呼ばれます ssh-auth-methods これをする:
# nmap -p 22 --script ssh-auth-methods 192.168.1.2
Starting Nmap 7.60 ( https://nmap.org ) at 2017-12-26 00:56 GMT
Nmap scan report for 192.168.1.2
Host is up (0.027s latency).
PORT STATE SERVICE
22/tcp open ssh
| ssh-auth-methods:
| Supported authentication methods:
| publickey
|_ keyboard-interactive
MAC Address: AA:BB:CC:DD:EE:FF (Apple)
Nmap done: 1 IP address (1 host up) scanned in 2.40 seconds
さらに、誰かが作りました 同様のPython3スクリプト.
*nixソリューションが必要な場合は、OpenSSHソースに接続することもできます。あなたに適したWindows -net商業ライブラリを試すこともできますが、それらはOpenSSHソースよりもはるかに便利です:)