如何使用 SSH 密钥对保护 Linux 远程访问安全

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面教程将探讨 SSH 密钥认证,这是 Linux 环境中安全远程访问的关键安全机制。通过了解 SSH 密钥的基本原理,用户可以实施强大的加密认证方法,取代传统的基于密码的登录技术,从而增强系统安全性和访问管理。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/RemoteAccessandNetworkingGroup -.-> linux/scp("Secure Copying") linux/RemoteAccessandNetworkingGroup -.-> linux/sftp("Secure File Transferring") linux/PackagesandSoftwaresGroup -.-> linux/openssl("OpenSSL") subgraph Lab Skills linux/env -.-> lab-409939{{"如何使用 SSH 密钥对保护 Linux 远程访问安全"}} linux/ssh -.-> lab-409939{{"如何使用 SSH 密钥对保护 Linux 远程访问安全"}} linux/scp -.-> lab-409939{{"如何使用 SSH 密钥对保护 Linux 远程访问安全"}} linux/sftp -.-> lab-409939{{"如何使用 SSH 密钥对保护 Linux 远程访问安全"}} linux/openssl -.-> lab-409939{{"如何使用 SSH 密钥对保护 Linux 远程访问安全"}} end

SSH 密钥基础

理解 SSH 密钥

SSH 密钥是用于在 Linux 和网络环境中进行安全认证的加密凭证。与传统的基于密码的登录方法相比,它们提供了一种更强大的安全机制。SSH 密钥由两个组件组成:公钥和私钥,它们共同作用以建立安全的加密连接。

SSH 密钥的关键特性

特性 描述
认证类型 公钥加密
安全级别
用例 远程服务器访问、Git 仓库、云基础设施
密钥组件 公钥、私钥

SSH 密钥认证工作流程

graph LR A[客户端] -->|发送公钥| B[服务器] B -->|发起挑战| A A -->|用私钥响应| B B -->|授予访问权限| A

加密基础

SSH 密钥利用非对称加密算法。公钥可以自由共享,而私钥必须保密。当发起连接时,服务器使用公钥创建一个只有相应私钥才能解决的挑战。

代码示例:在 Ubuntu 22.04 上生成 SSH 密钥

## 使用 RSA 算法生成 SSH 密钥对
ssh-keygen -t rsa -b 4096 -C "[email protected]"

## 输出展示了密钥生成过程
## 正在生成公钥/私钥 rsa 密钥对
## 输入要保存密钥的文件(/home/user/.ssh/id_rsa):
## 创建目录 '/home/user/.ssh'
## 输入密码短语(留空则无密码短语):

该代码演示了生成一个 4096 位加密的 RSA 密钥对,这为远程认证场景提供了强大的安全性。

创建 SSH 密钥对

SSH 密钥生成过程

SSH 密钥对是安全远程认证的基础。密钥生成过程涉及使用加密算法创建公钥和私钥。Ubuntu 22.04 提供了强大的工具来高效生成这些密钥。

密钥生成方法

方法 算法 密钥长度 安全级别
RSA 非对称 2048 - 4096 位
ED25519 椭圆曲线 256 位 非常高
ECDSA 椭圆曲线 256 - 521 位

SSH 密钥生成工作流程

graph LR A[开始] --> B[选择密钥类型] B --> C[选择密钥长度] C --> D[生成私钥] D --> E[生成公钥] E --> F[保存密钥对] F --> G[结束]

在 Ubuntu 22.04 上生成 SSH 密钥

## 使用强加密生成 RSA 密钥对
ssh-keygen -t rsa -b 4096 -C "[email protected]"

## 生成 ED25519 密钥对以增强安全性
ssh-keygen -t ed25519 -C "[email protected]"

## 指定自定义密钥位置
ssh-keygen -t rsa -b 4096 -f ~/.ssh/custom_key

该代码演示了不同的 SSH 密钥生成技术,允许用户在 RSA 和 ED25519 算法之间进行选择,并可使用可定制参数。

密钥生成选项

## 查看密钥生成选项
ssh-keygen -h

## 密钥生成标志解释:
## -t:指定密钥类型
## -b:设置密钥位长度
## -C:向密钥添加注释
## -f:定义密钥文件位置

实现 SSH 认证

SSH 认证机制

SSH 认证通过多种认证方法提供对远程系统的安全访问。与传统的基于密码的方法相比,基于密钥的认证提供了更高的安全性。

认证方法比较

方法 安全级别 认证类型 复杂度
密码 基于凭证 简单
基于密钥 加密 高级
双因素 非常高 多因素 复杂

SSH 认证工作流程

graph LR A[客户端] -->|发送公钥| B[SSH 服务器] B -->|生成挑战| A A -->|用私钥响应| B B -->|验证认证| A

配置 SSH 密钥认证

## 将公钥复制到远程服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host

## 编辑 SSH 服务器配置
sudo nano /etc/ssh/sshd_config

## 配置认证设置
PubkeyAuthentication yes
AuthorizedKeysFile.ssh/authorized_keys
PasswordAuthentication no

保护 SSH 配置

## 限制 SSH 密钥权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

## 重启 SSH 服务
sudo systemctl restart ssh

该配置通过修改 SSH 服务器设置并设置适当的文件权限来确保基于密钥的安全认证。

总结

SSH 密钥是一种先进的认证方法,它利用公钥加密技术在客户端和服务器之间建立安全的加密连接。通过生成并正确配置 SSH 密钥对,Linux 用户可以显著提高其远程访问安全性、保护敏感基础设施,并在各种网络环境中实现更可靠的认证机制。