将 `ssh -R` 限制到单个端口

将 `ssh -R` 限制到单个端口

我理解该permitopen="host:port"选项将 的使用限制ssh -L在单个远程端口。有没有办法对 做同样的事情ssh -R

答案1

有没有办法做同样的事情ssh -R

并非真的“相同”。对于最常见的用法来说,ssh -R有这样的选项几乎没有意义,但请把这个答案读到最后。


分析

PermitOpen是一个选择sshd_config。它不仅影响,ssh -L还影响和(至少)。我认为它被设计为对 SSH 服务器根据客户端请求发起的 TCP 连接的过滤器。ssh -Dssh -Wssh -J

假设您是服务器的管理员。对于客户端来说,SSH 可能是进入系统的唯一入口,因此客户端可能完全不受信任。系统可能是客户端仅应用来获取通往明确定义位置的隧道的堡垒。您可以进行设置,以便客户端无法运行任意命令。那么您可能需要你的计算机不要为该客户端发起到随机地址的连接。PermitOpen让您轻松配置。

sshd_config限制客户端目标的选项ssh -R对您(SSH 服务器的管理员)没有用,因为:

  1. 如果是ssh -R,任何与目标的连接都address:port将源自客户端的系统,这不是您关心的。您关心的是接口和端口你的系统将监听。有一个选项可以限制此操作:PermitListen

  2. 我认为ssh(客户端的应用程序)甚至没有address:port向 SSH 服务器报告这一点。

  3. 即使它确实如此,修改过的ssh(或任何使用该协议的东西)也可能撒谎。服务器无法知道ssh其端如何处理任何数据。

  4. 即使客户端的应用程序没有说谎,客户端也可以请求address:port您允许并在本地使用iptablessocat或其/etc/hosts自己的 DNS 服务器将隧道连接到另一个地址和另一个端口。

简而言之:作为服务器管理员,您无论如何都无法控制客户端。不要尝试;这不是您的事。

也许你指的是在 中限制ssh -R客户端的选项ssh_config。乍一看,这样的选项有些道理;但仔细想想,你会注意到:

  1. 客户想要对 一些 人 来说 这 是 一条 隧道address:port, 所以 他 或 她 肯定 不会 对 任何 限制 感兴趣~/.ssh/config.

  2. 客户端系统(客户端可能是普通用户)的管理员可能想要施加一些限制,例如/etc/ssh/ssh_config。但是,由于ssh个人配置和命令行选项优先,客户端可以覆盖任何全局配置。这是设计使然,您不应该反对它,因为……

  3. 如果您是客户端系统的管理员,并且您不希望客户端连接到某些,那么如果他们尝试使用或其他任何方式建立此类连接,address:port会有什么区别?您需要一个范围比 的配置更广泛的解决方案。sshncssh

    请注意,存在不对称性:在服务器端,如果 SSH 是客户端进入系统的唯一入口,则限制是sshd_config有意义的。在客户端,客户端是已经在系统中,ssh只是他或她可以使用的一个程序;因此限制(如果需要)应该比在系统中更为系统范围ssh_config


PermitRemoteOpen

有一种情况是,客户端可能想要限制address:portssh可以连接到的地址。 并且它使用ssh -R;但不是ssh -R镜像的ssh -L(我猜这是您想到的),而是ssh -R镜像的形式ssh -D

ssh -R,如果您(作为客户端)不指定任何address:port要转发的内容,则 SSH 服务器将成为 SOCKS 代理,您的计算机将连接到使用代理的人请求的地址。就像ssh -D但事实恰恰相反。

如果是ssh -D,任何使用代理address:port的人都会选择代表他们连接的 SSH 服务器。服务器管理员可能希望限制这一点,PermitOpen就是这样。如果ssh -R充当 SOCKS 代理,同样,任何使用代理的人address:port都会选择代表他们连接的 SSH 客户端应用程序。作为客户端,您可能希望限制这一点,因为一般来说,这些address:port不一定(实际上:永远不是)您的选择,而是您ssh连接到它们。您可以使用PermitRemoteOpen在你的 中~/.ssh/config。这是限制的选项,但它仅在服务器上创建 SOCKS 代理ssh -R时才有效。ssh -R


概括

  • PermitOpensshd_configSSH 服务器限制中ssh -L(和、、ssh -D)。在(或)客户端限制中。ssh -Wssh -JPermitRemoteOpenssh_config~/.ssh/configssh -R

  • 每个选项都由最终发起连接的应用程序的人员控制:分别是服务器(拥有sshd)的管理员和客户端(运行ssh)。ssh -R由服务器管理员进行限制是徒劳的。

  • 每种选择都适用于管理人不是address:port选择要连接的应用程序的人。PermitOpen所有情况都是这样。PermitRemoteOpenssh -R在服务器上创建 SOCKS 代理也是如此。

  • 客户端限制ssh -R其他类型是没有意义的(客户端会限制自己)并且没有选择。

相关内容