如何以编程方式检测可用的ssh身份验证类型?

时间:2010-08-27 15:15:24

标签: security ssh monitoring openssh

我想编写一个监控插件,检查网络中的各种主机,以确保未启用密码或交互式SSH身份验证。也就是说,我需要编写代码:

  1. 连接SSH端口。
  2. 枚举可用的身份验证方法。
  3. 验证是否只能进行基于密钥的身份验证。
  4. 使用python或bourne sh代码(使用ssh)的方法对我来说最有趣,但其他语言,库或提示也很受欢迎。

4 个答案:

答案 0 :(得分:13)

我目前正在构建一个,但是,您可以使用PreferredAuthentications选项强制ssh输出(到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).

答案 1 :(得分:7)

RFC 4252,在SSH中定义身份验证,如下所示:

  

身份验证方法由其名称标识,如中所定义      [SSH-ARCH]。 “none”方法是保留的,不得列为      支持的。但是,它可以由客户端发送。服务器必须      除非要授予客户端访问权限,否则始终拒绝此请求      没有任何身份验证,在这种情况下,服务器必须接受      这个请求。发送此请求的主要目的是来获取      服务器支持的方法列表

因此,您可以发送 none 身份验证请求以获取受支持的身份验证列表。 但是,身份验证本身发生在某些较低级别的操作发生后(密钥交换就是其中之一),因此您可能需要在sh脚本中编写SSH协议的一部分,这可能是一项非常重要的任务。

答案 2 :(得分:0)

您现在可以使用名为ssh-auth-methodsnmap内置NSE脚本执行此操作:

# 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

此外,有人制作了similar python3 script

答案 3 :(得分:-1)

如果您需要* nix解决方案,您还可以加入OpenSSH源。 如果Windows适合您 - 您也可以尝试一些.NET商业库,它们比OpenSSH源更容易:)