46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
# Copyright (c) 2015 Ansible, Inc.
|
|
# All Rights Reserved
|
|
import datetime
|
|
from django.utils.encoding import smart_str
|
|
|
|
from cryptography.hazmat.backends import default_backend
|
|
from cryptography.hazmat.primitives import serialization
|
|
from cryptography.hazmat.primitives.asymmetric import rsa
|
|
from django.conf import settings
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from awx.conf.models import Setting
|
|
|
|
|
|
class Command(BaseCommand):
|
|
"""Generate and store a randomized RSA key for SSH traffic to isolated instances"""
|
|
help = 'Generates and stores a randomized RSA key for SSH traffic to isolated instances'
|
|
|
|
def handle(self, *args, **kwargs):
|
|
if getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', False):
|
|
print(settings.AWX_ISOLATED_PUBLIC_KEY)
|
|
return
|
|
|
|
key = rsa.generate_private_key(
|
|
public_exponent=65537,
|
|
key_size=4096,
|
|
backend=default_backend()
|
|
)
|
|
Setting.objects.create(
|
|
key='AWX_ISOLATED_PRIVATE_KEY',
|
|
value=key.private_bytes(
|
|
encoding=serialization.Encoding.PEM,
|
|
format=serialization.PrivateFormat.TraditionalOpenSSL,
|
|
encryption_algorithm=serialization.NoEncryption()
|
|
)
|
|
).save()
|
|
pemfile = Setting.objects.create(
|
|
key='AWX_ISOLATED_PUBLIC_KEY',
|
|
value=smart_str(key.public_key().public_bytes(
|
|
encoding=serialization.Encoding.OpenSSH,
|
|
format=serialization.PublicFormat.OpenSSH
|
|
)) + " generated-by-awx@%s" % datetime.datetime.utcnow().isoformat()
|
|
)
|
|
pemfile.save()
|
|
print(pemfile.value)
|