Залежний від мережі ~ / .ssh / config?


15

В офісі я можу підключитися до внутрішніх машин без проксі, але мені потрібен проксі для зовнішніх з’єднань. Поза офісу я можу підключитися до інших зовнішніх машин без проксі, але потрібно використовувати один з 2 проксі для підключення до внутрішніх машин.

Якщо я можу розібратися в способі автоматичного виявлення, в якій мережі я перебуваю, чи можу я доручити ssh завантажити відповідний конфігураційний файл?

Якщо ні, чи є більш елегантне рішення, ніж написання сценарію оболонки, щоб символізувати відповідний файл конфігурації до ~ / .ssh / config (моя найкраща ідея поки що)?

Редагувати: Я думаю, @pcm та JonnyRo зрозуміли моє запитання, і я спробую те, що вони пропонують, але просто, щоб було зрозуміло, я хочу

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |

Відповіді:


11

Залежно від налаштування вашого проксі, ви можете просто створити запис конфігурації SSH, який працює в будь-якій ситуації. Наприклад, в одній мережі, яку я регулярно використовую, я повинен перейти до проміжного хоста, перш ніж я можу здійснити вихідне з'єднання. Тож я в основному налаштовую конфігурацію, яка виглядає приблизно так.

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh user@proxyhost.example.org /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

Отже, коли мені не потрібно використовувати проксі, я можу просто запустити таку команду, як ssh myhost.example.orgі підключитися, але коли мені потрібен проксі, я запускаю команду ssh myhost.example.org%sshproxy.

Я підозрюю, що ви, можливо, зможете встановити якийсь псевдонім або автоматичне завершення налаштування, яке автоматично додасть %proxyбіт.


9

Старе питання, але деякі ідеї в цій темі допомогли мені, і це рішення, яке я придумав:

По-перше, конфігурація ssh проксі-сервера .

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

Потім конфігурація сервера B :

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

Ідея полягає в тому, що справа за замовчуванням підключається з зовнішнього сайту і ProxyCommand ініціює з'єднання SSH до проксі - перше , а потім підключитися до сервера-б . Якщо, з іншого боку, ми вже знаходимося в локальній підмережі, ProxyCommand вимкнено і проксі-з'єднання з сервером-a не здійснюється.

Незалежно від того, де ви знаходитесь, ви завжди можете отримати доступ до сервера-abc за допомогою цього запису, і ця настройка визначає, де ви знаходитесь, і налаштовує з'єднання відповідно. Для сервера-xyz просто використовуйте ту саму ідею.

Я більш детально пояснив тут: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/


7

Ви можете використовувати опцію -F для вибору з різних конфігураційних файлів. для двох мережевих випадків. Потім можна або створити псевдоніми, які використовують різні конфігураційні файли, залежно від того, в якій мережі ви перебуваєте, або в налаштуваннях сценарію входу, один псевдонім на основі вашої IP-адреси.


Спасибі! Псевдоніми з -F, безумовно, будуть моїм резервним рішенням, якщо я не можу отримати сценарій, що працює на основі IP.
Нейт Парсонс

Це приголомшливо, я ось-ось збирався задати те саме питання. Я вже сценарій деяких інших параметрів, щоб встановити змінні середовища, коли я запускаю новий термінал, я можу легко створити псевдонім або символізувати належне .ssh / config на основі середовища.
newz2000

1

Напишіть скрипт оболонки, який перевіряє ваш IP на зразок, а потім посилається на відповідний сценарій оболонки.

Якщо чомусь ваш діапазон IP однаковий для дому та роботи, спробуйте переключитися на основі /etc/resolv.conf, який містить налаштовані DHCP DNS-сервери.


0

Параметр "Хост" в .ssh / config дозволяє змінювати конфігурацію залежно від призначення. Я використовую це для налаштування переадресації портів, і таке, залежно від того, куди я йду.


0

Я раніше розглянув це запитання, і одним із можливих варіантів вирішення є наявність такого запису у конфігураційному файлі:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

Таким чином, якщо ви знаходитесь зовні, ви можете $ ssh machine.inside_domain. Якщо ви знаходитесь всередині і маєте дозвіл на dns, ви можете $ ssh автомат. Це добре працює для мене.

Можливо, хтось може покращити цю ідею, можливо, змінивши конфігурацію DNS, щоб вона автоматично вирішила машину на machine.inside_domain, якщо ви знаходитесь за межами та використовуєте точку входу SSH.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.