【安全积累】SSH 命令参数与安全性

79 阅读3分钟

SSH 命令中,-R-J-t 都是非常核心且常用的参数,分别对应远程端口转发跳板机连接终端分配


-R:远程端口转发 (Remote Port Forwarding)

  • 用途:把公网远程服务器上的一个端口,变成内网某个服务的‘入口’,让别人访问远程服务器的某个端口时,实际上是在访问内网上的服务。
  • 场景内网穿透。当你身处内网,外部无法直接访问你,但你可以访问外部,通过此命令在外部服务器上开一个“后门”连回内网。
ssh -R [远程端口]:[目标主机]:[目标端口] user@远程服务器
  • 例子:你在公司内网执行 ssh -R 8080:localhost:80 user@vps。此时,任何人访问公网 vps8080 端口,实际上是在访问你公司机器的 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: