1.
准备与规划(重要的第一步)
- 确定用途:仅 SSH 跳转、还是同时做代理/端口转发/堡垒机录制。
- 网络架构:跳板机通常放在边界网络(DMZ)或单独子网,与目标内网用安全通道连接,记录允许访问的源 IP 列表。
- 选择系统:推荐使用 LTS 的 Linux 发行版(如:Ubuntu LTS / Debian Stable / CentOS Stream)。准备好公网固定 IP 或弹性 IP。
2.
创建与安装操作系统(以 Ubuntu 22.04 为例)
- 使用云平台镜像或 ISO 安装最小化系统;安装时只保留必要服务。
- 更新系统并安装常用工具:sudo apt update && sudo apt upgrade -y;sudo apt install -y vim fail2ban ufw auditd rsyslog
3.
创建非 root 管理账号并禁用 root 登录
- 添加管理员用户:sudo adduser jumpadmin && sudo usermod -aG sudo jumpadmin。
- 禁用 root SSH 登录:编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no,并在后面重启:sudo systemctl restart sshd。
- 常见命令示例:ssh-keygen -t ed25519 -C "your@key"(在本地生成),ssh-copy-id -i ~/.ssh/id_ed25519.pub jumpadmin@jump.ip
4.
SSH 密钥认证与权限要求(避免权限错误)
- 强制使用公钥认证:在 /etc/ssh/sshd_config 设置 PasswordAuthentication no,PubkeyAuthentication yes。重启 sshd。
- .ssh 权限:用户家目录下~/.ssh 权限应为700,authorized_keys 为600,否则 SSH 会拒绝:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys。
- 推荐使用 ed25519 或 RSA 4096;避免弱密钥。
5.
sshd_config 必备配置示例(关键项)
- 关键配置片段:
Port 22(或改端口,例如 2222)
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers jumpadmin yourops_user@example.com(或 AllowUsers jumpadmin@192.0.2.0/24)
X11Forwarding no
AllowTcpForwarding no(如果只需 ProxyJump,可设为 yes 并配合 ForceCommand 限制)
- 修改后:sudo systemctl restart sshd
6.
防火墙与网络限制(UFW/iptables 示例)
- 使用 UFW(Ubuntu):sudo ufw default deny incoming; sudo ufw default allow outgoing; sudo ufw allow from YOUR_IP to any port 22 proto tcp; sudo ufw enable。
- 若改端口:sudo ufw allow 2222/tcp 并确保规则先测试,不要把自己锁死。云平台控制台应保留紧急访问方式。
7.
多因素认证与跳板扩展
- 可选 PAM+Google Authenticator 或使用 SSH 证书(OpenSSH CA)与短期证书签发,增强安全。
- Ubuntu 安装 MFA 示例:sudo apt install libpam-google-authenticator,配置 /etc/pam.d/sshd 并在 sshd_config 中 ChallengeResponseAuthentication yes。
8.
审计与日志(便于事后追溯)
- 开启系统审计:sudo apt install auditd,配置 /etc/audit/audit.rules 起记录关键文件访问。
- 集中日志:将 ssh 登录日志 /var/log/auth.log 发送到集中日志系统(ELK/Graylog),并保留至少 90 天以上的登录审计。
9.
Fail2ban 与暴力破解防护
- 安装并启用:sudo apt install fail2ban,配置 /etc/fail2ban/jail.local,添加 sshd 监控并自定义 ban 时间与阈值。
- 小心规则:当使用动态 IP 的管理员时,避免误封导致无法访问,建议写白名单 IP 列表。
10.
备份、应急访问与密钥管理
- 准备备用访问:至少配置一个多重认证管理员账户与云提供商控制台紧急密钥。
- 定期轮换密钥并记录变更;使用私钥保护密码(ssh-keygen -o)并严格保管私钥。
- 若误锁:确保云控制台能打开临时串口或重置 sshd_config。
11.
常见配置陷阱与如何避免
- 陷阱1:开放密码认证(PasswordAuthentication yes)→ 危险,改为 no 并用密钥。
- 陷阱2:.ssh 权限不正确导致密钥无效→ 检查权限 700/600。
- 陷阱3:修改端口后忘记更新安全组/防火墙,导致被锁死→ 先添加规则再修改端口。
- 陷阱4:AllowTcpForwarding 全开导致内网横向移动风险→ 仅对必要用户放开或使用 ForceCommand 限制。
12.
运维操作范例:用 ProxyJump 连内网目标
- 本地 ssh 配置示例(~/.ssh/config):
Host bastion
HostName bastion.example.com
User jumpadmin
IdentityFile ~/.ssh/id_ed25519
Host target
HostName 10.0.0.10
User appuser
ProxyJump bastion
- 使用方式:ssh target(会自动通过
跳板机代理连接)。
13.
安全加固建议(不止一层)
- 使用最小服务原则,只安装必需软件;及时打补丁并监控异常登录。
- 强制密钥登录、启用 MFA、设置登录审计和告警(异常 IP、登录频率)。
- 定期做红队/渗透测试验证跳板机策略是否存在绕过风险。
14.
问:我忘记了将新的公钥放到跳板机上且又被锁死,如何恢复访问?
答:如果是云主机,可通过云控制台的“串口/控制台访问”或“重置 SSH 密钥”功能进入实例;若无云控制台,需通过提供商的救援系统或挂载磁盘到救援主机,手动修改 /home/用户/.ssh/authorized_keys 或恢复 sshd_config。
15.
问:跳板机上是否应允许端口转发(AllowTcpForwarding)?
答:默认应设为 no,除非明确需要(例如使用 ProxyJump)。若必须允许,建议只对特定用户通过 Match User/Match Group 在 sshd_config 中放行,并配合严格日志与 ACL。
16.
问:如何在保持可用性的同时确保跳板机不成为单点故障?
答:部署至少两台跳板机并开启负载均衡或 DNS 轮询,关键是同步用户/公钥和配置(可用配置管理工具如 Ansible 管理),并把审计和密钥存储在集中系统,确保一台宕机时另一台可接管。
来源:初学者向设置跳板机实操指南含常见配置陷阱解析