Конфигурация 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вместе с этим; команде proxy, очевидно, потребуется знать исходное имя хоста.)

Связанный контент