Зависит от сети ~ / .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бит.

Zoredache
источник
8

Старый вопрос, но некоторые идеи в этой теме помогли мне, и вот решение, которое я придумал:

Во-первых, конфигурация прокси-сервера 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-соединение с прокси, а затем соединяется с сервером-b . Если, с другой стороны, мы уже находимся в локальной подсети, ProxyCommand отключен и прокси-соединение с сервером a не установлено.

Независимо от того, где вы находитесь, вы всегда можете достичь server-abc с помощью этой записи, и эта установка выясняет, где вы находитесь, и устанавливает соединение соответствующим образом. Для server-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, который содержит DNS-серверы, настроенные DHCP.

JonnyRo
источник
0

Опция «Host» в .ssh / config позволяет вам изменять конфигурацию в зависимости от места назначения. Я использую это, чтобы настроить переадресацию портов и так далее в зависимости от того, куда я иду.

JOTN
источник
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 machine. Это хорошо работает для меня.

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

Фернандо
источник