【发布时间】:2016-10-20 16:09:37
【问题描述】:
我最近一直在处理 GNU 并行和并行计算。我有两台机器可用,一台在我工作的地方,一台在代理机器后面,所以我在 A 工作,我只能通过 B 访问 C,我不能在 B 上计算。
我的问题是,如何为 GNU 并行创建主机文件以了解我想与机器 C 共享文件?我已启用从 B 到 B 和 C 的无密码登录。
谢谢!
【问题讨论】:
标签: parallel-processing gnu administration
我最近一直在处理 GNU 并行和并行计算。我有两台机器可用,一台在我工作的地方,一台在代理机器后面,所以我在 A 工作,我只能通过 B 访问 C,我不能在 B 上计算。
我的问题是,如何为 GNU 并行创建主机文件以了解我想与机器 C 共享文件?我已启用从 B 到 B 和 C 的无密码登录。
谢谢!
【问题讨论】:
标签: parallel-processing gnu administration
发件人: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 并行只希望它被取消一次。
所以把它放在 ~/.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 restart
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
【讨论】: