在几个系统上我有这个 sshd_config
Port 22
Protocol 2
PermitRootLogin no
StrictModes yes
PasswordAuthentication no
ChallengeResponseAuthentication no
MaxStartups 2
AllowUsers john joe
有人能解释一下键盘交互和密码验证之间的区别吗?我该如何测试我的 sshd 服务器?
这些系统可通过互联网使用 SSH 访问(防火墙端口转发)。尽管关闭了密码验证,我仍然看到 sshd 拒绝无效用户和无效密码的系统日志记录 - 显然某些僵尸网络正在尝试暴力破解密码。
如果我尝试通过 ssh 连接,但没有设置公钥,我的会话就会在输入用户名之前关闭,并显示“权限被拒绝(公钥)”消息。因此,我不知道这些密码尝试是如何发生的。
以下是来自 syslog 的一个示例(所有行均以“Oct 12 08:40:49 host sshd[14790]:”为前缀)
Could not reverse map address 203.0.113.1.
User root not allowed because not listed in AllowUsers
input_userauth_request: illegal user root
Failed password for illegal user root from 203.0.113.1 port 35902 ssh2
Received disconnect from 203.0.113.1: 11: Bye Bye
这些无效密码是如何通过的?服务器是否仍然容易受到暴力密码猜测的攻击?
答案1
据我所知,使用 PasswordAuthentication 时,客户端会提示您输入用户名和密码,然后将其发送到服务器。在键盘交互中,客户端会询问您的用户名,将其发送到服务器,然后服务器会以密码提示进行响应,然后通过客户端将其转发给您。
整个过程已经完成,以便能够实施进一步的安全措施,以确保您(用户)实际上以交互方式输入密码,并且不会以某种方式存储然后才输入。
答案2
PasswordAuthentication 只是 KbdInteractiveAuthentication(ssh_config 和 sshd_config 中实际使用的关键字)的一种类型。
KbdInteractiveAuthentication 包含多种方法:S/Key 是另一种方法,PAM 也是。(这是 RFC 规范,有文档记录这里
您可以在 ssh_config 中指定 KbdInteractiveDevices 列表。(如果未指定,则采用服务器列表。由于 sshd_config 中没有此选项,我假设它是一个编译时选项,但我尚未验证这一点。)
我不认为手册页(ssh_配置和sshd_配置)对于理解这里的关系特别有帮助,但是O'Reilly SSH 书籍是一个很好的参考。