キー認証後にSSH認証データを取得する

キー認証後にSSH認証データを取得する

これが完了した後、サーバー側からキー認証で使用されたデータを取得することは可能ですか? たとえば、PAM モジュールから、使用された公開キー、使用されたチャレンジ (成功した場合) を取得します。

Debian 9 で openssh を使用します。

答え1

次の Stack Exchange の記事は興味深いと思います。
アカウントにアクセスするために使用された SSH キーを確認できますか?

ここでの考え方は、 の/etc/ssh/sshd_config値を に設定することでログから情報を取得することです 。LogLevelVERBOSE

特に役に立つスクリプトは F. ハウリの回答/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

関連情報