SSH密钥认证:从密码到密钥的安全升级指南

目录

什么是SSH?

SSH的两种登录方式

[1. 密码登录](#1. 密码登录)

[2. 密钥登录](#2. 密钥登录)

公钥与私钥详解

非对称加密基础

密钥存储位置

生成SSH密钥对

基本生成命令

密钥生成过程

SSH密钥登录验证过程

可视化流程

实例

​编辑

总结


什么是SSH?

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中提供安全的远程登录和其他安全网络服务。它取代了不安全的Telnet、rlogin等明文传输协议。


SSH的两种登录方式

1. 密码登录

  • 工作原理:用户输入用户名和密码,服务器验证凭据

  • 优点:简单易用,无需预先配置

  • 缺点:易受暴力破解,安全性依赖密码强度

2. 密钥登录

  • 工作原理:使用非对称加密技术进行身份验证

  • 优点:更高的安全性,抵抗暴力攻击

  • 缺点:需要前期配置,管理稍复杂


公钥与私钥详解

非对称加密基础

在非对称加密体系中,存在一对数学上相关的密钥:

私钥

  • 相当于你的"个人印章"或"身份证"

  • 必须严格保密,绝不共享

  • 用于解密数据和生成数字签名

公钥

  • 相当于你的"公开展示柜"或"身份证明复印件"

  • 可以自由分发,无安全风险

  • 用于加密数据和验证签名

密钥存储位置

私钥存储路径

bash

复制代码
~/.ssh/id_rsa          # RSA算法私钥
~/.ssh/id_ecdsa        # ECDSA算法私钥  
~/.ssh/id_ed25519      # Ed25519算法私钥

公钥存储路径

bash

复制代码
~/.ssh/id_rsa.pub      # RSA公钥
~/.ssh/id_ecdsa.pub    # ECDSA公钥
~/.ssh/id_ed25519.pub  # Ed25519公钥

服务器授权文件

bash

复制代码
~/.ssh/authorized_keys  # 存储允许登录的公钥列表

生成SSH密钥对

基本生成命令

bash 复制代码
#直接写
ssh-keygen

# 生成RSA密钥(兼容性最好)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 生成Ed25519密钥(更安全、更快速)
ssh-keygen -t ed25519 -C "your_email@example.com"

密钥生成过程

bash 复制代码
输入生成命令
    ↓
选择保存路径(默认~/.ssh/id_算法)
    ↓  
设置密钥密码(可选但推荐)
    ↓
生成密钥对:私钥 + 公钥
    ↓
设置正确的文件权限

SSH密钥登录验证过程

可视化流程

bash 复制代码
+----------+          +-----------------+          +------------+
|  客户端   |          |    SSH服务器     |          | 授权密钥文件 |
+----------+          +-----------------+          +------------+
     |                         |                         |
     | 1. 连接请求             |                         |
     |----------------------->|                         |
     |                         |                         |
     |                         | 2. 查找匹配公钥         |
     |                         |----------------------->|
     |                         |                         |
     |                         | 3. 生成随机挑战         |
     |                         | 用公钥加密              |
     |                         |                         |
     | 4. 发送加密挑战         |                         |
     |<-----------------------|                         |
     |                         |                         |
     | 5. 用私钥解密           |                         |
     | 获得原始挑战            |                         |
     |                         |                         |
     | 6. 发送挑战答案         |                         |
     |----------------------->|                         |
     |                         |                         |
     |                         | 7. 验证答案             |
     |                         |                         |
     | 8. 认证成功             |                         |
     |<-----------------------|                         |
     |                         |                         |
     | 9. 建立加密会话         |                         |
     |<======================>|                         |

实例

生成rsa非对称密钥对

将公钥发送

登录时流程:

复制代码
客户端 (foundation0)             服务器 (workstation)
      |                                |
      | --- SSH连接请求 --->           |
      |                                |
      | <--- 发送公钥挑战 ---         | 服务器生成随机数,用客户端公钥加密
      |                                |
      | --- 私钥解密后响应 --->        | 客户端用私钥解密,证明拥有私钥
      |                                |
      | <--- 认证成功 ---             | 服务器验证响应正确
      |                                |
      | === 对称加密会话 ===         | 建立加密通道传输数据

总结

SSH密钥认证提供了比传统密码认证更高级别的安全性。通过理解公钥私钥的工作原理和完整的认证流程,你可以:

  • ✅ 实现无需密码的安全远程访问

  • ✅ 有效防御暴力密码破解攻击

  • ✅ 建立更加可靠的自动化运维流程

  • ✅ 提升整体系统安全水平

相关推荐
CSCN新手听安3 小时前
【linux】多线程(六)生产者消费者模型,queue模拟阻塞队列的生产消费模型
linux·运维·服务器·c++
Wang's Blog3 小时前
Linux小课堂: 软件安装与源码编译实战之从 RPM 到源码构建的完整流程
linux·运维·服务器
超级大福宝3 小时前
在 Linux 下修改百度网盘的缩放比例
linux·运维·服务器·ubuntu
怪只怪满眼尽是人间烟火3 小时前
Linux端口监控脚本
运维·javascript
Wang's Blog3 小时前
Linux小课堂: 深入理解前后台进程控制机制——基于 &、nohup、Ctrl+Z、bg 与 fg 的完整实践体系
linux·运维·服务器
秉承初心3 小时前
Linux中Expect脚本和Shell的脚本核心特点解析、以及比对分析和应用场景
linux·运维·服务器·sh·exp
脏脏a3 小时前
【Linux】Linux:sudo 白名单配置与 GCC/G++ 编译器使用指南
linux·运维·服务器
码农阿豪4 小时前
一个浏览器多人用?Docker+Neko+cpolar实现跨网共享
运维·docker·容器