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

我想做的是為我的工作人員提供一個條目,以便工作人員X 使用連接埠 7000 + X。如果沒有,是否有其他解決方法可以解決這種情況?或者,我可以「拆分」我的 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與此一起使用;代理命令顯然需要知道原始主機名稱。)

相關內容