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