我有一堆不太新的电脑,我一直将它们连接到一个小型计算集群,因为为什么不呢。我有一个主节点,它有一个公共 IP 地址,这些电脑都可以与之通信。工作节点位于 NAT 后面。因此,为了与它们全部对话,我让它们在启动时创建一个反向 ssh 隧道进入主节点。因此,它们各自通过不同的端口连接到主节点。每台机器选择一个端口,n+1
其中n
是前一台机器的端口号。在我的笔记本电脑上的 ssh 配置中,我有以下内容:
Host worker*
ProxyCommand ssh master -W %h:%p
HostName localhost
Host worker001
Port 7001
Host worker002
Port 7002
....
#Host workerX
# Port 7000 + X
我想做的是为我的工作人员设置一个条目,以便 workerX 使用端口 7000 + X。这可以通过 ssh 配置实现吗?如果不行,还有其他解决方法吗?或者,我可以“拆分”我的 ssh 配置,这样我的~/.ssh/config
文件就不会有一百行workerX
,我可以限制所有这些混乱吗?
答案1
您正在使用 ProxyCommand,因此只需编写一个执行此操作的自定义命令:
ProxyCommand ~/bin/worker-ssh %h
脚本本身可能如下所示:
#!/usr/bin/env bash
host=$1
if [[ $host =~ ^worker0*([0-9]+)$ ]]; then
port=${BASH_REMATCH[1]}
port=$(( port + 7000 ))
ssh master -W "localhost:$port"
else
echo "error: $0: host '$host' is not a worker" >&2
exit 1
fi
(不要HostName
与此一起使用;代理命令显然需要知道原始主机名。)