我理解该permitopen="host:port"
选项将 的使用限制ssh -L
在单个远程端口。有没有办法对 做同样的事情ssh -R
?
答案1
有没有办法做同样的事情
ssh -R
?
并非真的“相同”。对于最常见的用法来说,ssh -R
有这样的选项几乎没有意义,但请把这个答案读到最后。
分析
PermitOpen
是一个选择sshd_config
。它不仅影响,ssh -L
还影响和(至少)。我认为它被设计为对 SSH 服务器根据客户端请求发起的 TCP 连接的过滤器。ssh -D
ssh -W
ssh -J
假设您是服务器的管理员。对于客户端来说,SSH 可能是进入系统的唯一入口,因此客户端可能完全不受信任。系统可能是客户端仅应用来获取通往明确定义位置的隧道的堡垒。您可以进行设置,以便客户端无法运行任意命令。那么您可能需要你的计算机不要为该客户端发起到随机地址的连接。PermitOpen
让您轻松配置。
sshd_config
限制客户端目标的选项ssh -R
对您(SSH 服务器的管理员)没有用,因为:
如果是
ssh -R
,任何与目标的连接都address:port
将源自客户端的系统,这不是您关心的。您关心的是接口和端口你的系统将监听。有一个选项可以限制此操作:PermitListen
。我认为
ssh
(客户端的应用程序)甚至没有address:port
向 SSH 服务器报告这一点。即使它确实如此,修改过的
ssh
(或任何使用该协议的东西)也可能撒谎。服务器无法知道ssh
其端如何处理任何数据。即使客户端的应用程序没有说谎,客户端也可以请求
address:port
您允许并在本地使用iptables
、socat
或其/etc/hosts
自己的 DNS 服务器将隧道连接到另一个地址和另一个端口。
简而言之:作为服务器管理员,您无论如何都无法控制客户端。不要尝试;这不是您的事。
也许你指的是在 中限制ssh -R
客户端的选项ssh_config
。乍一看,这样的选项有些道理;但仔细想想,你会注意到:
客户想要对 一些 人 来说 这 是 一条 隧道
address:port
, 所以 他 或 她 肯定 不会 对 任何 限制 感兴趣~/.ssh/config
.客户端系统(客户端可能是普通用户)的管理员可能想要施加一些限制,例如
/etc/ssh/ssh_config
。但是,由于ssh
个人配置和命令行选项优先,客户端可以覆盖任何全局配置。这是设计使然,您不应该反对它,因为……如果您是客户端系统的管理员,并且您不希望客户端连接到某些,那么如果他们尝试使用或其他任何方式建立此类连接,
address:port
会有什么区别?您需要一个范围比 的配置更广泛的解决方案。ssh
nc
ssh
请注意,存在不对称性:在服务器端,如果 SSH 是客户端进入系统的唯一入口,则限制是
sshd_config
有意义的。在客户端,客户端是已经在系统中,ssh
只是他或她可以使用的一个程序;因此限制(如果需要)应该比在系统中更为系统范围ssh_config
。
PermitRemoteOpen
有一种情况是,客户端可能想要限制address:port
其ssh
可以连接到的地址。 并且它使用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
概括
PermitOpen
在sshd_config
SSH 服务器限制中ssh -L
(和、、ssh -D
)。在(或)客户端限制中。ssh -W
ssh -J
PermitRemoteOpen
ssh_config
~/.ssh/config
ssh -R
每个选项都由最终发起连接的应用程序的人员控制:分别是服务器(拥有
sshd
)的管理员和客户端(运行ssh
)。ssh -R
由服务器管理员进行限制是徒劳的。每种选择都适用于管理人不是
address:port
选择要连接的应用程序的人。PermitOpen
所有情况都是这样。PermitRemoteOpen
仅ssh -R
在服务器上创建 SOCKS 代理也是如此。客户端限制
ssh -R
其他类型是没有意义的(客户端会限制自己)并且没有选择。