簡體   English   中英

Python Paramiko - 確定可用的密碼和密鑰交換算法

[英]Python Paramiko - Determine what ciphers and key-exchange algorithms are available

我有一個使用 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')

這與可用的相同嗎? 如果沒有,是否有任何方法可以通過編程確定可用的內容?

Transport.get_security_options()返回的SecurityOptions是:

包含 ssh 傳輸安全首選項的簡單對象。 這些是可接受的密碼、摘要、密鑰類型和密鑰交換算法的元組,按優先順序列出。

因此,它列出了 Paramiko 庫支持的密碼和 kex 算法(或您已配置/允許的子集)。

這是,你(的paramiko)將用於連接使可用的東西。

最后實際使用的是服務器也支持的最優選的密碼/kex 算法(在您的條件下可用)。


要獲取支持的算法列表,無需連接,您可以使用:

import paramiko
import socket

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM