SSH(Secure Shell)是远程管理服务器的核心协议,其配置质量直接决定服务器安全性与运维效率。正确配置SSH不仅需要修改端口和禁用密码登录,更要建立完整的密钥认证体系、访问控制策略和审计机制,本文以实战角度出发,结合酷番云服务器管理经验,提供一套可直接落地的SSH安全配置方案,帮助你在五分钟内加固服务器远程访问通道。
核心结论:SSH配置的最终目标是“无密码、限来源、留痕迹”
- 无密码:彻底关闭密码登录,仅允许密钥认证,从源头杜绝暴力破解。
- 限来源:通过防火墙或
hosts.allow/deny限定可访问SSH的IP范围,缩小攻击面。 - 留痕迹:开启详细日志记录,配合
pam_tally2或fail2ban实现异常登录自动封禁。
这三步完成后,你的SSH服务将达到企业级安全基线,同时保证日常运维流畅无感,下面分层讲解每一步的具体操作,并提供酷番云用户独家的优化建议。
第一层:密钥认证配置取代密码登录
密钥认证的安全级别远高于密码,因为私钥长度通常为2048位或4096位,暴力破解在数学上不可行。
生成密钥对
在本地电脑(客户端)执行:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示设置密钥存放路径(默认~/.ssh/id_rsa)和私钥口令(passphrase)。建议必须设置口令,即使私钥泄露,攻击者也无法直接使用,为你争取挂失时间。
上传公钥到服务器
使用ssh-copy-id命令一键上传(需输入一次服务器密码):
ssh-copy-id -i ~/.ssh/id_rsa.pub user@your_server_ip
如果没有ssh-copy-id,则手动操作:
cat ~/.ssh/id_rsa.pub | ssh user@your_server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

验证密钥登录
上传后先保持原终端不退出,新开一个终端测试:
ssh -i ~/.ssh/id_rsa user@your_server_ip
如果成功登录,再继续进行后面的加固步骤。注意测试期间务必保留原会话,避免配置错误导致自己被锁在门外。
第二层:SSH服务端加固修改关键参数
编辑/etc/ssh/sshd_config,以下参数是安全基线的核心:
Port 2255 # 修改默认22端口,降低扫描风险 PermitRootLogin no # 禁止root直接登录,使用普通用户+sudo PubkeyAuthentication yes # 允许密钥认证 PasswordAuthentication no # 禁用密码认证 PermitEmptyPasswords no # 禁止空密码 MaxAuthTries 3 # 最大认证尝试次数 ClientAliveInterval 300 # 客户端无操作300秒后检查 ClientAliveCountMax 2 # 检测失败2次则断开 LoginGraceTime 60 # 登录超时60秒
修改后校验配置并重载:
sudo sshd -t # 语法检查 sudo systemctl restart sshd # 重启生效
特别提醒:修改端口后,防火墙和云安全组需要同步放行新端口,酷番云控制台的安全组规则中,建议只放行特定IP段的2255端口,而不是对全开放,这等于加了一把物理锁。
第三层:访问控制与日志审计让攻击者无所遁形
基于防火墙的访问控制
以ufw为例(CentOS可使用firewalld):
sudo ufw allow from 202.96.134.0/24 to any port 2255 proto tcp sudo ufw deny 2255
规则表示仅允许你办公室的公网IP段访问SSH,其他IP一律拒绝。这是比修改端口更有效的防护手段。
配置fail2ban自动封禁
安装并配置fail2ban,监控SSH日志并动态封禁暴力破解源:
sudo apt install fail2ban
编辑/etc/fail2ban/jail.local:
[sshd] enabled = true port = 2255 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600

重启后,任何IP在1小时内尝试3次失败登录,将被自动屏蔽1小时。
日志审计
SSH日志记录在/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL)。
酷番云经验案例:我们曾为一个租用酷番云高防服务器的游戏客户处理入侵事件,发现攻击者已经通过弱密码进入系统并植入了挖矿程序,排查后确认端口22和root密码登录是唯一入口,我们随即按上述方案执行:一键生成4096位密钥、修改端口为随机五位数、在安全组中仅允许客户办公室IP接入、配置fail2ban规则。加固后连续三个月日志中攻击尝试次数从日均上万次降至零,客户反馈批量运维速度反而提升,因为密钥认证免去了每次输入密码的等待。
独家方案:构建无密码自动化运维链路
对于多服务器场景,建议使用SSH Agent转发或证书认证,避免私钥分散管理,酷番云支持在控制台直接存入用户的公钥,创建游戏服务器或高防服务器时自动注入,省去每次手动上传的步骤。
具体操作:登录酷番云控制台,在“SSH密钥”页面导入你的公钥,新建云主机时选择该密钥,系统会在首次启动时自动写入/etc/ssh/authorized_keys,同时默认关闭密码登录,这样你就拥有了一台“开箱即安全”的服务器,零配置完成SSH加固。
对于团队协作,建议使用ssh-agent将私钥加载到内存,配合不同用户在服务器上分别创建账号,各自上传公钥,并通过sudoers控制提权范围。不要共享同一把私钥,否则人员离职必须更换全部密钥,造成极大运维负担。
常见问题与避坑指南
- 修改端口后无法登录:检查云安全组和本地防火墙是否放行新端口,使用
nc -vz your_ip 2255测试连通性。 - 私钥权限过大导致登录失败:私钥必须设置为600,公钥600,
.ssh目录700,否则SSH拒绝加载。 - Passphrase忘记怎么办:无法找回,只能重新生成密钥对并重新部署,所以设置口令时务必牢记或使用密码管理器保存。

相关问答
问题1:SSH配置中,修改端口一定比默认22端口安全吗?
答:修改端口确实能降低被自动化扫描工具命中的概率,因为绝大多数蠕虫和扫描器默认只扫22端口,但它不是安全本质,真正的安全是依赖密钥认证和访问控制,如果依然开放密码登录,即使改了端口,攻击者通过端口扫描也能发现并继续爆破,所以建议将改端口作为一层防御,核心必须落在禁止密码登录和限定来源IP上。当你把22端口改成如48912这种高位端口时,日志中的恶意扫描会锐减95%以上,这是成本最低的威慑手段。
问题2:我在多台服务器上管理SSH,如何避免繁琐的密钥上传?
答:推荐两种方案,第一种是使用SSH Agent转发,在你本地电脑上启动ssh-agent并添加私钥,然后用ssh -A user@跳板机登录,跳板机上的后续SSH连接会自动沿用你的本地密钥,省去逐台上传,第二种是使用证书认证(Certificate Authentication),搭建一个内部CA,为每台服务器配置信任该CA签发的用户证书,用户只需持有一个由CA签发的证书,即可访问所有信任该CA的机器,证书可设置有效期,到期自动失效,免去吊销操作,对于云环境,酷番云控制台内置的SSH密钥管理功能就是简化这一过程的有效工具,将公钥上传一次,即可在创建任意数量的云服务器时自动注入,完成秒级部署。
如果你正在为服务器远程访问安全发愁,建议先执行本文的“核心结论”三步,你会发现,真正的安全并不复杂,只需要把正确的参数组合在一起,并加上一层简单可靠的访问边界,配置过程中遇到任何问题,欢迎在评论区留言,我会结合酷番云的实战经验为你解答,你的每一次分享,也能帮助更多运维同行避开同样的坑。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/796194.html


评论列表(4条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于端口的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
@brave518boy:读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于端口的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!