SSH工作原理
SSH(Secure Shell)是一个加密的网络协议,用于在不安全的网络上安全地操作网络服务。以下是SSH连接的关键阶段:
1. TCP连接建立
- 客户端发起到服务器22端口(默认)的TCP连接
- 建立TCP三次握手
2. 协议版本协商
- 双方交换版本信息(如 SSH-2.0-OpenSSH_9.6p1)
- 确认使用的SSH协议版本(通常是SSHv2)
3. 密钥交换
- 使用算法(如curve25519-sha256)协商会话密钥
- 通过Diffie-Hellman密钥交换生成共享密钥
- 建立加密通道
4. 服务器认证
- 服务器发送其主机密钥
- 客户端验证服务器身份(通过known_hosts)
- 防止中间人攻击
5. 用户认证
- 支持多种认证方式:
- 公钥认证(最推荐)
- 密码认证
- 键盘交互式认证
- 认证成功后建立会话
验证ssh的连接过程
使用ssh -vvv user@host 连接服务器, 查看连接过程
连接建立
debug1: Connecting to 192.168.1.100 [192.168.1.100] port 22.
debug1: Connection established.
客户端通过 TCP 三次握手与服务器的 22 端口建立连接。这是 SSH 通信的基础
协议版本协商
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_9.5
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u4
debug1: compat_banner: match: OpenSSH_9.2p1 Debian-2+deb12u4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 192.168.1.100:22 as 'will'
客户端和服务端互相发送支持的 SSH 协议版本(此处均为 SSH-2.0)。若版本兼容(如 2.0),则进入下一步。
- 本地版本: SSH-2.0-OpenSSH_for_Windows_9.5
- 远程版本: OpenSSH_9.2p1 Debian-2+deb12u4
- 协议版本: 2.0
- 软件版本: OpenSSH_9.2p1 Debian-2+deb12u4
密钥交换
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
双方协商加密算法、MAC 算法、密钥交换算法等(如 Diffie-Hellman),生成临时会话密钥,后续通信基于此密钥加密
服务器认证
debug1: Host '192.168.1.100' is known and matches the ED25519 host key.
debug1: Found key in C:\\Users\\Administrator/.ssh/known_hosts:1
服务器发送其主机密钥,客户端验证服务器身份(通过known_hosts),防止中间人攻击
用户认证
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: C:\\Users\\Administrator/.ssh/id_rsa RSA SHA256:eTpwF5Q96F14o9j53yJgtQXPXKDDq0f+FPVVm2eLPtM
debug1: Server accepts key: C:\\Users\\Administrator/.ssh/id_rsa RSA SHA256:eTpwF5Q96F14o9j53yJgtQXPXKDDq0f+FPVVm2eLPtM
Authenticated to 192.168.1.100 ([192.168.1.100]:22) using "publickey"
debug1: channel 0: new session [client-session] (inactive timeout: 0)
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
客户端尝试使用公钥认证,服务器接受公钥,认证成功, 进入交互式会话