SSH 密钥登录配置入门:生成密钥、免密登录与常见报错排查
每次登录服务器都要输密码,既麻烦又容易被暴力猜解。SSH 密钥登录用一对密钥代替密码:私钥留在本地,公钥放到服务器,登录时用密钥完成验证,不用在网络上传输密码。
一、密钥对的基本关系
私钥相当于钥匙,只保存在自己电脑上;公钥相当于锁,可以放到服务器上。服务器用公钥验证你是否持有对应私钥,通过才放行。因此私钥绝不能发给别人或上传到公开仓库。
二、生成密钥
在本地执行:
ssh-keygen -t ed25519 -C "my-server-key"
默认生成 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。生成时可设置密码短语,相当于给私钥再加一把锁。如果提示已存在同名密钥,先确认旧密钥是否还在用,不要直接覆盖。
三、分发公钥并免密登录
用 ssh-copy-id 分发最省事:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器地址
它会把公钥追加到服务器对应用户的 ~/.ssh/authorized_keys。第一次仍需输入服务器密码,成功后执行 ssh user@服务器地址 即可免密登录。没有该工具时,也可手动把公钥粘贴到 authorized_keys 末尾,注意不要把私钥粘贴过去,也不要让公钥换行断裂。
四、服务器端配置
确认 SSH 服务配置中 PubkeyAuthentication yes,即允许公钥认证。密钥登录稳定后,可把 PasswordAuthentication 改为 no,减少密码猜解面。改配置前先保留一个已登录的终端做验证,避免把自己锁在门外,改完要重启或重载 SSH 服务。
五、权限是常见失败原因
SSH 对权限很敏感,权限过松会直接拒绝密钥登录。推荐:.ssh 目录 700,authorized_keys 和私钥文件 600:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
同时确认这些文件的属主是你当前登录的用户。
六、两个报错的排查顺序
Permission denied (publickey):先核对用户名,再确认公钥是否写进了目标用户的 authorized_keys,然后检查权限和属主,最后用 ssh -v user@服务器地址 看日志,定位拒绝在哪一步。
Host key verification failed:通常是服务器主机密钥变了,例如重装或更换实例。先向管理员核实是否确实变更,再决定是否删除本地 known_hosts 里的旧记录,不要不核实就直接接受新主机密钥。
七、日常习惯
不同设备尽量用不同密钥,不再使用的设备要及时删除服务器上的对应公钥,定期检查 authorized_keys 是否有陌生条目。走通一次后,新增服务器只需分发公钥,就能安全免密登录。
- 点赞
- 收藏
- 关注作者
评论(0)