Angel
Angel

Reputation: 671

Generate private / public SSH key with Python

I just need to create a private/public key pair with Python. I want to get the same result as with the following ssh-keygen command:

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

which generates the following:

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

So far I have the following Python code:

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

output

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

But I also need the public key.

Upvotes: 4

Views: 12169

Answers (2)

President James K. Polk
President James K. Polk

Reputation: 42009

The easiest way is to use the Paramiko library. Install with

pip3 install paramiko

(or "pip install paramiko" if using python2) Consider this short example.

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

Upvotes: 4

Ry-
Ry-

Reputation: 225154

You did this to get the private key:

print crypto.dump_privatekey(crypto.FILETYPE_PEM, k)

Do this to get the public key:

print crypto.dump_publickey(crypto.FILETYPE_PEM, k)

Upvotes: 3

Related Questions