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

务必保留当前已登录窗口,先新开窗口测试密钥能登入,再关闭原窗口。

常见坑

  1. ~/.ssh 目录权限 777 或 authorized_keys 权限过宽,sshd 出于安全直接拒绝密钥认证。
  2. 公钥上传到了错误用户的家目录,root 和普通用户搞混。
  3. 本地私钥丢失又禁用了密码登录,导致无法登入,禁用密码前必须确认备用通道。
  4. ssh-copy-id 没指定 -i,上传了默认 rsa 公钥,和生成的密钥不匹配。
  5. 服务器开启 SELinux,可能拦截 authorized_keys,可用 setenforce 0 临时测试。
  6. 云厂商或堡垒机接管 SSH 配置,sshd_config 修改被覆盖。
  7. 多台服务器共用一把私钥方便,但私钥泄露等于全线失守,建议重要机器单独密钥。

总结

免密登录核心三步:ssh-keygen 生成密钥、ssh-copy-id 上传公钥、测试直接登入。权限 700/600 是最常见的失败原因。确认密钥可用后再考虑禁用密码登录,并且始终保留一个可登录的备用通道,避免把自己锁在门外。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-14 07:09 
'); })();