【问题标题】:How can I programmatically detect ssh authentication types available?如何以编程方式检测可用的 ssh 身份验证类型?
【发布时间】:2011-04-04 21:01:36
【问题描述】:

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

  1. 连接到 SSH 端口。
  2. 枚举可用的身份验证方法。
  3. 验证是否只能进行基于密钥的身份验证。

使用 python 或 bourne sh 代码(使用 ssh)的方法对我来说是最有趣的,但其他语言、库或提示也很受欢迎。

【问题讨论】:

    标签: security ssh monitoring openssh


    【解决方案1】:

    RFC 4252,它定义了 SSH 中的身份验证,其内容如下:

    身份验证方法由它们的名称标识,如 [SSH-ARCH]。 "none" 方法是保留的,并且不能被列为 支持的。但是,它可以由客户端发送。服务器必须 总是拒绝这个请求,除非客户端被授予访问权限 没有任何身份验证,在这种情况下,服务器必须接受 这个请求。发送此请求的主要目的是获取 服务器支持的方法列表

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我目前正在自己​​构建一个,但是,您可以使用 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).
        

        【讨论】:

        • 漂亮而简单。谢谢。如果它最终成为开源代码,会对您的代码感兴趣...
        • 不幸的是,这个特定的代码块将无法开源。对不起。这就是为什么我想在停止谈论它之前分享最初的想法。
        【解决方案4】:

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

        # 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

        【讨论】:

          猜你喜欢
          • 2013-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-18
          • 2019-01-02
          • 1970-01-01
          相关资源
          最近更新 更多