如何通过用户名将 ssh 端口重定向到另一个端口?

如何通过用户名将 ssh 端口重定向到另一个端口?

sshd: Listen 2222在服务器上有,我想要做的是: ssh -p 2222 userA@ip,服务器找到userA,然后将此连接重定向6122到此服务器的端口,但我不想在本地机器上进行修改,因为有数百个用户,所有这些用户都有自己的 docker 容器,例如,对于用户userA,我sshd在其容器上运行,并将22端口暴露给6122主机的端口。所以我想使用iptables或其他方式转发Host:2222Container:6122

我尝试过如下命令:

iptables -t nat -A userA_rules -p tcp --dport 2222 -j REDIRECT --to-port 6122
iptables -A OUTPUT -m owner --uid-owner userA -j userA_rules

但它不起作用。我是新手iptables,所以我不知道哪里出了问题。我也尝试过修改/etc/ssh/sshd_config以使用Match User userA块,但我也失败了。任何建议都将不胜感激。

答案1

iptables 所有者模块仅适用于生成数据包的机器上的本地生成的数据包,而不是远程服务器上的数据包。

https://manpages.ubuntu.com/manpages/focal/en/man8/iptables-extensions.8.html

owner
   This  module  attempts to match various characteristics of the packet creator, for locally
   generated packets. This match  is  only  valid  in  the  OUTPUT  and  POSTROUTING  chains.
   Forwarded packets do not have any socket associated with them. Packets from kernel threads
   do have a socket, but usually no owner.

但是该 UID/GID 在服务器外部不可用。

Iptables 适用于 TCP/IP 网络数据包。数据包具有目标 IP 目标端口、源 IP 和源端口,但没有属性表明:它们是由freshzy源计算机上的用户或 UID #123 生成的。因此,远程服务器上的 iptables 根本没有信息来执行您希望它执行的操作;为远程计算机上的一位用户创建规则。

相关内容