密码登录被撞库,往往是运维里最没技术含量的失守。把日常远程登录从密码换成密钥,是 SSH远程管理工具中性价比最高的一次改造:前期花十几分钟,之后每次登录少输一次密码,也少一个可被爆破的入口。下面这套流程可以照着做,每一步都有可回退的余地。
第一步:动手前先给自己留一扇后门
改 SSH 配置最怕的不是配错,而是配错之后所有人都进不去。开始之前先做两件事:
- 保持当前已登录的会话不要断开,这条连接就是你的应急通道;
- 把 /etc/ssh/sshd_config 复制一份为 sshd_config.bak,需要回滚时直接覆盖并重新加载即可。
如果手上只有一台机器、一条连接,建议先确认云控制台是否提供 VNC 或网页终端登录,这是最后的保险。
第二步:在本地生成一对密钥
密钥在本地生成,私钥始终不离开你的电脑。打开终端执行:
- ssh-keygen -t ed25519 -C "姓名-用途-年份",这是目前的推荐算法;
- 老系统只认 RSA 时,用 -t rsa -b 4096 兜底;
- 提示输入口令(passphrase)时建议设置,相当于给私钥再加一道门;
- 生成后会得到两个文件:不带后缀的私钥和 .pub 结尾的公钥,前者绝不外发,后者才可以交给服务器。
第三步:把公钥送上服务器
常见的有两条路径,选一条即可:
- 命令行方式:ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器地址,它会自动创建目录、写入 authorized_keys 并设置权限,最省事;
- 手工方式:登录后把公钥内容追加到 ~/.ssh/authorized_keys,然后执行 chmod 700 ~/.ssh 和 chmod 600 ~/.ssh/authorized_keys。
手工方式最常见的失败点就是权限:目录或文件权限过于宽松,sshd 会直接忽略密钥认证,表现为“明明配了却还要输密码”。遇到这种情况,先查权限再查配置。
第四步:在客户端里把密钥管起来
接下来让 SSH远程管理工具接管这把密钥。在连接配置里把认证方式切换为公钥认证,指定私钥文件路径,用户名单独填写,尽量不要依赖默认的 root。给连接起一个看得懂的名字,比如“业务名-环境-IP 段”,机器一多就知道这条连接通向哪里。
- 多台服务器共用同一把密钥可行,但要能追溯到具体是谁;
- 团队协作时坚持一人一把,不要共享同一个私钥文件;
- 设了口令的私钥,首次使用会提示输入,建议记进密码管理器而不是便签。
第五步:确认免密能进,再关闭密码登录
顺序千万别颠倒。先新开一个终端窗口测试密钥登录,成功之后才去改服务端配置:
- 确认 PubkeyAuthentication yes;
- 把 PasswordAuthentication 改为 no;
- 保存后先执行 sshd -t 检查语法,再用 systemctl reload sshd 或 reload ssh 重新加载。
先关密码再测密钥,是把自己锁在门外的经典操作。另外注意 reload 比 restart 温和,不会踢掉现有会话。
第六步:验证、登记与轮换
改完不是结束,还有收尾三件事:
- 用一个全新窗口验证密钥能进、密码进不去,两条都要测;
- 在交接文档里记下哪台机器、谁的密钥、什么时候加进去的;
- 人员离职、笔记本丢失或私钥可能外泄时,从 authorized_keys 里删掉对应那一行就够了,不必改服务器密码,也不会影响其他人。
建议给密钥定一个轮换周期,比如半年一次,并按环境分开使用:生产一套、测试一套,互不牵连。把公钥下发、私钥保管、离场回收这三件事写进流程,SSH远程管理工具带来的便利才是可持续的。