5月28日 00:52
什么是 SSH 协议?它有哪些主要功能和工作原理?
SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中安全地进行远程登录和其他网络服务。它替代了 Telnet、FTP 等明文传输协议,是目前 Linux/Unix 远程管理的标准工具。
核心功能
- 远程登录:通过加密通道登录远程服务器执行命令
- 文件传输:SFTP 和 SCP 提供安全的文件收发
- 端口转发:建立加密隧道,将本地或远程端口流量通过 SSH 隧道转发,实现安全代理
- X11 转发:在本地显示远程图形界面应用
工作原理
SSH 采用客户端-服务器架构,一次完整的连接建立分为五个阶段:
-
版本协商:客户端连接服务器 22 端口后,双方交换版本号,协商使用 SSHv1 还是 SSHv2。当前生产环境应统一使用 SSHv2,SSHv1 已存在已知安全漏洞。
-
算法协商:双方交换各自支持的算法列表,按优先级选出共同支持的最强算法,包括密钥交换算法(ECDH、Diffie-Hellman)、对称加密算法(AES-256-GCM、ChaCha20-Poly1305)、公钥算法(RSA、ECDSA、Ed25519)和 HMAC 算法。
-
密钥交换:通过 Diffie-Hellman 或 ECDH 算法,双方在不直接传输密钥的情况下协商出相同的会话密钥(Session Key),后续所有通信都用该密钥加密。此阶段还会生成会话 ID,用于后续认证过程。
-
身份认证:客户端向服务器证明自己的身份,主要两种方式:
- 密码认证:直接输入用户名密码,简单但易被暴力破解
- 公钥认证:客户端持有私钥,服务器持有对应公钥。客户端用私钥签名一段数据,服务器用公钥验证。安全性更高,推荐生产使用
-
会话交互:认证通过后客户端请求建立会话,服务器分配资源,双方开始加密通信。
关键安全机制
- 主机密钥验证:首次连接时服务器发送主机公钥,客户端将其存入 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 的安全性建立在加密通信和密钥验证之上,理解其连接建立过程和认证机制是运维和后端面试的高频考点。