47 lines
1.0 KiB
Python
47 lines
1.0 KiB
Python
from pyinfra.operations import files, server, python
|
|
from pyinfra import host, logger
|
|
import logging
|
|
|
|
|
|
NAME=host.data.SUFFIX
|
|
EMAIL=host.data.EMAIL
|
|
ALGORITHM=host.data.ALGORITHM
|
|
USER=host.data.USER
|
|
|
|
# Ensure the .ssh directory exists
|
|
files.directory(
|
|
name="Ensure .ssh directory exists",
|
|
path=f"/home/{USER}/.ssh",
|
|
present=True,
|
|
mode=700,
|
|
user=USER,
|
|
group=USER,
|
|
)
|
|
|
|
# Generate the SSH keypair
|
|
server.shell(
|
|
name=f"Generate SSH key id_{NAME}",
|
|
commands=[
|
|
f"ssh-keygen -t {ALGORITHM} -f /home/{USER}/.ssh/id_{NAME} -C '{EMAIL}' -N ''"
|
|
]
|
|
)
|
|
|
|
# Print the public key
|
|
result = server.shell(
|
|
name="Print public key",
|
|
commands=[f"cat /home/{USER}/.ssh/id_{NAME}.pub"],
|
|
)
|
|
|
|
def callback():
|
|
# 🔹 Extract and log the key output
|
|
if result.stdout:
|
|
logger.info(f"Public Key for {USER}: {result.stdout.strip()}")
|
|
else:
|
|
logger.warning(f"No public key found for {USER} at /home/{USER}/.ssh/id_{NAME}.pub")
|
|
|
|
python.call(
|
|
name="Log public key",
|
|
function=callback,
|
|
)
|
|
|