原文:http://jianshu.io/p/7Mm9Wk


今天使用paramiko解析DSA密钥时出现如下ERROR:

... ...paramiko.SSHException: Unknown private key cipher "AES-128-CBC"

DSA密钥内容如下:

-----BEGIN DSA PRIVATE KEY-----Proc-Type: 4,ENCRYPTEDDEK-Info: AES-128-CBC,381624AF862F1717C46EF898D9E1FA92... ...OCGYNLsO68FToi8qJEP1DI9Jvk6tpU3y4ebBqSZnX7jr1M5+Hj5rfMqv7+kp3T4R314ae9Ism9AXLIK2miTAcvbexZpbcesadqvo69DMsfhSmKKJYABK3eRYaDlUwkzN... ...-----END DSA PRIVATE KEY-----

使用ssh-keygen -t rsa测试没有问题,后来得知之前的DSA密钥时使用Secure CRT生成的,查了相关AES算法加密,发现paramiko默认并不支持AES算法,所以出现之前的Unknown Error错误。后来借助Google找到了相关的答案,Unknown private key cipher AES-128-CBC ,顺便记录下。

解决方法需要修改paramiko代码,打开/usr/lib/pythonX.X/site-packages/paramiko/pkey.py修改如下:

from Crypto.Cipher import DES3, AES
 _CIPHER_TABLE = {
    'AES-128-CBC': { 'cipher': AES, 'keysize': 16, 'blocksize': 16, 'mode': AES.MODE_CBC },
    'DES-EDE3-CBC': { 'cipher': DES3, 'keysize': 24, 'blocksize': 8, 'mode': DES3.MODE_CBC }
    }

                                         

以上修改,保存之后退出即可。