Возможно ли со стороны сервера получить данные, используемые при аутентификации ключа, после того, как это будет завершено? Например, из модуля pam для получения открытого ключа использовался вызов (если он был успешным).

Использование openssh в Debian 9.

1 ответ1

0

Вы найдете интересную следующую статью о Stack Exchange:
Могу ли я узнать, какой ключ ssh был использован для доступа к учетной записи?

Идея заключается в том, чтобы получить информацию из журналов, установив в /etc/ssh/sshd_config значение LogLevel для VERBOSE .

Вы можете найти особенно полезным сценарий в ответе Ф. Хаури, где создается сценарий, который нужно добавить в /etc/bash.bashrc или .bashrc пользователя, который после входа в систему из SSH создаст следующие переменные среды:

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

Сам скрипт воспроизводится ниже, но я рекомендую прочитать оригинальный ответ для получения дополнительной информации:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .