5月28日 00:52

什么是 SSH 协议?它有哪些主要功能和工作原理?

SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中安全地进行远程登录和其他网络服务。它替代了 Telnet、FTP 等明文传输协议,是目前 Linux/Unix 远程管理的标准工具。

核心功能

  • 远程登录:通过加密通道登录远程服务器执行命令
  • 文件传输:SFTP 和 SCP 提供安全的文件收发
  • 端口转发:建立加密隧道,将本地或远程端口流量通过 SSH 隧道转发,实现安全代理
  • X11 转发:在本地显示远程图形界面应用

工作原理

SSH 采用客户端-服务器架构,一次完整的连接建立分为五个阶段:

  1. 版本协商:客户端连接服务器 22 端口后,双方交换版本号,协商使用 SSHv1 还是 SSHv2。当前生产环境应统一使用 SSHv2,SSHv1 已存在已知安全漏洞。

  2. 算法协商:双方交换各自支持的算法列表,按优先级选出共同支持的最强算法,包括密钥交换算法(ECDH、Diffie-Hellman)、对称加密算法(AES-256-GCM、ChaCha20-Poly1305)、公钥算法(RSA、ECDSA、Ed25519)和 HMAC 算法。

  3. 密钥交换:通过 Diffie-Hellman 或 ECDH 算法,双方在不直接传输密钥的情况下协商出相同的会话密钥(Session Key),后续所有通信都用该密钥加密。此阶段还会生成会话 ID,用于后续认证过程。

  4. 身份认证:客户端向服务器证明自己的身份,主要两种方式:

    • 密码认证:直接输入用户名密码,简单但易被暴力破解
    • 公钥认证:客户端持有私钥,服务器持有对应公钥。客户端用私钥签名一段数据,服务器用公钥验证。安全性更高,推荐生产使用
  5. 会话交互:认证通过后客户端请求建立会话,服务器分配资源,双方开始加密通信。

关键安全机制

  • 主机密钥验证:首次连接时服务器发送主机公钥,客户端将其存入 known_hosts 文件。后续连接时核对该公钥,若变化则发出警告,防止中间人攻击
  • 前向保密:SSHv2 使用临时密钥交换,即使长期私钥泄露,历史会话密钥也无法被推算
  • 完整性校验:每个数据包附带 HMAC,确保传输过程中数据未被篡改

端口转发的三种类型

  • 本地转发(-L):将本地端口映射到远程服务器可达的某个地址,例如将本地 3306 端口安全访问内网数据库
  • 远程转发(-R):将远程端口映射回本地,常用于内网穿透
  • 动态转发(-D):创建 SOCKS 代理,按需转发流量

常用命令

bash
# 基本连接 ssh user@hostname # 指定端口 ssh -p 2222 user@hostname # 使用密钥认证 ssh -i ~/.ssh/id_ed25519 user@hostname # 本地端口转发 ssh -L 8080:localhost:80 user@remote # SCP 文件传输 scp file.txt user@hostname:/tmp/

生产环境安全加固

  • 禁用密码登录,仅允许公钥认证(PasswordAuthentication no)
  • 禁用 root 直接登录(PermitRootLogin no)
  • 更换默认端口减少扫描
  • 使用 Ed25519 替代 RSA 生成密钥对(更短更安全)
  • 配置 AllowUsers 限制可登录用户

SSH 的安全性建立在加密通信和密钥验证之上,理解其连接建立过程和认证机制是运维和后端面试的高频考点。

标签:SSH