Ist es möglich, vom Server aus die bei der Schlüsselauthentifizierung verwendeten Daten abzurufen, nachdem diese abgeschlossen ist? Beispielsweise kann man aus einem PAM-Modul den verwendeten öffentlichen Schlüssel und die verwendete Challenge (sofern erfolgreich) abrufen.
Verwenden von OpenSSH in Debian 9.
Antwort1
Der folgende Stack Exchange-Artikel wird Sie interessieren:
Kann ich herausfinden, welcher SSH-Schlüssel für den Zugriff auf ein Konto verwendet wurde?
Die Idee besteht darin, die Informationen aus den Protokollen abzurufen, indem
/etc/ssh/sshd_config
der Wert LogLevel
auf gesetzt wird VERBOSE
.
Besonders nützlich könnte für Sie das Skript im
Antwort von F. Hauri/etc/bash.bashrc
wo das Skript erstellt wird, das zu unserem Benutzer hinzugefügt werden soll
.bashrc
und das nach der Anmeldung per SSH die folgenden Umgebungsvariablen erstellt:
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
Das Skript selbst ist unten wiedergegeben, ich empfehle jedoch, für weitere Informationen die Originalantwort zu lesen:
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