查找用户是否正在使用基于密码或者基于密钥的SSH身份验证

时间:2020-03-21 11:43:37  来源:igfitidea点击:

想象一下这种情况。
我们刚刚在Linux服务器中配置了基于SSH密钥的身份验证。

然后,我们决定完全禁用基于密码的身份验证,并仅对所有用户允许基于密钥的身份验证。
在禁用密码身份验证之前,我们要验证哪些用户仍在使用密码通过SSH访问服务器。
怎么做呢?
好吧,有可能!本简要教程说明了如何查找用户在Linux中使用的是基于密码的SSH还是基于密钥的SSH身份验证。

查找用户是否正在使用基于密码或者基于密钥的SSH身份验证

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

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

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

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

$grep 'password' /var/log/secure

或者,

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

输出示例:

[...]
Jan  8 10:40:36 theitroad sshd[3303]: Accepted password for senthil from 192.168.225.37 port 41990 ssh2
Jan  8 10:40:56 theitroad sshd[3405]: Accepted password for sk from 192.168.225.37 port 41992 ssh2

我们是否在上述输出中注意到“接受的密码...”行?
这意味着用户正在使用密码访问远程系统。
根据上面的输出,用户“ senthil”和“ sk”正在使用ssh密码身份验证来访问远程系统。

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

Jan 8 10:40:56 theitroad 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

输出示例:

Jan  8 10:21:49 theitroad sshd[2135]: Accepted password for senthil from 192.168.225.37 port 41920 ssh2
Jan  8 10:21:57 theitroad sshd[2222]: Accepted password for sk from 192.168.225.37 port 41922 ssh2
Jan  8 10:24:57 theitroad sshd[2360]: Accepted password for senthil from 192.168.225.37 port 41924 ssh2
Jan  8 10:25:04 theitroad sshd[2448]: Accepted password for sk from 192.168.225.37 port 41926 ssh2
Jan  8 10:29:40 theitroad sshd[2663]: Accepted password for senthil from 192.168.225.37 port 41938 ssh2
Jan  8 10:29:55 theitroad sshd[2765]: Accepted password for sk from 192.168.225.37 port 41940 ssh2
Jan  8 10:39:34 theitroad sshd[3064]: Accepted password for senthil from 192.168.225.37 port 41986 ssh2
Jan  8 10:39:55 theitroad sshd[3184]: Accepted password for sk from 192.168.225.37 port 41988 ssh2
Jan  8 10:40:36 theitroad sshd[3303]: Accepted password for senthil from 192.168.225.37 port 41990 ssh2
Jan  8 10:40:56 theitroad 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相关的所有日志(成功或者失败的尝试),请在上述所有命令中将“ password”替换为“ sshd”。

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