Files
a13labs.infra/ansible/roles/cis/templates/etc/ansible/facts.d/sshkeys.fact
T

40 lines
1.8 KiB
Bash

#!/bin/sh
set -u
ssh_keys() {
HOST="$(hostname -s)"
TMPFILE="$(mktemp)"
I=0
{
echo "{ \"keys\": {"
find -L /etc/ssh /home/*/.ssh /root /Users/*/.ssh \( -name '*.pub' -o -name 'authorized_keys*' \) -type f 2>/dev/null |\
while read -r SSHFILE; do
grep -vE '^#|^$' "${SSHFILE}" | while read -r SSHKEY; do
KEYINFO="$(echo "${SSHKEY}" | ssh-keygen -lf -)"
KEYSTAT="$(stat -c "%Y %U %G %u %g %a" "${SSHFILE}")"
KEYFILE="\"file\" : \"${SSHFILE}\""
KEYSIZE="\"size\" : $(echo "${KEYINFO}" | awk '{print $1}')"
KEYHASH="\"hash\" : \"$(echo "${KEYINFO}" | awk '{print $2}')\""
KEYTYPE="\"type\" : \"$(echo "${KEYINFO}" | awk '{print $NF}' | tr -d '()')\""
KEYCOMMENT="\"comment\" : \"$(echo "${KEYINFO}" | awk '{$1=$2=$NF="";print}' | sed -e "s/^ *//" -e "s/ *$//")\""
FILEMODEPOCH="\"modified_epoch\" : $(echo "${KEYSTAT}" | awk '{print $1}')"
FILEMODHUMAN="\"modified_human\" : \"$(stat -c "%y" "${SSHFILE}")\""
FILEOWNERNAME="\"user_name\" : \"$(echo "${KEYSTAT}" | awk '{print $2}')\""
FILEGROUPNAME="\"group_name\" : \"$(echo "${KEYSTAT}" | awk '{print $3}')\""
FILEOWNERID="\"user_id\" : $(echo "${KEYSTAT}" | awk '{print $4}')"
FILEGROUPID="\"group_id\" : $(echo "${KEYSTAT}" | awk '{print $5}')"
FILEPERM="\"permissions\": $(echo "${KEYSTAT}" | awk '{print $6}')"
echo "\"${HOST}_${I}\": { ${KEYFILE}, ${KEYSIZE}, ${KEYHASH}, ${KEYCOMMENT}, ${KEYTYPE}, ${FILEMODEPOCH}, ${FILEMODHUMAN}, ${FILEOWNERNAME}, ${FILEGROUPNAME}, ${FILEOWNERID}, ${FILEGROUPID}, ${FILEPERM} },"
done
I=$((I + 1))
done
echo "} }"
} > "${TMPFILE}"
grep -v '^#' "${TMPFILE}" | tr '\n' ' ' | sed 's/ }, } }/ } } }/g'
rm "${TMPFILE}"
}
ssh_keys