我知道在使用密钥代理中存储的密钥时可以通过这种方式找出使用哪个密钥进行身份验证:
ssh-add -L 2>/dev/null | awk '{print $1}' | while read identity; do grep -v '^#' ~/.ssh/authorized_keys | grep "${identity}" ; done
逐行列出代理的身份,提取密钥并在authorized_keys
文件中查找
当客户端不使用密钥代理时,将不会列出任何密钥ssh-add -L
。
还有其他方法可以识别公钥吗?请注意,使用SetEnv
或作为关键选项传递或设置自定义“用户环境”变量environment="VAR=VALUE"
是不可能的(允许)。
答案1
sshd 记录用户身份验证方式的唯一位置是在系统日志中。此信息不可用于已登录的会话。有关连接来源的唯一标识信息,可在环境是客户端上的 IP 地址和端口,位于变量SSH_CLIENT
和中SSH_CONNECTION
。
您可以在中添加指令~/.ssh/authorized_keys
如果用户使用特定密钥登录,则设置环境变量:
environment="SSH_KEY=foo" ssh-rsa AAAA…
如果用户没有使用密钥登录,那么您无法知道他们是如何登录的(密码、.shosts
Kerberos 等),除非查看系统日志(只有系统管理员可以这样做)。
如果您的系统管理员不允许您修改该authorized_keys
文件,您将需要与他们一起确定如何执行您想做的任何操作。请务必向他们解释您需要了解哪些信息以及原因。
请注意,您对代理所做的操作并不是识别连接来源的可靠方法,并且不会告诉您有关用户如何登录的任何信息。如果用户没有转发其代理,或者如果他们他们的代理中没有钥匙。您可能会获得多个密钥,并且用户没有特殊原因使用其中一个密钥来登录(他们可以使用密码、其他密钥或任何其他方法)。我不建议用这些信息做任何事情,它太不可靠了。