在NAT之后的GNU并行多重sshlogin节点

GNU并行的NAT后面有多个远程节点吗?

假设一些GNU并行群集存在于NAT(相对于主节点而言,可能或不可以通过仅操作IPv4的ISP的单个IPv4地址访问)之后。 即多于一个PC节点具有其自己的子网IP地址存在于除主控主节点以外的某个子网上。

有没有办法让GNU并行通过NAT将工作分配给所有这些节点?

经过一些研究和思考这个问题,包括看看这个有点相关的问题

我能想到的唯一方法是使用手册中描述的-p标志为每个节点手动定义不同的端口,然后在NAT中为每个节点手动添加端口转发规则:端口

gnu-parallel中是否有一些“技巧”,可以将作业传递给NAT后面的一个节点,然后从那里发往其子网中的其他节点?

或者也许有一种方法,奴隶节点可以通过一个cron作业通过https POST传递消息,并以某种方式通过公共端口生成并保持已build立的连接? 类似于这个问题所描述的如何获得公共密钥(这个想法绝对超出了我对TCP / IPTABLES的理解,所以我意识到它可能在本质上是有缺陷的)

只能在主节点和从节点内实现的解决scheme比需要NAT条目的解决scheme更可取。

有几个解决scheme。

工作人员在NAT后面。 没有访问跳转主机。 没有访问防火墙。

为此,您需要某种可穿越防火墙的VPN。 这里可以使用工人22号港口的TOR隐藏服务。 如果所有的员工都具有TORfunction:

parallel --ssh 'torsocks ssh' -S zij4uclus7xhwlhz.onion,isj4uclus7xhwlhz.onion,lzw4uclus7xhwlhz.onion echo ::: 1 

如果只有一些是:

 parallel -S 'torsocks ssh zij4uclus7xhwlhz.onion,torsocks ssh isj4uclus7xhwlhz.onion,torsocks ssh lzw4uclus7xhwlhz.onion' echo ::: 1 

工作人员在NAT后面。 没有访问跳转主机。 访问防火墙。

如果可以转发端口,那么端口2001是主机1上的端口22,端口2002是主机2上的端口22,2003是主机3 …则可以使用-p:

 parallel -S 'ssh -p 2001 firewall,ssh -p 2002 firewall,ssh -p 2003 firewall' echo ::: 1 

你可以把它放到.ssh/config

 Host host1.v Port 2001 Host host2.v Port 2002 Host host3.v Port 2003 Host *.v Hostname firewall 

然后简单地使用主机[1-3] .v作为正常的主机:

 parallel -S host1.v,host2.v,host3.v echo ::: 1 

工作人员在NAT后面。 访问跳转主机。

如果您有权访问跳转主机,您可以通过跳转主机访问这些工人,显而易见的情况是:

 parallel --ssh 'ssh jumphost ssh' -S host1 echo ::: DOES NOT WORK 

但这是行不通的,因为这个命令被ssh反写了两次,而GNU Parallel只希望它被扣除一次。

所以改为再次使用.ssh/config

 Host host1 host2 host3 ProxyCommand ssh jump.host.domain nc -w 1 %h 22 

它需要nc (netcat)被安装在jumphost上。