Linux密钥登录配置教程

342 阅读6分钟

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

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

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

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

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

vi /etc/ssh/sshd_config

2. 调整关键配置项

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

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

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

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

systemctl restart sshd.service

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

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

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

1. 进入客户端 .ssh 目录

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

cd ~/.ssh

2. 生成 ed25519 密钥对

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

# 基础生成命令(默认密钥名为 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 为例):

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

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

2. 合并公钥到 authorized_keys

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

# 进入 .ssh 目录
cd ~/.ssh/

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

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

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

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

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

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

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

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

1. 创建并编辑 config 文件

vi ~/.ssh/config

2. 添加服务器配置

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

# 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. 简化登录

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

# 登录 1号服务器(别名 linux-server)
ssh linux-server

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

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

1. 查看 SSH 登录日志

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

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 日志快速定位问题。