私は、新しいとは言えないコンピューターを何台か持っていて、それを小さなコンピューティング クラスターに接続しています。これらのコンピューターはすべて、パブリック IP アドレスを持つマスター ノードを 1 つ持っています。ワーカー ノードは 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/config
100 行も含まれないように 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
。プロキシ コマンドは明らかに元のホスト名を知る必要があります。)