Назад | Перейти на главную страницу

Как указать несколько комбинаций HostName / Port в .ssh / config

У меня есть несколько ноутбуков и рабочих станций, которые извлекают и загружают из нескольких репозиториев Mercurial на центральном сервере. Я обычно использую .ssh/config чтобы установить псевдоним:

Host repo-server
HostName server.somedomain
User user143
IdentityOnly yes
IdentityFile ~/hgkey
Port 156

... и еще несколько вариантов, вы поняли. Тогда я могу просто сделать hg push ssh://repo-server//hgroot/someproject в каждом локальном репозитории, и я могу изменить адрес и порт сервера в одном месте.

Для рабочих станций это нормально работает, но ноутбуки могут получить доступ к серверу как изнутри сети, так и извне, используя другой адрес и другой порт. Есть ли способ указать несколько комбинаций HostName / Port, чтобы SSH автоматически пробовал их по порядку? Таким образом, пользователи могли толкать и тянуть, не заботясь о правильном адресе.

(конечно, самым правильным решением будет использование VPN)

Боюсь, что с SSH это невозможно.

Вы могли бы обойти это, используя ProxyCommand вариант ssh вместе с настраиваемым сценарием, который создает TCP-соединение с сервером (используя netcat), в зависимости от того, как / где подключен ваш ноутбук. Что-то вроде:

#!/bin/bash
SSID=$(/sbin/iwgetid wlan0 -r)

case "$SSID" in
net1)
  nc <host1> <port1>
  ;;
net2)
  nc <host2> <port2>
  ;;
*)
  nc <host3> <port3>
  ;;
esac

Затем в вашем .ssh/config, вам понадобится следующее:

Host repo-server
  User user143
  IdentityOnly yes
  IdentityFile ~/hgkey
  ProxyCommand path-to-script

Другой альтернативой может быть настройка сценария для перенаправления ssh-порта 22 «правильного» IP-адреса на какой-либо неиспользуемый локальный порт вашего ноутбука, а затем ssh там. Я использую его во многих ситуациях.