金鑰認證後取得SSH認證數據

金鑰認證後取得SSH認證數據

完成此操作後,是否可以從伺服器端檢索金鑰認證中使用的資料?例如,從 pam 模組取得使用的公鑰、使用的質詢(如果成功)。

在 Debian 9 中使用 openssh。

答案1

您會發現以下 Stack Exchange 文章很有趣:
我可以查出使用哪個 ssh 金鑰來存取帳戶嗎?

這裡的想法是透過設定 to/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

相關內容