文章总结: 本文基于服务器被攻击的实战经验,详细介绍了Ubuntu系统通过SSH密钥对替代密码登录的安全加固方案。核心内容包括使用ssh-keygen生成Ed25519算法密钥、配置Fail2Ban防御爆破、禁用密码认证、设置SSHConfig提升运维效率等实操步骤,最终实现安全性与运维效率的双重提升。 综合评分: 85 文章分类: 安全建设,应用安全,运维经验,解决方案,实战经验
彻底告别密码登录!Ubuntu最强安全加固与效率提升指南
原创
衡水铁头哥 衡水铁头哥
铁军哥
2026年4月3日 07:45 北京
吃一堑,长一智。在上次服务器被攻击后(密码复杂度满分却被秒破?腾讯云“白名单”闹剧与AI泄密的血泪复盘),我们进行了深度复盘,同时,也引起了腾讯云官方的注意。
该说不说,腾讯云官方的舆情监控做的真到位,早上7:41推文,他们早上9:36找到我跟进这个问题,而且在这之前,他们就已经内部做完了问题分析,直接拉我对改进方案。要是放到其他央国企,估计人还没到岗吧?
当然,防火防盗防运维。作为改进方案,我们配置了Fail2Ban工具来进行密码爆破防御。但是,在生产网络中,我们一般拒绝直接使用、或在脚本中硬编码明文密码。这时,使用密钥对就是一个绝佳的选择,对于大型云计算服务提供商,默认的登录凭证也是使用密钥对,如果要使用密码需要手工调整。
那我们该怎么手工生成密钥对呢?这就不得不提ssh-keygen了。
ssh-keygen是OpenSSH套件中专门用于生成、管理和转换身份验证密钥的核心工具,我们可以通过它生成的密钥对来实现证书级的无密码登录,这也是所有自动化运维(如Ansible、Terraform等)的前提。
生成密钥对时,推荐-t选项并指定为ed25519来使用Ed25519算法,这是目前公认最现代、最安全的椭圆曲线算法。传统的RSA 3072位密钥特别臃肿,并且容易受到潜在的侧信道攻击。相比之下,Ed25519的密钥只有几百个字符,但安全性却相当于3000位以上的RSA,并且生成速度更快、签名速度更快、占用内存极低。
此外,我们还可以通过-a选项指定密钥派生函数的轮数。当我们为私钥设置密码时,SSH会使用一种名为bcrypt的算法对密码进行多次哈希处理。默认值为16,我们可以将其提高到100,这样如果有黑客拿到了我们的私钥文件并尝试暴力破解我们的私钥密码,其计算成本将增加数倍,提升了暴力破解的难度。
为了方便区分,我们可以通过-C选项添加注释,这个字符串会出现在公钥文件的末尾。这就像是我们在机房里给网线贴上标签,当我们把公钥推送到成百上千台交换机或服务器后,通过这个注释,我们可以一眼看出这把钥匙是属于哪台中控机的
则生成密钥对的命令如下:
ssh-keygen -t ed25519 -a 100 -C "tt-200-129"ll ~/.ssh/
可以看到,当我们执行完命令后,生成了两个文件。其中,id_ed25519是私钥文件,这个绝对不能发给任何人;id_ed25519.pub是公钥文件,我们需要把它追加到目标设备的~/.ssh/authorized_keys文件中。
默认情况下,~/.ssh/authorized_keys这个文件是空的,我们需要把公钥文件的内容追加到~/.ssh/authorized_keys文件中。
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
保存好生成的私钥和公钥,我们先从电脑上使用MobaXterm连接试一下。
跟使用密码连接不同的是,我们要在【Advanced SSH settings】下面,勾选【Use private key】,并选择生成的私钥文件。
然后发起连接,可以看到认证过程一闪而过,提示为使用我们配置的公钥进行认证,随即认证成功。
当密钥认证成功之后,我们就可以禁用密码认证,仅允许密钥登录了。同时,禁止root直接带密码登录。
nano /etc/ssh/sshd_config.d/sre_hardening.confPasswordAuthentication noPubkeyAuthentication yesPermitRootLogin prohibit-password
此外,建议开启TCP存活心跳,防止因为网络抖动导致断连。
TCPKeepAlive yesClientAliveInterval 60ClientAliveCountMax 3
这样,修改完成之后,我们再使用普通的密码登录,就会直接被拒绝了。
当然,在服务器上也登录不了了。
那我们如何通过命令行进行登录呢?
首先,我们要在客户端一侧也配置这个密钥文件。
然后,我们执行登录命令,使用-i参数指定私钥路径:
ssh -i ~/.ssh/id_ed25519-200-129 [email protected]
看,因为我们创建的密钥文件默认权限为644,而Linux的SSH客户端非常挑剔,直接报错,提示私钥文件权限太开放了,不应该能被其他用户访问。那么,我们将文件权限修改为600:
chmod 600 ~/.ssh/id_ed25519-200-129
可以看到,权限一改,马上登录成功。
如果大家跟我一样,内网有上百台虚拟机,每次连接都需要精确指定不同的密钥文件,这个操作绝对是反人类的,那怎样配置才能简化操作呢?
我们可以客户端侧创建一个快捷登录配置文件~/.ssh/config,给每台服务器起一个昵称,并指定私钥文件:
nano ~/.ssh/configHost srv200.129 HostName 192.168.200.129 User root IdentityFile ~/.ssh/id_ed25519-200-129
配置好之后,我们只需要敲一行命令就能秒连服务器了:
ssh srv200.129
这样,我们的Ubuntu服务器就已经完成了从裸奔到全副武装的进化,这不仅是安全的升级,更是运维体验的降维打击。
我们不仅利用Ed25519算法构建了坚不可摧的安全防线,更通过SSH Config文件实现了效率的飞跃。这正是运维人的浪漫:用代码的严谨守护安全,用配置的智慧解放双手。
那话说回来了,你更喜欢MobaXterm的图形化操作,还是直接使用终端的命令行配置呢?
***推荐阅读***
我们的WireGuard管理系统支持手机电脑了!全平台终端配置,支持扫码连接,一键搞定
保姆级教程:一条命令部署OpenVPN管理系统V4版,支持Win/Mac/安卓/iOS全平台接入
成本省下99.7%!用40元的腾讯云服务器自建IPsecVPN,成功对接企业级飞塔防火墙
别再乱选VPN了!实测数据告诉你:为什么L2TP是个“坑”
密码复杂度满分却被秒破?腾讯云“白名单”闹剧与AI泄密的血泪复盘
告别OSPF!EVE-NG专业版+BGP Unnumbered打通Underlay的完整实战
从180秒到0.01秒:智算中心Underlay路由优化的速度与激情
嵌套虚拟化的极限时延:在2000 Mbps的风暴中,我找到了性能的真谛
单边写入为何秒杀双边传输?从UDP 4791到BTH头,看懂RDMA的灵魂构造!
手机也能跑DeepSeek-R1/Qwen3了:零成本搭建AI推理平台
8G显存跑AI:Llama3.1完胜Qwen3.5?Ubuntu下四大模型横评,速度竟差一倍!
2048卡昇腾910C集群算力集群交付工程手册
2048卡H100算力中心100G无阻塞存储网建设方案
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:铁军哥 衡水铁头哥 衡水铁头哥《彻底告别密码登录!Ubuntu最强安全加固与效率提升指南》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论