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 协助处理