SSH还在用密码登录,服务器被暴力破解只是时间问题

来源:互联网 时间:2026-10-10

把一台服务器挂上公网,快的话几个小时之内,日志里就会出现第一波尝试登录的记录。它们来自全世界各种自动化扫描器,拿着常见的用户名和弱密码一遍遍试,一天下来几万次是常态,而且不需要有人盯着,机器自己会跑。你的服务器能不能扛住,很大程度上取决于一件事:它到底允不允许用密码登录。

OpenSSH的默认配置是允许密码认证的。也就是说,只要端口能从外面连上,任何人都可以拿猜出来的密码试着登进来,不需要任何密钥。这不是某个发行版的问题,而是OpenSSH本身为兼容性保留的出厂设置——它优先保证你一定能连上,把安全性交给使用者自己去收紧。问题在于,绝大多数人装完服务器就没再动过这个设置。默认值是给最广泛的场景准备的,不是给你的服务器准备的,这句话值得记住。

密码认证之所以危险,不是因为它容易被某个天才一时破解,而是因为它可以被无限次试。机器不怕枯燥,一秒钟能试很多个组合,而弱密码和常见密码在字典里就排在最前面。真正被拦下来的那些,往往不是密码本身够强,而是你恰好装了拦截工具,或者把端口改成了一个不常见的数字——这些措施都有用,但它们治的是症状,攻击面还在那里。真正省事的做法,是让密码这条路从一开始就不成立。

相对彻底的改法是换成密钥认证。原理是非对称加密:服务器上只留公钥,私钥始终在你自己手里,登录时用私钥做一次签名,服务器验签通过就放行。私钥不出你的机器,网络上传输的是签名而不是可复制的口令,猜密码这条路就直接被堵死了。生成一对密钥、把公钥写到服务器的authorized_keys里,这套流程OpenSSH原生就支持,不需要装任何额外的东西。一次配好之后,日常登录不再需要记密码,反而比原来更顺手。

但这里有个必须按顺序来的地方,顺序错了会把自己关在门外。正确的做法是:先把密钥配好,用密钥成功登录一次,确认完全没问题,然后才去关密码认证。反过来的话,一旦你关掉密码,而密钥其实并没有配通,远程服务器就再也连不上了,除非你有别的办法从控制台进去改回来——而很多云主机默认是不开控制台远程登录的。所以这一步的耐心,换来的是不给自己制造一次进不去机器的惊险时刻。

具体改的是sshd_config里的几个参数。把PasswordAuthentication设成no,就能禁掉密码认证;对应的,PubkeyAuthentication要确认是yes,保证密钥认证开着,两者别一起被关掉。另一个常一起改的是PermitRootLogin,让root不能直接登录,先用自己的普通账号进去,再用sudo提权。官方把这个值的默认设成prohibit-password,意思是允许用密钥登录root,但禁止用密码登root。如果一时拿不准,也可以先用这个默认值过渡,不必一步到位。

改完不要急着重启,先让sshd自己检查一遍语法。用sshd -t跑一下,配置有错它会直接报出来,改到它不报错为止。这一步能挡掉绝大多数手滑,比如少打了个字母、路径写错了。否则重启之后服务起不来,你下一次连接就直接失败,而那时你正在用的这个会话,一断开就没有了。

还有一个很多人栽过的坑:你明明改了主配置文件,登录方式却没变。原因是现在不少发行版会把sshd_config.d目录下的片段文件也读进来,而这些片段的优先级常常盖过你手动改的那行主配置。也就是说,你把主文件里的密码开关改成了no,但某个片段里还写着yes,最后生效的是片段里的那个。改之前先把整个目录翻一遍,改完用sshd -T把真正生效的配置打出来确认,看的是结果,不是你改的那个文件。

顺着这条线还能收紧几处。比如把每次连接允许的尝试次数降下来,官方默认是6次,改成3次能明显拖慢在线猜测;把登录宽限时间从默认的120秒改短,让占着连接慢慢试的成本变高。这些数字看起来是小事,但它们共同把自动化扫描的效率往下压。还有一组不太被注意的转发开关,允许TCP转发、允许agent转发这类选项默认是开的,它们不用于登录,而是决定一个已经登进来的会话还能在网络上做多少事,多台服务器互相连接的环境里尤其值得按需关掉。

服务器安全这件事,最容易做也最容易被省掉的就是这一步。把密码登录关掉,等于把攻击面从无限次猜测压缩成必须先拿到那把私钥,难度不在一个量级上。花半个小时配好密钥、按顺序改完配置、确认能从新的终端顺利登进来,之后再回头看日志里那些尝试记录,你会发现它们还在,但已经和你无关了。那台曾经被人反复敲门的机器,从此只在你有钥匙的时候才回应。安全这件事,很多时候不是把门锁加厚,而是干脆换掉那把能被试出来的锁。

相关文章

标签:

A5创业网 版权所有