2

Я хочу получить доступ к своей домашней машине с моего ноутбука из дома или офиса. В офисе я должен использовать шлюз. Для этого я добавил запись proxycommand в мой файл .ssh/config который отлично работает из офиса. Однако, если я хочу использовать это из дома, я не хочу зависеть от служебного шлюза. Есть ли способ автоматизировать это?

1 ответ1

3

И да и нет.

Во-первых, нет. Вы ничего не можете поместить в файл ~/.ssh/config, который будет активировать различные настройки в зависимости от внешних факторов, например, от того, в какой сети вы находитесь, или от того, существует ли файл и т.д. Конфигурационный файл SSH является статическим файлом.

Теперь да. Вы можете "взломать" что-то. Вероятно, это не будет невероятно красиво, но это может сработать.

Посмотрите, как работает ProxyCommand. Он выполняет командную строку и подставляет в определенные строки стиль printf. В этой командной строке вы можете указать свой логин. Например, у вас может быть что-то вроде этого на вашем ноутбуке для использования в офисе:

host athome
    ProxyCommand ssh -x -a -q gateway nc athome.dyndns.org 22

Команда запускает команду ssh которая подключается к gateway а на этом сервере запускает netcat для подключения к вашему фактическому месту назначения. Что ж, вместо запуска ssh вы можете использовать скрипт оболочки. Например, с этим в вашем файле .ssh/config :

host athome
    ProxyCommand bin/customconnect athome.dyndns.org

Вы можете создать скрипт ~/bin/customconnect :

#!/bin/sh

if /sbin/ifconfig -a | grep -q 'inet 192\.168\.'; then
        nc $1 22
else
        ssh -x -a -q gateway nc $1 22
fi

Затем, если ваша сеть дома начинается с 192.168 а ваша сеть в офисе - нет, соответствующая команда ProxyCommand будет выбрана сценарием.

Если вам нужны другие динамические функции, такие как выбор другого имени хоста в зависимости от сети, вы, очевидно, можете добавить это и в сценарий.

Обратите внимание, что это решение не без каких-либо затрат. Обычно SSH запускает вашу ProxyCommand напрямую. Если вы используете это решение, для каждого соединения будет задействован дополнительный процесс, так как ssh запускает оболочку, которая, в свою очередь, запускает другой процесс.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .