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

10

У меня есть несколько ноутбуков и рабочих станций, которые извлекают данные из нескольких хранилищ 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 было бы наиболее правильным решением)

leoluk
источник

Ответы:

5

Я боюсь, что это невозможно с 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
Оливер
источник
Думаю, я напишу скрипт, который модифицирует HostNameзаписи. Спасибо.
Леолук
Это выглядит специфично для Linux ... например, / sbin / iwgetid, по-видимому, не существует в WSL ...
Майкл,
-1

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

jacopods
источник
1
Это не совсем понятно без примера.
Эндрю Шульман