【问题标题】:Python Paramiko - Determine what ciphers and key-exchange algorithms are availablePython Paramiko - 确定可用的密码和密钥交换算法
【发布时间】:2015-07-08 16:32:11
【问题描述】:

我有一个使用 Paramiko 库用 Python 编写的自动化 SFTP 程序。如果我建立连接,我可以显示传输使用的密码和密钥交换算法。但是,我不确定这与可用的算法和密码是否相同。

例子:

>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.load_system_host_keys()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect("myhost.example.com", 22, username="xyzzy")
>>> t = ssh.get_transport()
>>> so = t.get_security_options()
>>> so.kex
('diffie-hellman-group14-sha1', 'diffie-hellman-group-exchange-sha1', 'diffie-hellman-group1-sha1')
>>> so.ciphers
('aes128-ctr', 'aes256-ctr', 'aes128-cbc', 'blowfish-cbc', 'aes256-cbc', '3des-cbc', 'arcfour128', 'arcfour256')

这与 available 是一样的吗?如果没有,有没有办法以编程方式确定可用的内容?

【问题讨论】:

    标签: python encryption ssh paramiko


    【解决方案1】:

    Transport.get_security_options() 返回的SecurityOptions class 是:

    包含 ssh 传输的安全首选项的简单对象。 这些是可接受的密码、摘要、密钥类型和密钥的元组 交换算法,按优先顺序列出。

    因此它列出了 Paramiko 库支持的密码和 kex 算法(或您已配置/允许的子集)。

    就是,您(和 Paramiko)正在使 可用于连接

    最终使用的是服务器也支持(可用)的最优选的密码/kex算法。


    要获取支持的算法列表,无需连接,您可以使用:

    import paramiko
    import socket
    
    opts = paramiko.transport.Transport(socket.socket()).get_security_options()
    print(opts.ciphers)
    print(opts.kex)
    

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2021-04-26
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多