代码之家  ›  专栏  ›  技术社区  ›  Stef

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

  •  8
  • Stef  · 技术社区  · 15 年前

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

    1. 连接到SSH端口。
    2. 验证是否只能进行基于密钥的身份验证。

    ssh )是我最感兴趣的,但其他语言,图书馆或提示也很感激。

    4 回复  |  直到 15 年前
        1
  •  14
  •   Eadwacer    14 年前

    我目前正在自己构建一个,但是,您可以通过使用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).
    
        2
  •  7
  •   Eugene Mayevski 'Callback    15 年前

    RFC 4252 ,它在SSH中定义身份验证,说明如下:

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

    所以你可以发送请求 没有人 身份验证以获取支持的列表。

        3
  •  1
  •   not2qubit    7 年前

    您现在可以使用 nmap 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
    

    另外,有人提出了 similar python3 script .

        4
  •  -1
  •   Nickolay Olshevsky    15 年前

    如果Windows适合您-您也可以尝试一些.NET商业库,它们比OpenSSH源代码更方便:)