OpenSSH 配置以编程方式分配端口吗?

OpenSSH 配置以编程方式分配端口吗?

我有一堆不太新的电脑,我一直将它们连接到一个小型计算集群,因为为什么不呢。我有一个主节点,它有一个公共 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与此一起使用;代理命令显然需要知道原始主机名。)

相关内容