Linux SSH 免密登录配置教程
Linux SSH 免密登录配置教程
一、免密登录解决什么问题
运维每天要登录多台服务器,每次输密码又慢又容易错,批量脚本里硬编码密码还有泄露风险。SSH 公钥认证用非对称密钥代替密码:本地生成一对密钥,把公钥放到目标服务器,登录时本地私钥完成签名验证,全程不再输入密码,是自动化运维和跳板机的标准方案。
二、生成密钥对
在本地客户端执行,默认生成 RSA 密钥,一路回车即可:
ssh-keygen -t rsa -b 4096 -C "ops@local"
生成两个文件:~/.ssh/id_rsa(私钥,务必保密,绝不上传)和 ~/.ssh/id_rsa.pub(公钥,可以公开分发)。
三、上传公钥到目标服务器
最简单用 ssh-copy-id,自动把公钥追加到服务器授权文件:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.20
执行时输入一次服务器密码即可。手动方式则把公钥内容追加到远端 ~/.ssh/authorized_keys,注意每行一个公钥。
四、验证免密登录
ssh user@192.168.1.20
不再提示密码直接进入 shell 即成功。
五、ssh config 简化登录
在本地 ~/.ssh/config 配置别名,以后只敲别名:
Host web01
HostName 192.168.1.20
User deploy
Port 22
IdentityFile ~/.ssh/id_rsa
使用 ssh web01 即可,多台服务器统一管理。
六、服务端安全配置
编辑 /etc/ssh/sshd_config 加固:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitRootLogin no
免密验证生效后关闭密码登录、禁止 root 直接登录,防止暴力破解。改完执行 systemctl restart sshd 生效,注意先保留一个会话再重启,避免配置错误把自己锁在外面。
七、常见故障排查
- 权限不对:
~/.ssh目录权限 700,authorized_keys权限 600,私钥 600,否则 sshd 拒绝读取; - 公钥粘贴多了换行或混入其他字符,导致验证失败;
- 客户端指定了错误的 IdentityFile,优先读了别的私钥;
- 服务端 SELinux 上下文异常,修复
restorecon -Rv ~/.ssh; - 用
ssh -v user@host看调试日志,定位卡在哪一步。
八、常见误区
- 把私钥发给别人或提交进 Git 仓库,等于暴露服务器;
- 还没验证免密就关闭密码登录,导致无法登录;
- 多台服务器共用一把密钥,一台泄露全盘受影响;
- 忽略权限,反复排查却卡在文件属主。
九、总结
免密登录核心是本地生成密钥对、公钥写入远端 authorized_keys、私钥本地签名验证。配合 ssh config 别名和服务端关闭密码登录,既提升运维效率又增强安全。出问题优先查权限、公钥完整性和 -v 调试日志,按步骤定位即可快速恢复。
Linux ssh免密登录配置ssh-copy-id详细步骤 Linux
前言
每次 SSH 登录服务器都要输密码,不仅繁琐,还容易被暴力破解。配置密钥免密登录后,本地用私钥认证即可登入,不必传输密码,安全性和便利性都更好。ssh-copy-id 是官方提供的一键上传公钥工具,比手动拼接 authorized_keys 更不容易出错。本文讲解生成密钥、上传公钥、测试免密、可选禁用密码登录的完整流程,适配 CentOS、Ubuntu、Rocky。
操作步骤
1. 在本地生成密钥对
ssh-keygen -t ed25519 -C "my-server"
一路回车,私钥 id_ed25519、公钥 id_ed25519.pub 生成在 ~/.ssh/。老旧客户端不支持 ed25519 时改用:
ssh-keygen -t rsa -b 4096
2. 用 ssh-copy-id 上传公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@服务器IP
执行时输入一次服务器密码,公钥会自动追加到服务器的 ~/.ssh/authorized_keys。
3. 测试免密登录
ssh root@服务器IP
不再提示密码直接登入即成功。
4. 配置别名简化登录(可选)
编辑本地 ~/.ssh/config:
Host myserver
HostName 服务器IP
User root
IdentityFile ~/.ssh/id_ed25519
Port 22
以后直接 ssh myserver。
5. 核对服务器端权限(免密失败多为权限问题)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
6. 验证无误后可选禁用密码登录
编辑 /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
重启 sshd:
systemctl restart sshd
务必保留当前已登录窗口,先新开窗口测试密钥能登入,再关闭原窗口。
常见坑
- ~/.ssh 目录权限 777 或 authorized_keys 权限过宽,sshd 出于安全直接拒绝密钥认证。
- 公钥上传到了错误用户的家目录,root 和普通用户搞混。
- 本地私钥丢失又禁用了密码登录,导致无法登入,禁用密码前必须确认备用通道。
- ssh-copy-id 没指定 -i,上传了默认 rsa 公钥,和生成的密钥不匹配。
- 服务器开启 SELinux,可能拦截 authorized_keys,可用 setenforce 0 临时测试。
- 云厂商或堡垒机接管 SSH 配置,sshd_config 修改被覆盖。
- 多台服务器共用一把私钥方便,但私钥泄露等于全线失守,建议重要机器单独密钥。
总结
免密登录核心三步:ssh-keygen 生成密钥、ssh-copy-id 上传公钥、测试直接登入。权限 700/600 是最常见的失败原因。确认密钥可用后再考虑禁用密码登录,并且始终保留一个可登录的备用通道,避免把自己锁在门外。
遇到问题加QQ23979811 协助处理