我有一台不太新的計算機,我一直將它們連接到一個小型計算集群,因為為什麼不呢?我有一個主節點,它有一個公用 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
與此一起使用;代理命令顯然需要知道原始主機名稱。)