SSH连接的五个阶段
1. 版本协商阶段(Protocol Version Negotiation)
-
目的:协商使用SSH-1或SSH-2协议(现代系统默认SSH-2)。
-
流程:
-
关键点:若版本不兼容(如客户端只支持SSH-1,服务端仅支持SSH-2),连接立即终止。
2. 算法协商阶段(Algorithm Negotiation)
-
目的:协商加密算法、MAC(消息认证码)、密钥交换算法等。
-
流程:
-
算法类型:
- 密钥交换算法:
curve25519-sha256
,ecdh-sha2-nistp256
- 加密算法:
aes256-gcm@openssh.com
,chacha20-poly1305
- MAC算法:
hmac-sha2-256
- 主机密钥算法:
ssh-ed25519
,ecdsa-sha2-nistp256
- 密钥交换算法:
3. 认证阶段(Authentication)
客户端需通过服务端验证,常见方式:密码认证、公钥认证。
🔐 密码认证原理
- 风险:易受暴力破解攻击,建议启用失败次数限制(如
MaxAuthTries 3
)。
🔑 密钥认证原理
- 优势:抵御中间人攻击(依赖主机密钥)、无需传输密码。
- 关键文件:
- 客户端:
~/.ssh/id_ed25519
(私钥),~/.ssh/id_ed25519.pub
(公钥) - 服务端:
~/.ssh/authorized_keys
(存储已授权的公钥)
- 客户端:
4. 会话请求阶段(Session Request)
-
目的:建立交互式Shell、SFTP、端口转发等通道。
-
流程:
-
关键请求类型:
shell
:启动交互式终端subsystem sftp
:启动SFTP服务tcpip-forward
:请求端口转发
5. 数据交互阶段(Data Exchange)
-
安全通道特性:
- 所有数据通过对称加密传输(如AES-256)
- 每个数据包附加MAC校验码防篡改
- 支持压缩(可选)
-
数据传输流程:
认证方式对比总结
特性 | 密码认证 | 密钥认证 |
---|---|---|
安全性 | 较低(易受暴力破解) | 高(非对称加密+签名) |
便捷性 | 需手动输入密码 | 免密码(可配合ssh-agent) |
防中间人攻击 | 依赖主机密钥验证 | 依赖主机密钥验证 |
配置文件 | /etc/ssh/sshd_config | ~/.ssh/authorized_keys |
推荐场景 | 临时访问 | 自动化脚本/常连接 |
SSH完整使用指南
一、SSH服务端部署
# 安装SSH服务
yum -y install openssh openssh-clients# 启动服务并设置开机自启
systemctl restart sshd
systemctl enable sshd# 更改用户登录选项
vim /etc/ssh/sshd_config
# 把选项更改为yes(Centos7有些为默认开启)
#PermitRootLogin yes
二、SSH连接基础
# 基本连接(仅命令行)
ssh username@server_ip# 带图形界面转发(X11 Forwarding)
ssh -X username@server_ip
三、密钥认证配置流程
具体命令:
# 1. 客户端生成密钥(默认RSA算法)
ssh-keygen # 连续回车使用默认设置# 2. 上传公钥到服务器(需验证密码)
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip# 3. 验证密钥登录(无需密码)
ssh username@server_ip
四、文件传输操作
操作类型 | 命令格式 | 示例 |
---|---|---|
SFTP 交互式传输 | sftp user@ip | sftp root@172.25.0.183 |
→ 上传文件 | put [本地文件] [远程路径] | put /local/file /remote/ |
→ 下载文件 | get [远程文件] [本地路径] | get /remote/file /local/ |
SCP 直接传输 | ||
→ 上传文件 | scp [本地文件] user@ip:[远程路径] | scp /tmp/aa root@172.25.0.183:/var |
→ 下载文件 | scp user@ip:[远程文件] [本地路径] | scp root@172.25.0.183:/tmp/cc /var |
📌 路径记忆口诀:
- 上传:
本地文件 → 远程位置
- 下载:
远程文件 → 本地位置
五、SSH协议核心流程
六、安全增强配置
# 禁用密码认证(强制密钥登录)
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd# 使用更安全的Ed25519算法
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@ip
七、常见问题排查
# 查看详细连接过程(调试模式)
ssh -vvv user@ip# 检查公钥权限(服务端)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys# 验证端口监听
ss -tuln | grep :22
💡 最佳实践:
- 生产环境禁用密码认证
- 使用
-J
参数配置跳板机访问内网主机- 定期轮换密钥(建议每90天)
- 使用
Fail2Ban
防御暴力破解
附:SSH协议栈架构
应用层 (SCP/SFTP/SHELL)|
SSH连接协议 (通道管理)|
用户认证协议 (密钥/密码)|
传输层协议 (加密/压缩)|TCP/IP
使用-J
参数配置跳板机访问内网主机
- 定期轮换密钥(建议每90天)
- 使用
Fail2Ban
防御暴力破解
附:SSH协议栈架构
应用层 (SCP/SFTP/SHELL)|
SSH连接协议 (通道管理)|
用户认证协议 (密钥/密码)|
传输层协议 (加密/压缩)|TCP/IP