GNU 并行 - 运行 代理主机

GNU parallel - running with proxy host

我最近一直在处理 GNU 并行和并行计算。我有两台机器可用,一台在我工作的地方,一台在代理机器后面,所以我在 A 工作,我只能通过 B 访问 C,我不能在 B 上计算。

我的问题是,如何为 GNU parallel 创建主机文件以了解我想与机器 C 共享文件?我已启用从 B 到 B 和 C 的无密码登录。

谢谢!

发件人:https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Using-remote-computers-behind-NAT-wall

示例:使用 NAT 墙后面的远程计算机

如果工作人员在 NAT 墙后面,您需要一些技巧才能找到他们。

如果您可以通过 ssh 连接到跳转主机,并从那里连接到工作人员,那么显而易见的解决方案就是这个,但它不起作用:

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

它不起作用,因为该命令被 ssh 引用两次,而 GNU parallel 只希望它被引用一次。

所以把这个放在 ~/.ssh/config:

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

需要在 jumphost 上安装 nc(netcat)。有了这个,您可以简单地:

parallel -S host1,host2,host3 echo ::: This does work

没有跳转主机,但端口转发

如果没有jumphost但是每台服务器都有从防火墙转发过来的端口22(例如防火墙的端口22001=host1的端口22,22002=host2,22003=host3)那么你可以使用~/.ssh/config:

Host host1.v
    Port 22001
Host host2.v
    Port 22002
Host host3.v
    Port 22003
Host *.v
    Hostname firewall

然后使用 host{1..3}.v 作为普通主机:

parallel -S host1.v,host2.v,host3.v echo ::: a b c

没有跳转主机,没有端口转发

如果无法转发端口,则需要某种 VPN 来穿越 NAT 墙。 TOR 是一种选择,因为它很容易开始工作。

您需要安装 TOR 并设置隐藏服务。在 torrc 中输入:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 22 127.0.0.1:22

然后启动 TOR:/etc/init.d/tor 重启

TOR 主机名现在位于 /var/lib/tor/hidden_service/hostname 中,类似于 izjafdceobowklhz.onion。现在你只需将 torsocks 添加到 ssh:

parallel --ssh 'torsocks ssh' -S izjafdceobowklhz.onion \
    -S zfcdaeiojoklbwhz.onion,auclucjzobowklhi.onion echo ::: a b c

如果不是所有主机都可以通过 TOR 访问:

parallel -S 'torsocks ssh izjafdceobowklhz.onion,host2,host3' echo ::: a b c