如何在 Linux 中查找用户是使用基于密码还是基于密钥的 SSH 身份验证

想象一下这个场景。 你刚刚配置 基于 SSH 密钥的身份验证 在您的 Linux 服务器中。 然后,您决定完全禁用基于密码的身份验证,只允许对所有用户进行基于密钥的身份验证。 在禁用密码验证之前,您想验证哪些用户仍在使用密码通过 SSH 访问服务器。 将如何做到这一点? 嗯,这是可能的! 本简要指南解释了如何确定用户在 Linux 中使用的是基于密码还是基于密钥的 SSH 身份验证。

查找用户是使用基于密码还是基于密钥的 SSH 身份验证

我们可以使用密码或 ssh 密钥来识别用户是否通过 SSH 登录到 Linux 服务器。 它不是 100% 可靠和有保证的方式,但它仍然是一个很好的方法。

首先,检查是否 ~/.ssh/authorized_keys 文件存在。 因为,在基于 SSH 密钥的身份验证方法中,SSH 公钥应该上传到您要通过 SSH 访问的系统。 公钥通常存储在一个名为 ~/.ssh/authorized_keys 在远程系统中。 如果此文件存在,则用户可能正在使用基于密钥的身份验证。

接下来,检查身份验证日志文件以验证用户当前使用哪种身份验证方法访问远程系统。 auth方法登录 "/var/log/secure" 基于 RPM 的系统(例如 CentOS)上的文件, "/var/log/auth.log" 基于 DEB 的系统(例如 Ubuntu)上的文件。

只需使用以下命令在身份验证日志文件中查找密码条目 grep 命令 或您喜欢的任何其他方式。

$ grep 'password' /var/log/secure

或者,

$ grep 'password' /var/log/auth.log

示例输出:

[...] May  8 10:40:36 ostechnix sshd[3303]: Accepted password for senthil from 192.168.225.37 port 41990 ssh2 May  8 10:40:56 ostechnix sshd[3405]: Accepted password for sk from 192.168.225.37 port 41992 ssh2
查找用户是否在 Linux 中使用基于密码或基于密钥的 SSH 身份验证

你注意到线条了吗 “接受密码…” 在上面的输出中? 这意味着用户正在使用密码访问远程系统。 根据上面的输出,用户 “森蒂尔”“sk” 正在使用 ssh 密码身份验证访问远程系统。

如果用户使用基于密钥的身份验证,您可能会看到如下输出:

May 8 10:40:56 ostechnix sshd[3405]: Accepted publickey for sk from 192.168.225.37 port 41992 ssh2

当然,如果日志文件很长,条目数量很多,那就有点困难了。 在这种情况下,请使用 "tail" 命令查看特定数量的日志文件。

例如,以下命令将仅显示日志文件的最后 10 个条目:

$ grep 'password' /var/log/auth.log | tail -n 10

示例输出:

May  8 10:21:49 ostechnix sshd[2135]: Accepted password for senthil from 192.168.225.37 port 41920 ssh2 May  8 10:21:57 ostechnix sshd[2222]: Accepted password for sk from 192.168.225.37 port 41922 ssh2 May  8 10:24:57 ostechnix sshd[2360]: Accepted password for senthil from 192.168.225.37 port 41924 ssh2 May  8 10:25:04 ostechnix sshd[2448]: Accepted password for sk from 192.168.225.37 port 41926 ssh2 May  8 10:29:40 ostechnix sshd[2663]: Accepted password for senthil from 192.168.225.37 port 41938 ssh2 May  8 10:29:55 ostechnix sshd[2765]: Accepted password for sk from 192.168.225.37 port 41940 ssh2 May  8 10:39:34 ostechnix sshd[3064]: Accepted password for senthil from 192.168.225.37 port 41986 ssh2 May  8 10:39:55 ostechnix sshd[3184]: Accepted password for sk from 192.168.225.37 port 41988 ssh2 May  8 10:40:36 ostechnix sshd[3303]: Accepted password for senthil from 192.168.225.37 port 41990 ssh2 May  8 10:40:56 ostechnix sshd[3405]: Accepted password for sk from 192.168.225.37 port 41992 ssh2

你也可以使用 -f 标记以在测试时跟踪日志。

$ grep 'password' /var/log/auth.log | tail -f -n 10

如果要检查整个日志文件以查找 “密码” 逐页条目,使用 "less" 命令:

$ grep 'password' /var/log/auth.log | less

查找所有相关的日志 sshd (成功或失败的尝试),将上述所有命令中的“密码”替换为“sshd”。

$ grep 'sshd' /var/log/auth.log | tail -n 10

其他 SSH 相关指南:

  • 在 Linux 中允许或拒绝对特定用户或组的 SSH 访问
  • 限制每个用户/组/系统的 SSH 登录次数
  • 使用 TCP Wrappers 限制对 Linux 服务器的访问
  • 通过 SSH 在远程 Linux 系统上执行命令
  • 如何在 Linux 中创建 SSH 别名
  • 如何在 Linux 上通过 SSH 进入特定目录
  • SSLH – 为 HTTPS 和 SSH 共享同一个端口
  • ScanSSH – 快速的 SSH 服务器和开放代理扫描器
  • 如何使用 Rsync 通过 SSH 恢复部分传输的文件
  • 如何一次在多个远程系统上运行单个命令
  • DSH – 一次在多台主机上运行 Linux 命令
  • 如何阻止 SSH 会话在 Linux 中断开连接
  • 如何在 FreeBSD 上启用 SSH

希望这可以帮助。

基于密钥的 ssh 身份验证LinuxLinux 基础知识Linux 命令Linux 操作方法基于密码的ssh 身份验证安全ShellSSHSSH 身份验证SSH 提示