深入浅出 SSH
一个交互式指南,带你从入门到精通,掌握安全远程连接的艺术。
你的电脑
远程服务器
滚动页面,开始你的 SSH 探索之旅。
什么是 SSH?
SSH (Secure Shell) 是一种网络协议,用于在不安全的网络上安全地操作网络服务。它就像一个加密的管道,保护你和远程服务器之间的所有通信。
SSH 连接的两个阶段
点击按钮,查看 SSH 如何建立安全连接。
客户端
非对称加密握手
客户端和服务器交换公钥,协商出一个只有双方知道的、用于本次会话的“秘密密码”(会话密钥)。这个过程确保了密钥交换的安全性。
服务器
密钥管理策略
管理多台服务器的密钥是系统管理员的常见问题。以下是两种主流策略的对比,帮助你做出最佳选择。
策略 A: 一把钥匙开多扇门
在你的本地机器上使用一个私钥,并将对应的公钥部署到所有你管理的服务器上。
优点:
- 管理简单,只需保护一个私钥。
- 部署新服务器时操作统一。
缺点:
- 私钥一旦泄露,所有服务器都将面临风险。
- 无法单独撤销对某台服务器的访问权限。
策略 B: 一门一钥匙 (推荐)
为每一台(或每一组)服务器生成一个独立的密钥对。本地机器管理多个私钥。
优点:
- 安全性极高,风险隔离。
- 可以精细化地管理和撤销访问权限。
缺点:
- 本地需要管理多个私钥,稍显复杂。
- 连接不同服务器时可能需要指定密钥。
策略对比可视化
点击按钮,切换查看不同维度的评分。
SSH 安全强化清单
默认的 SSH 配置并不完美。遵循这些最佳实践,可以极大地提高你服务器的安全性。点击卡片查看详情和配置示例。
🚫 禁用密码认证
强制使用密钥认证,杜绝暴力破解密码的风险。
/etc/ssh/sshd_config
PasswordAuthentication no
👤 禁止 Root 登录
避免直接使用 root 用户登录,强制使用普通用户再提权。
/etc/ssh/sshd_config
PermitRootLogin no
🔢 更改默认端口
将 SSH 端口从 22 改为其他高位端口,躲避自动化扫描。
/etc/ssh/sshd_config
Port 2222
🛡️ 使用 Fail2Ban
自动禁止多次尝试登录失败的 IP 地址。
这是一个软件,需要安装和配置,例如在 Debian/Ubuntu:
sudo apt update
sudo apt install fail2ban
🔥 配置防火墙
只允许受信任的 IP 或特定端口访问 SSH 服务。
使用 UFW (Uncomplicated Firewall) 的示例:
sudo ufw allow 2222/tcp
sudo ufw enable
⏳ 限制登录尝试
在认证成功前,限制单一连接的最大尝试次数。
/etc/ssh/sshd_config
MaxAuthTries 3
高级技巧:隧道与跳板机
利用 SSH 的强大功能来保护其他网络流量,并构建更安全的网络架构,减少服务暴露面。
探索高级用法
点击按钮,切换查看不同的高级技巧示意图。
SSH 隧道 (端口转发)
将本地端口的流量通过 SSH 加密通道转发到远程服务器,从而安全地访问远程服务器上的服务(如数据库),就好像它在你本地一样。
你的电脑
访问 localhost:8080
远程服务器
SSH 将流量转发到
db.server:5432
示例命令:
ssh -L 8080:db.server:5432 user@remote-server.com
使用跳板机
不将内部服务器的 SSH 端口直接暴露在公网上,而是通过一台加固的“跳板机”进行中转。这是企业级的标准安全实践。
你的电脑
跳板机
(公网可访问)
内部服务器
(仅内网可访问)
示例命令 (ProxyJump):
ssh -J user@bastion-host.com user@internal-server.local