Obtenga datos de autenticación SSH después de la autenticación de clave

Obtenga datos de autenticación SSH después de la autenticación de clave

¿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_configel valor de LogLevelto 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.bashrcusuario .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

información relacionada