2017-08-12 276 views
1

我只需要使用Python创建私钥/公钥对。 我要得到相同的结果为具有以下ssh-keygen命令:使用Python生成私钥/公钥SSH密钥

ssh-keygen -t rsa -b 4096 -C "sample.key" -N "" -f "key" && mv "key" "key.opk" 

产生如下:

key.opk

-----BEGIN RSA PRIVATE KEY----- 
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 
-----END RSA PRIVATE KEY----- 

key.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCiKl/U9UtNQeZbjx2iLkNJrfPiAqBeC1TnWh81FfCF7cRCQy0hrcDFUbNZAp1KNaMl0mbubE247/l1uI4RfgyaHA3ItOXv4tOaEPL0zWMYCrrVgA2SeSohb6orff6TX5KvTg8KvKfXobM/cjx0G3T0LhyBIuy+1wzLEeOOUafOjMtVNrmPLVz3FGInrJC0cl0WiwkR6URqm5Yt0gqwkwBNpggNB8LGmUKWuOlwbF2eUEZMA4Fx8n/5L0b9QrscivMUy18ZVCRhlDTwO3GPeAsbH8aGnC3U2EG1Rdb2BHh1AEFyKsyQJ0ahXS1anDbKS1cGLzo0rJxcKKchM1QpXFOX3yb5tF/h2PyqCyO6eRPNnignt7RjR9BLaEfpbuOnRpj7gNmLjUePqahNpr3bpRtuXk1Qmwx+yWoNGetEcHYO4dx243k3ze5KD2otjAIvI+xhSBFNtTkdNa9vVHfZbkWosvhojpuR1KXqjEwctwAtqcEcLdgWWHJyXxBGVjy2z0B9Z+e8qy7zkhTGUKxHuwdBsMCBVLjfiopQlaGqDq3pYEvv1CJImCtlj0yPGkp+63nF/gtRTR1fI0W7/20x63Oy0zUq0IHP2BNr9ZcIyit2XnbFAVEK0UutBoybK4KWhe48D1ThcV0pq9bmrhfykRgZNAA2UOKEuzjR6TNnDgafHw== sample.key 

到目前为止,我有以下Python代码:

from OpenSSL import crypto 
k = crypto.PKey() 
k.generate_key(crypto.TYPE_RSA, 4096) 
print crypto.dump_privatekey(crypto.FILETYPE_PEM, k) 

输出

-----BEGIN PRIVATE KEY----- 
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 
0LX5Cn0Lua+2YzXi4kWYLoQL6FVQug== 
-----END PRIVATE KEY----- 

但我还需要公钥。

回答

3

你这样做是为了获得私钥:

print crypto.dump_privatekey(crypto.FILETYPE_PEM, k) 

this获得公钥:

print crypto.dump_publickey(crypto.FILETYPE_PEM, k)
+0

这将不会输出openssh格式的公钥。 –

-1

最简单的方法是使用Paramiko library。与

PIP3安装安装的paramiko

(或 “PIP安装的paramiko” 如果使用python2)考虑这个短的例子。

import sys 
import paramiko 

key = paramiko.RSAKey.generate(4096) 
print(key.get_base64()) # print public key 
key.write_private_key(sys.stdout) # print private key