forked from ParallelSSH/ssh-python
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathkeygen.py
More file actions
33 lines (26 loc) · 1.12 KB
/
keygen.py
File metadata and controls
33 lines (26 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import argparse
import getpass
import socket
import sys
from ssh import key, keytypes
parser = argparse.ArgumentParser(description='keygen.py -- like ssh-keygen(1)')
parser.add_argument('-t', dest='type', help='Key type', default='ed25519', choices=(
'rsa', 'ed25519', 'dss'
))
parser.add_argument('-f', dest='file', help='Output private key file', required=True)
parser.add_argument('-b', dest='bits', type=int, default=2048, help='Number of key bits')
args = parser.parse_args()
key_type = keytypes.key_type_from_name('ssh-' + args.type)
if isinstance(key_type, keytypes.DSSKey):
if args.bits != 1024:
print('dss keys only support 1024 bits in OpenSSH. Setting -b 1024.', file=sys.stderr)
args.bits = 1024
if isinstance(key_type, keytypes.ED25519Key):
args.bits = 0
keypair = key.generate(key_type, args.bits)
keypair.export_privkey_file(args.file)
pubkey = keypair.export_pubkey_base64().decode()
pubkey_openssh_format = ' '.join((str(key_type), pubkey, '%s@%s' % (getpass.getuser(), socket.getfqdn())))
print(pubkey_openssh_format)
with open(args.file + '.pub', 'w') as fd:
print(pubkey_openssh_format, file=fd)