SSH 命令中,-R、-J 和 -t 都是非常核心且常用的参数,分别对应远程端口转发、跳板机连接和终端分配。
-R:远程端口转发 (Remote Port Forwarding)
- 用途:把公网远程服务器上的一个端口,变成内网某个服务的‘入口’,让别人访问远程服务器的某个端口时,实际上是在访问内网上的服务。
- 场景:内网穿透。当你身处内网,外部无法直接访问你,但你可以访问外部,通过此命令在外部服务器上开一个“后门”连回内网。
ssh -R [远程端口]:[目标主机]:[目标端口] user@远程服务器
- 例子:你在公司内网执行
ssh -R 8080:localhost:80 user@vps。此时,任何人访问公网vps的8080端口,实际上是在访问你公司机器的 80 端口。 - 安全性:高风险。它极易被用来绕过防火墙,将受保护的内网服务暴露给公网
-J:跳板机连接 (Jump Host)
- 用途:通过一台或多台中间服务器(跳板机)作为中转,最终连接到目标服务器。
- 场景:生产环境的服务器通常不开启公网 IP,必须先登录一台受控的“堡垒机”,再从堡垒机跳转。使用
-J可以实现一键直达,无需分步登录,比如- 攻击者拿到了一台公司外网 Web 服务器的权限
- 在 Web 服务器上执行:
ssh -J 堡垒机A 数据库B,如果管理员配置不当,这种方式可以实现自动化、静默式的横向移动。 - 把跳板机当成一个“透明管道”,直接探测、扫描内网中原本不可见的敏感区域。
- 隐蔽性:
-J建立的是加密隧道。对于网络侧的防火墙来说,它只看到你在和跳板机通信,却不知道你正在通过跳板机疯狂尝试连接内网的其他 100 台服务器 - 绕过限制:有些跳板机只限制了“用户登录后的操作”,但如果没有限制“端口转发”或“隧道建立”,攻击者就可以利用
-J绕过跳板机上的命令审计
- 隐蔽性:
- 例子:
ssh -J proxy.example.com target.internal.com。SSH 会先建立到proxy的隧道,再通过隧道连接target。 - 安全性:中高风险。虽然是合规路径,但攻击者可能利用
-J尝试探测内网中更深层的敏感区域。
-t:强制分配伪终端 (Force TTY Allocation)
- 用途:强制 SSH 为当前的会话分配一个交互式的文本终端(TTY)。
- 场景:执行交互式程序或 sudo。当你远程执行一个需要交互(如输入密码、查看动态界面)的命令时,如果没有终端会报错。
- 例子:
ssh -t user@server "sudo systemctl restart nginx"。因为sudo需要输入密码,必须加-t才能弹出密码提示符。-
没有
-t的返回: 你会看到报错:sudo: a terminal is required to read the password(sudo 需要终端才能读取密码)。 -
有了
-t的返回: 你会看到:[sudo] password for user:。
-