【问题标题】:Paramiko keyboard-interactive multi-factor authentication with multiple consequential prompts具有多个相应提示的 Paramiko 键盘交互式多因素身份验证
【发布时间】:2022-06-18 01:15:32
【问题描述】:

这是与远程 Linux 服务器的交互:

Using username "XXXXXX".
Keyboard-interactive authentication prompts from server:
| Password: xxxxxxxxx
| * Two Factor Auth *
| [Available mechanisms]
|  1 - Email... @company.com
|  2 - Security Question
| Please select a mechanism [1]: 2
| Answer security question 'my village of birth': xxxxxxx
End of keyboard-interactive prompts from server
Last login: Wed May 25 13:43:04 2022 from 10.xxx.xx.xx

谁能指导我如何使用 Paramiko 使用实际的 code-sn-ps 处理这个问题?

【问题讨论】:

    标签: python ssh paramiko multi-factor-authentication


    【解决方案1】:

    目前尚不清楚这些提示是分开的,还是前两个提示是一步合并的。以下假设所有都是独立的(每个handler 调用中的fields 中的一个元素)。如果不是,代码需要调整。

    username = "username"
    
    transport = paramiko.Transport('example.com') 
    transport.connect(username=username)
    
    def handler(title, instructions, fields):
        if len(fields) > 1:
            raise SSHException("Expecting one field only.")
        if "Password" in fields[0][0]:
            return ["password"]
        elif "Please select a mechanism" in fields[0][0]:
            return ["2"]
        elif "Answer security question" in fields[0][0]:
            return ["answer"]
        else:
            raise SSHException("Unexpected prompt")
    
    transport.auth_interactive(username, handler)
    

    请注意,上面的代码使用Transport,所以它默认绕过主机密钥验证。使用Transport.connecthostkey 参数来纠正这个问题。

    【讨论】:

    • 对此有何反馈?
    • 我只尝试了一个 if 来发送“密码”。它出错了,所以我也打印出了服务器响应:``` File "C:\Users\XXXXXX\AppData\Local\Programs\Python\Python388-64\lib\site-packages\paramiko\auth_handler.py" ,第 675 行,在 _parse_userauth_info_request m.add_int(len(response_list)) TypeError: object of type 'NoneType' has no len() Server Response: [('Password: ', False)] ```
    • 请将您尝试过的完整代码附加到您的问题中。并添加完整的回溯和 Paramiko 日志文件。还要在您的代码中添加大量日志记录并发布您得到的内容。
    • 我不明白你的if response_list==None: response_list='' 修复。它是干什么用的?您的处理程序永远不会返回 None。什么时候发生? + “我如何参数化我发送的响应?” 到底是什么意思?
    • 在上面更新了为什么需要它。我想知道return ["village"] 是否是发送village 是变量的正确方法
    猜你喜欢
    • 2017-10-09
    • 2017-07-20
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多