爬起来远程登他那边的跳板(还好正式服有跳板机隔离没受波及,这个细节后面提一嘴也算提醒),上去先敲了个top -c,果不其然,一个陌生的进程占满了所有核心,查进程路径、查ssh登录日志/var/log/secure,哦豁,完美踩中新手SSH三大雷区:默认22端口没改、测试root密码是“136xxxx1234Lw”(手机号后六位加他名字缩写,扫库字典里估计都是这种组合)、最关键的禁止root远程登录的参数连看都没看一眼,直接开着。
那天折腾到下午三点多才把测试服彻底清干净,还差点重装系统。说实话,这事儿我入行的时候自己也踩过,但比他幸运的是当时只是个个人博客小服务器,没拖任何业务后腿。既然说到这儿了,就把2026年我给公司所有新上线的测试、正式服必做的SSH安全改法(重点就是禁止root远程登录)给你们理一遍,全是能直接复制落地的,没什么复杂的理论。
先从最紧急也是最核心的改起:禁止root远程登录。但这里一定要敲黑板,新手别上来就直接改sshd_config然后重启服务就下线!我刚入行那次踩的第二个坑就是这个——刚装完系统只有root账号,改完重启直接登不上,差点哭着找机房的兄弟重装。
正确的步骤是,先建一个能提权的普通用户。举个例子,我们公司习惯用ops作为运维专属用户,你们可以根据自己的团队名字改。敲命令useradd ops && passwd ops,passwd的时候记得给ops设一个强密码,最好是大小写字母、数字、特殊符号混合的,12位以上,我们现在都是用密码管理器生成的随机密码。
建完ops之后,得给它加sudo权限,不然重启服务、修改系统配置这些操作都没法做。CentOS/Rocky/AlmaLinux这类红帽系的直接敲usermod -aG wheel ops,Debian/Ubuntu系的敲usermod -aG sudo ops,加完之后别着急继续,先找个新的终端窗口用ops账号登上去试一下能不能提权,比如敲sudo ls -la /root,第一次会让输ops的密码,能看到/root目录下的内容就算成功了。这一步很重要,万一sudo权限没配置好,后面禁止root远程登录就只能自己蹲机房或者找云厂商的救援模式了。
确认提权没问题之后,再去修改sshd_config的配置文件。先备份一下配置文件是个好习惯,不管改什么系统配置文件,先敲个备份命令总没错,红帽系Debian系通用:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.2026xxxxx,后面的日期你们换成当天的就行,方便出问题回滚。

然后用vim或者nano打开sshd_config,新手推荐用nano,快捷键简单,不容易误操作。红帽系可能默认没装nano,敲sudo yum install nano -y或者sudo dnf install nano -y先装一下。打开之后,找两个参数:一个是PermitRootLogin,默认是yes或者被注释掉(#开头),把注释删掉或者直接改成no;另一个是Port,默认是22,也被注释掉了,把注释删掉,改成一个1024以上65535以下的端口,别选太常用的比如8080、3306、27017这些,容易被其他服务占用或者扫到,比如改成28765就行,你们自己随便定一个不常用的。
改完之后保存退出,nano的话是Ctrl+O回车保存,Ctrl+X退出。然后别直接重启sshd服务!新手的第三个小坑是这个——重启服务前先检查一下配置文件有没有语法错误,通用命令是sshd -t,如果没有任何输出就说明没问题,有输出的话就按提示改。确认没问题之后,再重启服务,红帽系是sudo systemctl restart sshd,Debian/Ubuntu系是sudo systemctl restart ssh。
重启完之后,同样找个新的终端窗口,用ops账号加刚才改的新端口登上去试一下,比如ssh ops@192.168.1.100 -p 28765(IP换成你们自己的云服务器或者物理服务器IP),能正常登录,提权也没问题的话,再去试一下root账号能不能直接登,应该会提示Permission denied,就算试密码也登不上,这样就基本安全了。
哦对了,差点忘了说公钥免密登录,这个和禁止root远程登录、改端口一起用,安全系数会更高,新手也不用每次都输强密码,很方便。简单说一下步骤:在自己的本地电脑(Windows的话可以用PowerShell或者Git Bash,Mac/Linux直接用终端)敲ssh-keygen -t rsa -b 4096,一路回车就行,会在本地生成私钥和公钥。然后用ssh-copy-id -p 28765 ops@192.168.1.100把公钥传到服务器上,传完之后再登就不用输密码了。如果你们担心公钥也不安全,可以再改一下sshd_config里的PasswordAuthentication参数,改成no,这样只能用公钥登录,密码登录完全禁用,不过这个要在确认公钥登录没问题之后再改,不然同样会登不上。
最后给你们两个新手专属的避坑提醒:第一个就是刚才反复说的,不管是改禁止root远程登录、改端口还是禁用密码登录,都要先找个新的终端窗口试一下没问题再关旧的,别等旧的窗口关了才发现登不上,那就麻烦大了;第二个是云服务器的话,改完端口之后记得去安全组或者防火墙里把新端口放进去,把22端口删掉,不然外面还是扫不到新端口登不上,22端口留着也没用反而危险。
哦对了,还有刚才同学的测试同步网络的问题,他们是因为测试服和正式服在同一个局域网里,测试服被黑了之后用了大量的带宽拖垮了同步,所以不管是测试服还是正式服,最好都做一下网络隔离,测试服不要直接放公网,最好通过跳板机登录,安全系数会高很多。
你们在运维工作中有没有遇到过类似的SSH被黑的坑?欢迎在评论区分享你的排查经验,大家一起避坑。

评论列表 (0条):
加载更多评论 Loading...