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 日志快速定位问题。
相关推荐
七夜zippoe13 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64815 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满15 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠15 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90315 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技16 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀17 小时前
Linux环境变量
linux·运维·服务器
zzzsde17 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º18 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~19 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化