CentOS 系统配置 SSH 免密登录完整指南
在 Linux 系统管理和服务器维护中,频繁输入密码登录 SSH 不仅效率低下,更存在安全风险,配置 SSH 免密登录是提升运维效率与安全性的关键步骤,本文将详细介绍在 CentOS 系统上实现 SSH 密钥对认证的完整流程。
理解免密登录的核心原理
SSH 免密登录并非取消认证,而是采用更安全的非对称加密密钥对代替传统密码:

- 密钥对生成:在本地机器创建一对关联的密钥(私钥 + 公钥)。
- 公钥部署:将公钥上传至目标 CentOS 服务器的指定文件(
~/.ssh/authorized_keys
)。 - 认证过程:
- 连接时,服务器生成随机数并用公钥加密,发送给客户端。
- 客户端用私钥解密,将结果发回服务器。
- 服务器验证结果匹配则允许登录,无需输入密码。
此方式比密码更安全(避免暴力破解),且显著提升操作便捷性。
本地生成 SSH 密钥对
操作在您日常使用的客户端机器(如个人电脑、跳板机)执行:
-
打开终端:
-
执行密钥生成命令:
- ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # -C 注释可选,标识密钥
-t rsa
:指定密钥类型为 RSA(推荐)。-b 4096
:指定密钥长度 4096 位(更安全)。-C
:添加注释,方便识别密钥用途。
-
指定保存路径与密码(按提示操作):
- Enter file in which to save the key (/home/youruser/.ssh/id_rsa): # 直接回车使用默认路径
- Enter passphrase (empty for no passphrase): # 强烈建议设置私钥密码!增强安全性
- Enter same passphrase again: # 再次输入密码确认
关键提示:为私钥设置强密码至关重要,即使私钥文件泄露,密码也能提供额外保护。
-
生成成功: 默认在
~/.ssh/
目录生成两个文件:id_rsa
:私钥文件(必须严格保密,权限应为600
)。id_rsa.pub
:公钥文件(可安全分发到目标服务器)。
上传公钥至 CentOS 服务器
将本地生成的公钥(id_rsa.pub
添加到目标服务器的 ~/.ssh/authorized_keys
文件。
使用 ssh-copy-id
(最推荐,最简单)
-
在本地客户端终端执行:
- ssh-copy-id -i ~/.ssh/id_rsa.pub username@centos_server_ip
-i ~/.ssh/id_rsa.pub
:指定要上传的公钥文件路径(如果默认是id_rsa.pub
可省略)。username
:您在 CentOS 服务器上的有效用户名。centos_server_ip
:服务器的 IP 地址或域名。
-
输入密码:首次操作需要输入该用户在 CentOS 服务器上的登录密码,成功后,公钥会自动添加到服务器用户家目录下的
~/.ssh/authorized_keys
文件中(如文件不存在会自动创建)。
手动复制粘贴(备用方法)

-
在本地查看公钥内容:
- cat ~/.ssh/id_rsa.pub
复制输出的全部文本内容(以
ssh-rsa AAAAB3Nza...
开头)。 -
登录到 CentOS 服务器:
- ssh username@centos_server_ip
-
创建或编辑
authorized_keys
文件:- mkdir -p ~/.ssh # 确保 .ssh 目录存在,-p 参数忽略已存在错误
- chmod 700 ~/.ssh # 设置 .ssh 目录权限为 700 (rwx------)
- touch ~/.ssh/authorized_keys # 创建文件(如果不存在)
- chmod 600 ~/.ssh/authorized_keys # 设置文件权限为 600 (rw-------)
- nano ~/.ssh/authorized_keys # 使用 nano 编辑器打开文件
- 将复制的公钥内容完整粘贴到文件末尾(确保没有多余空格或换行)。
- 保存并退出编辑器(在 nano 中:
Ctrl+O
保存,Enter
确认,Ctrl+X
退出)。
关键权限设置(避免失败的关键)
CentOS 的 SSH 服务 (sshd
) 对目录和文件权限有严格要求,权限配置错误是导致免密登录失败的常见原因:
-
服务器端 (
~/.ssh
及文件):- 用户家目录 (): 权限不应是
777
(宽松权限),推荐755
(drwxr-xr-x
) 或更严格。 .ssh
目录:权限必须是700
(drwx------
)。authorized_keys
文件:权限必须是600
(-rw-------
)。
使用命令检查并修正:
- chmod 700 ~/.ssh
- chmod 600 ~/.ssh/authorized_keys
- 用户家目录 (): 权限不应是
-
客户端 (私钥文件):
- 私钥文件 (
~/.ssh/id_rsa
):权限必须是600
(-rw-------
)。- chmod 600 ~/.ssh/id_rsa
- 私钥文件 (
验证免密登录配置
完成以上步骤后,尝试从本地客户端连接到 CentOS 服务器:
- ssh username@centos_server_ip
- 成功表现:系统会提示您输入私钥的密码(如果您在第 2 步设置了私钥密码),而不是服务器用户的登录密码,输入私钥密码后即可直接登录。
- 失败排查:
- 检查步骤是否遗漏。
- 仔细核对服务器端
.ssh
目录和authorized_keys
文件的权限(步骤四)。 - 使用
ssh -v username@centos_server_ip
开启详细模式,查看连接过程中的调试信息,定位问题点。 - 检查服务器
/var/log/secure
日志(可能需要sudo
权限),查找与 SSH 认证相关的错误信息。
进阶配置与安全建议
-
管理多服务器密钥:
-
使用
ssh-agent
管理私钥密码,避免每次连接重复输入:- eval $(ssh-agent) # 启动 agent
- ssh-add ~/.ssh/id_rsa # 添加私钥并输入密码 (后续连接无需再输)
-
在
~/.ssh/config
文件中配置不同服务器使用不同密钥:- Host server-alias1
- HostName server1_ip
- User username1
- IdentityFile ~/.ssh/id_rsa_for_server1
- Host server-alias2
- HostName server2_ip
- User username2
- IdentityFile ~/.ssh/id_rsa_for_server2
之后即可使用
ssh server-alias1
连接。
-
-
增强服务器安全(强烈推荐): 一旦确认密钥登录正常,应禁用密码登录,防止暴力破解:
- 编辑服务器 SSH 配置文件:
- sudo nano /etc/ssh/sshd_config
- 修改或添加以下配置项:
- PasswordAuthentication no # 禁用密码认证
- PermitEmptyPasswords no # 禁止空密码
- ChallengeResponseAuthentication no # 通常也禁用
- 保存文件后重启 SSH 服务:
- sudo systemctl restart sshd # CentOS 7/8/9 使用 systemctl
- # 或 sudo service sshd restart # 旧版本 CentOS
重要警告:在禁用密码登录前,务必确保您的公钥已正确添加且能免密登录!否则可能永久失去服务器访问权限。
- 编辑服务器 SSH 配置文件:
-
私钥安全:
- 绝不分享私钥 (
id_rsa
)。 - 为私钥设置强密码。
- 将私钥文件存储在安全位置。
- 考虑使用硬件安全密钥存储私钥。
- 绝不分享私钥 (
掌握 SSH 免密登录是高效管理 CentOS 服务器的必备技能,遵循上述步骤仔细操作,并实施安全加固建议,能显著提升工作效率并保障系统安全,密钥管理看似简单,实则是现代服务器安全防护的第一道坚实防线。