OpenSSH config はプログラムでポートを割り当てますか?

OpenSSH config はプログラムでポートを割り当てますか?

私は、新しいとは言えないコンピューターを何台か持っていて、それを小さなコンピューティング クラスターに接続しています。これらのコンピューターはすべて、パブリック IP アドレスを持つマスター ノードを 1 つ持っています。ワーカー ノードは NAT の背後にあります。そのため、すべてのコンピューターと通信するために、起動時にすべてのワーカー ノードにマスター ノードへのリバース SSH トンネルを作成させています。こうすることで、ワーカー ノードはそれぞれ異なるポートでマスターに接続されます。各マシンは、前のマシンのポート番号n+1nあるポートを選択します。私のラップトップの 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/config100 行も含まれないように ssh 構成を「分割」して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。プロキシ コマンドは明らかに元のホスト名を知る必要があります。)

関連情報