本文以简明步骤演示如何让目标主机通过反向连接到ew跳板机,并用常见工具完成链路验证。示例采用SSH反向隧道与保持进程的方式,适合内网穿透与临时维护场景。
需要两台可用主机:一台作跳板机(公网IP或能被访问),另一台为目标主机(内网或受限)。两端需安装openssh。建议准备一对公钥/私钥用于无密码登录。
在目标主机生成密钥:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
将公钥追加到跳板机的授权列表:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@jump.example.com
确认跳板机上~/.ssh/authorized_keys权限正确,避免因权限问题被拒绝。
在目标主机执行反向隧道命令,将目标的本地端口映射到跳板机上:
ssh -N -R 2222:localhost:22 user@jump.example.com -i ~/.ssh/id_ed25519
该命令会在跳板机监听2222端口,任何连接到跳板机:2222的流量被转发回目标主机的22端口,从而实现反向连接。
用autossh可自动重连:
autossh -M 0 -N -f -o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" -R 2222:localhost:22 user@jump.example.com -i ~/.ssh/id_ed25519
也可写成systemd服务以便开机自启并管理日志。
从跳板机连接回目标主机的SSH端口:
ssh -p 2222 localhost
也可用netcat或socat测试任意TCP端口连通性。若SSH登录成功,即表示隧道建立并通过。
若连接失败,先查看两端的SSH日志,并确认跳板机的防火墙与NAT规则允许监听端口。用tcpdump在跳板机上抓包:
sudo tcpdump -i any port 2222 -n -vv
抓包能显示是否有到达的TCP握手,结合SSH日志可以定位问题。
限制跳板机上反向端口的访问来源,使用sshd_config中的Match或防火墙规则限制;为关键服务启用双因素认证或仅允许密钥登录。定期轮换密钥与检查日志。
可将反向隧道用于内网运维、临时应急接入或把内网HTTP服务映射到跳板机。复杂场景建议结合反向代理或专门的内网穿透工具,但基础流程仍是:密钥配置 → 建链路 → 持久化 → 验证。
问:若跳板机无法监听指定端口,如何排查?
答:检查跳板机sshd配置中是否允许GatewayPorts,确认防火墙/NAT规则,查看sshd日志和使用tcpdump监控目标端口是否有流量。
问:反向隧道会否带来安全风险?如何降低?
答:存在风险,尤其是未经限制的端口暴露。可通过仅允许密钥登录、限制来源IP、使用专用账户与限制其权限、以及使用监控和告警等措施来降低风险。