Linux密钥登录配置教程

在 Linux 系统中,SSH 密钥登录是替代传统密码登录的更安全方式,能有效避免密码被暴力破解的风险。本文将详细介绍配置 SSH 密钥登录的完整步骤,包含服务器配置、客户端密钥生成、权限设置及常见问题排查。

一、服务器端配置:修改 SSH 配置文件

首先需要登录 Linux 服务器,通过修改 sshd_config 文件开启公钥验证功能。

1. 登录服务器并编辑配置文件

使用密码登录服务器后,执行以下命令打开 SSH 配置文件:

bash 复制代码
vi /etc/ssh/sshd_config

2. 调整关键配置项

在配置文件中找到以下 4 个配置项,取消注释(若有 # 前缀)并修改为指定值:

配置项 推荐值 配置说明
RSAAuthentication yes 开启基于 RSA 算法的安全验证(兼容传统 RSA 密钥)
PubkeyAuthentication yes 开启公钥登录验证(核心配置,必须设为 yes
AuthorizedKeyFiles .ssh/authorized_keys 指定存储客户端公钥的文件路径(默认路径,无需修改)
StrictModes no 关闭 SSH 登录前对用户家目录、rhosts 文件的权限检查(避免权限问题导致登录失败)

3. 重启 SSH 服务使配置生效

修改完成后,保存并退出 vi(按 Esc 后输入 :wq),执行以下命令重启 SSH 服务:

bash 复制代码
systemctl restart sshd.service

linux的各个发行版本,SSH服务命令略有差异, 关键区别:Ubuntu/Debian 的 SSH 服务名是 ssh,其他多数版本是 sshd,centos7是 sshd.service

二、客户端配置:生成公钥与私钥

以 macOS 客户端为例(Windows 可通过 Git Bash、PowerShell 操作,步骤一致),生成用于登录的密钥对(公钥 + 私钥)。

1. 进入客户端 .ssh 目录

打开终端,执行命令进入用户目录下的 .ssh 文件夹(若不存在会自动创建):

bash 复制代码
cd ~/.ssh

2. 生成 ed25519 密钥对

执行以下命令生成密钥,支持自定义密钥名称和关联邮箱(便于区分多台服务器密钥):

bash 复制代码
# 基础生成命令(默认密钥名为 id_ed25519)
ssh-keygen -t ed25519   # 推荐 ed25519 算法(比 RSA 更安全高效)

# 自定义密钥名称 + 关联邮箱(推荐,例如区分服务器用途)
ssh-keygen -t ed25519 -C "server_linux@example.com" -f "id_ed25519"

3. 完成密钥生成

执行命令后按提示操作:

  • 若不需要为密钥设置密码(简化登录,适合个人使用),直接按 3 次回车;
  • 若需要更高安全性(防止私钥泄露后被滥用),可输入密码并确认。

生成成功后,.ssh 目录下会出现两个文件:

  • 私钥文件(如 id_ed25519 ):保存在客户端,严禁泄露给他人
  • 公钥文件(如 id_ed25519.pub ):需上传到 Linux 服务器。

三、服务器端:添加客户端公钥并设置权限

将客户端生成的公钥上传到服务器,并配置正确的文件权限(权限错误会导致公钥登录失败,是常见坑点)。

1. 上传客户端公钥到服务器

通过 scp 命令将客户端公钥文件上传到服务器的 ~/.ssh/ 目录(以默认密钥名 id_ed25519.pub 为例):

bash 复制代码
# 格式:scp 客户端公钥路径 服务器用户名@服务器IP:服务器目标路径
scp ~/.ssh/id_ed25519.pub root@xxx.xxx.xxx.xxx:~/.ssh/

执行后输入服务器密码,完成公钥上传。

2. 合并公钥到 authorized_keys

登录服务器,进入 ~/.ssh/ 目录,将上传的公钥追加到 authorized_keys 文件(若文件不存在会自动创建):

bash 复制代码
# 进入 .ssh 目录
cd ~/.ssh/

# 追加公钥到 authorized_keys(避免覆盖已有公钥)
cat id_ed25519.pub >> authorized_keys

# 删除上传的原始公钥文件(清理冗余文件)
rm -f id_ed25519.pub

3. 配置正确的权限(关键步骤)

SSH 对目录和文件权限有严格要求,权限过宽会导致登录失败,需执行以下命令设置权限:

bash 复制代码
# 设置 .ssh 目录权限(仅所有者可读写执行,其他用户无权限)
chmod 700 ~/.ssh/

# 设置 authorized_keys 文件权限(仅所有者可读写,其他用户无权限)
chmod 644 ~/.ssh/authorized_keys

四、客户端:设置登录别名(可选,简化操作)

为避免每次登录都输入服务器 IP、用户名和端口,可在客户端 .ssh 目录下创建 config 文件,设置登录别名。

1. 创建并编辑 config 文件

bash 复制代码
vi ~/.ssh/config

2. 添加服务器配置

按以下格式添加配置(可配置多台服务器,区分别名):

bash 复制代码
# 1号服务器(自定义别名,如 linux-server)
Host linux-server
  HostName xxx.xxx.xxx.xxx  # 服务器IP地址
  User root                  # 登录用户名(如 root 或普通用户)
  Port 22                    # SSH端口(默认22,若修改过需对应调整)
  IdentityFile ~/.ssh/id_ed25519 # 客户端私钥路径(若自定义密钥名需修改)

# 2号服务器(示例:另一台服务器配置)
Host linux-test
  HostName xxx.xxx.xxx.xxx
  User testuser
  Port 2222
  IdentityFile ~/.ssh/id_ed25519_test

3. 简化登录

配置完成后,只需输入别名即可快速登录服务器:

bash 复制代码
# 登录 1号服务器(别名 linux-server)
ssh linux-server

五、常见问题排查:公钥登录失败怎么办?

若配置后无法免密登录,可通过以下步骤排查问题:

1. 查看 SSH 登录日志

服务器端日志文件 /var/log/secure 会记录登录失败原因,执行以下命令查看日志:

bash 复制代码
tail -f /var/log/secure

常见错误提示及解决方案:

  • Authentication refused: bad ownership or modes for directory /home/用户 :目录权限错误,重新执行步骤三的权限配置命令(chmod 700 ~/.ssh/chmod 644 ~/.ssh/authorized_keys)。
  • No supported authentication methods availablesshd_config 配置错误,检查 PubkeyAuthentication 是否设为 yes,并重启 SSH 服务。

2. 重新检查配置项

重点确认以下内容:

  • 服务器 sshd_configPubkeyAuthenticationyesStrictModesno
  • 客户端私钥未泄露,且 config 文件中 IdentityFile 路径正确;
  • 服务器 authorized_keys 中包含客户端公钥的完整内容(无遗漏或多余字符)。

六、总结

通过以上步骤,即可完成 Linux 服务器的 SSH 公钥登录配置,实现免密登录的同时大幅提升安全性。核心注意事项:

  1. 服务器 sshd_config 配置需正确,尤其是 PubkeyAuthentication = yesStrictModes = no
  2. 目录和文件权限必须严格设置(700 目录 + 644 文件),避免权限过宽;
  3. 客户端私钥需妥善保管,严禁泄露给未授权用户;
  4. 登录失败时,通过 /var/log/secure 日志快速定位问题。
相关推荐
猫头虎18 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
C_心欲无痕18 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
HIT_Weston19 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿20 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin20 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
SelectDB20 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
运维·数据库·apache
❀͜͡傀儡师20 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器
老姚---老姚21 小时前
docker常用命令
运维·docker·容器
◆◇49921 小时前
Windows 下 .ssh 文件夹删除后 SSH 连接失败 完整重建配置教程
ssh
深圳安锐科技有限公司21 小时前
边坡倾斜自动化监测 倾角仪 如何通过安锐云查看监测曲线?
运维·视觉检测·实时监测·自动化监测·结构健康监测·倾斜角度监测·倾角传感器