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
我最近一直在处理 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