¿Es posible, desde el lado del servidor, recuperar los datos utilizados en la autenticación de claves una vez completada? Por ejemplo, desde un módulo pam, para obtener la clave pública utilizada, se utilizó el desafío (si tuvo éxito).
Usando openssh en Debian 9.
Respuesta1
Le resultará interesante el siguiente artículo de Stack Exchange:
¿Puedo saber qué clave ssh se utilizó para acceder a una cuenta?
La idea es obtener la información de los registros estableciendo
/etc/ssh/sshd_config
el valor de LogLevel
to VERBOSE
.
Puede que le resulte especialmente útil el script del
respuesta de F. Hauri
donde se crea el script que se agregará al
/etc/bash.bashrc
usuario .bashrc
, que después de iniciar sesión desde SSH creará las siguientes variables ambientales:
set | grep ^SSH
SSH_CLIENT='192.168.1.31 43734 22'
SSH_CONNECTION='192.168.1.31 43734 192.168.1.2 22'
SSH_KEY_USER=user@mydesk
SSH_TTY=/dev/pts/2
El guión en sí se reproduce a continuación, pero recomiendo leer la respuesta original para obtener más información:
ssh_oPwd=$OLDPWD
ssh_oUmask=$(umask)
umask 077
ssh_tempdir=$(mktemp -d /tmp/ssh-id-XXXXXXX)
cd $ssh_tempdir || exit 1
ssh_crtFp=$(
sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log
)
for ((ssh_i=1;ssh_i<=$(wc -l <$HOME/.ssh/authorized_keys);ssh_i++));do
export ssh_line="$(sed -ne ${ssh_i}p <$HOME/.ssh/authorized_keys)"
echo "$ssh_line" >tempKey
export ssh_lFp=($(ssh-keygen -l -f tempKey))
if [ "${ssh_lFp[1]}" == "$ssh_crtFp" ] ;then
export SSH_KEY_USER=${ssh_line##* }
break
fi
done
cd $OLDPWD
OLDPWD=$ssh_oPwd
rm -fR $ssh_tempdir
umask $ssh_oUmask
unset ssh_lFp ssh_line ssh_i ssh_crtFp ssh_tempdir ssh_oUmask ssh_oPwd