ASSH: продвинутый способ взаимодействия с SSH

Расширьте возможности использования SSH с помощью assh, когда у вас есть множество хостов для подключения.

ASSH или Advanced SSH Config — это оболочка для SSH, которая позволяет динамично и расширенно управлять конфигурациями SSH.

Стандартные конфигурации SSH могут быстро усложниться и ими трудно управлять, особенно в средах с большим количеством серверов. ASSH предлагает решение этой проблемы путем введения уровня абстракции. Это увеличивает использование функции файла конфигурации SSH.

Например, если у вас есть набор серверов, разделенных на среды разработки, тестирования и производства. С помощью ASSH вы можете четко и организованно определять эти среды, упрощая переключение между ними по мере необходимости.

# assh.yml

defaults:

  user: talha

groups:

  development:

    hosts:

      - dev1.example.ru

      - dev2.example.ru

  testing:

    hosts:

      - test1.example.ru

      - test2.example.ru

  production:

    hosts:

      - prod1.example.ru

      - prod2.example.ru

ASSH позволяет определять группы серверов в зависимости от их окружения, что упрощает подключение к определенной среде без перечисления отдельных хостов. Например, для подключения к серверу разработки.:

assh development

Звучит захватывающе? Давайте посмотрим больше на assh.

Как работает ASSH

Давайте углубимся в ключевые концепции ASSH, чтобы лучше понять, как этот инструмент обогащает работу с SSH. ASSH — это не просто оболочка; это умное переосмысление того, как мы взаимодействуем с SSH.

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

Ядро ASSH основано на двух основных компонентах:

Анализатор конфигурации: ASSH считывает и интерпретирует файл конфигурации SSH. Он добавляет дополнительный уровень функциональности, сохраняя базовый синтаксис и функциональность исходного SSH-файла.

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

Одним из самых мощных аспектов ASSH является его способность легко обрабатывать сложные конфигурации. Например, вы можете настраивать соединения через прокси-серверы, устанавливать правила автоматического повторного подключения или даже управлять группами хостов с похожими конфигурациями.

С помощью ASSH у вас есть возможность определять расширенные правила для каждого хоста или группы хостов в вашем файле конфигурации. Эти правила могут включать:

    • Балансировка и отработка отказа: распределите соединения по нескольким хостам, чтобы сбалансировать нагрузку или обеспечить резервирование.
    • Создание цепочки и переключение хостов: подключение к хосту через одного или более посредников, что особенно полезно в сложных или безопасных средах.
    • Пользовательские перехваты: запускайте определенные скрипты или команды в разное время во время вашего SSH-соединения, например, перед входом в систему, после выхода из системы и т.д.

 

Установка ASSH

Независимо от того, используете ли вы Linux, macOS или Windows, процесс установки разработан таким образом, чтобы быть максимально простым. ASSH легко устанавливается с помощью обычных менеджеров пакетов.

В Linux процесс может немного отличаться в зависимости от вашего дистрибутива, но ASSH обычно доступен через стандартные менеджеры пакетов. ASSH также можно установить с asdf-vm:

asdf plugin add assh

asdf install assh latest

asdf global assh latest

 

Файлы конфигурации ASSH

После установки ASSH важно понимать, как определяются файлы конфигурации.

Файл ~/.ssh/config — это стандартный текстовый файл, который определяет настройки для SSH-соединений. Этот файл может содержать такую информацию, как имена хостов, IP-адреса, имена пользователей, порты и другие параметры конфигурации.

Вот пример того, как может выглядеть базовая запись в этом файле:

Host myserver

HostName myserver.example.ru

User myuser

Port 22

IdentityFile ~/.ssh/id_ed25519

В этом примере myserver является псевдонимом для SSH-соединения с сервером myserver.example.ru. В этом файле также указаны имя пользователя, порт и файл SSH-идентификации, которые будут использоваться для этого соединения.

Host *.example.ru

 User myuser

 IdentityFile ~/.ssh/id_ed25519

 ControlMaster auto

 ControlPath ~/.ssh/cm-%r@%h:%p

 ControlPersist 5m

В этом примере, *.example.ru это шаблон для подключения по SSH к серверам, доменное имя которых заканчивается на .example.ru. Этот шаблон также определяет имя пользователя, файл идентификатора SSH и настройки подключения, которые будут использоваться для этого подключения. В этом примере ControlMaster включает мультиплексирование SSH-соединения. Здесь установлено значение auto, которое сообщает SSH попытаться использовать существующее соединение с тем же хостом вместо создания нового, а ControlPath, как следует из названия, указывает местоположение управляющего сокета. Аналогично, ControlPresist определяет, как долго главное соединение будет оставаться открытым после закрытия клиентских подключений.

Создание SSH-файла

ASSH использует свой собственный конфигурационный файл с именем .assh.yml для создания SSH-файла. В этом конфигурационном файле assh добавляет свои собственные опции и функциональные возможности. Например, с помощью ASSH вы можете определять шаблоны для общих конфигураций, использовать перехваты для запуска определенных действий и многое другое.

Давайте рассмотрим это подробно на первом, довольно упрощенном примере:

hosts:

 on1.talha.local:

 User:talha

В этом примере on1.talha.local войдет в систему под именем пользователя bob.

Генерация SSH-файла

Первое, что нужно сделать перед запуском чего-либо, — это сохранить текущий файл:

cp ~/.ssh/config ~/.ssh.config.orig

Чтобы создать или обновить файл конфигурации SSH, используйте следующую команду:

assh config build

Эта команда позволяет ASSH сгенерировать расширенный файл конфигурации SSH с учетом расширенных функций ASSH. Вот содержимое, сгенерированное с помощью приведенного выше файла.:

#This file was automatically generated by assh vn/a (n/a) #on 2024-02-28 01:21:27 +0100 CET, based on ~/.ssh/assh.yml

#

# more info: https://github.com/moul/assh



# host-based configuration

Host on1.talha.local

User talha



# global configuration

Host *

ProxyCommand /home/bob/.asdf/installs/assh/2.16.0/bin/assh connect --port=%p %h

 

Если вы правильно прочитали, оболочка assh используется каждый раз при подключении к ssh.

Проверка конфигурации

Чтобы убедиться, что все в порядке, вы можете протестировать свою конфигурацию, установив SSH-соединение с одним из ваших серверов:

ssh on1.talha.local

Если подключение прошло успешно, ASSH правильно установлен и настроен.

Предварительные настройки

Настройки по умолчанию в ASSH служат базовой конфигурацией для всех хостов, которые явно не задают определенные настройки. Это особенно полезно в средах с большим количеством серверов, поскольку помогает поддерживать единую и централизованную конфигурацию.

Чтобы настроить настройки по умолчанию в ASSH, вы должны определить раздел defaults в вашем файле. Вот пример настройки настроек по умолчанию:

defaults

 User defaultuser

 Port 22

 IdentityFile ~/.ssh/id_ed25519

 ForwardAgent yes

 ControlMaster auto

 ControlPath ~/.ssh/multiplex/%r@%h:%p

 ControlPersist 10m

В этом примере все хосты унаследуют эти настройки по умолчанию, если они не будут переопределены в конфигурации, зависящей от конкретного хоста.

Хотя настройки по умолчанию применяются ко всем хостам, вы все равно можете переопределить их для определенных хостов. Например:

Host specialserver

 HostName special.example.ru

 User specialuser

 Port 2222

В этом случае specialserver будет использовать другого пользователя и порт, отличные от тех, которые определены в настройках по умолчанию.

Создание шаблонов

Шаблон в ASSH — это своего рода шаблон конфигурации, который может быть применен к нескольким записям в вашем ~/.ssh/config. Это позволяет вам определять базовую конфигурацию и повторно использовать ее для разных хостов, избегая дублирования и упрощая обслуживание конфигураций.

Чтобы создать шаблон в ASSH, вы начинаете с определения раздела Шаблоны в вашем файле конфигурации. Например :

templates: 

 my-template:    

 User: bart

В этом примере my-template — это шаблон, который определяет общий параметр: User.

Чтобы применить этот шаблон к хосту, просто укажите имя шаблона в конфигурации хоста:

Host server1  

 Inherits my-template  

 HostName server1.example.ru



Host server2  

 Inherits my-template  

 HostName server2.example.ru

Здесь server1 и server2 оба наследуют настройки, определенные в my-template, что обеспечивает согласованность конфигурации при одновременном сокращении дублирования.

Другие команды CLI ASSH

Интерфейс командной строки ASSH (CLI) предлагает несколько команд в assh config, с помощью которых вы можете эффективно управлять своими конфигурациями SSH. Эти команды позволяют вам создавать, визуализировать конфигурацию и управлять ею продвинутым способом.

Графическая визуализация хостов

Команда assh config graphvizgenerates графическое представление ваших хостов и их взаимосвязей в формате Graphviz.

assh config graphviz

digraph G {

        "10.0.0.*"->"vr1.talha.local"[ color=red, label=1 ];

        "machine*"->"vr1.talha.local"[ color=red, label=1 ];

        "10.0.0.*" [ color=blue ];

        "machine*" [ color=blue ];

        "vr1.talha.local" [ color=blue ];

}

 

 

ASSH: продвинутый способ взаимодействия с SSH

Это может быть чрезвычайно полезно для визуализации сложных конфигураций, особенно когда у вас есть зависимости или взаимосвязи между различными хостами, такие как шлюзы или каскадные конфигурации.

Вывод в JSON

Команда assh config json предоставляет представление вашей конфигурации в формате JSON. Это полезная функция для интеграции с другими инструментами или для автоматизированной обработки.

assh config json



{

  "hosts": {

    "10.0.0.*": {

      "User": "root",

      "Gateways": [

        "vr1.talha.local"

      ]

    },

    "192.168.3.*": {

      "User": "ubuntu"

    },

    "machine*": {

      "User": "talha",

      "Gateways": [

        "vr1.talha.local"

      ]

    },

    "on1.talha.local": {

      "User": "talha"

    },

    "proxmox": {

      "User": "root",

      "Aliases": [

        "proxmox.talha.local"

      ]

    },

    "proxmox2": {

      "User": "root",

      "Aliases": [

        "proxmox2.talha.local"

      ]

    },

    "vr1.talha.local": {

      "User": "root"

    }

  },

  "templates": {},

  "defaults": {

    "StrictHostKeyChecking": "no",

    "UserKnownHostsFile": [

      "/dev/null"

    ],

    "Hooks": {}

  },

  "asshknownhostfile": "~/.ssh/assh_known_hosts"

}

Эта команда может использоваться для анализа и обработки вашей конфигурации SSH в скриптах или приложениях, которые используют данные JSON.

Поиск конфигурации

Наконец, команда assh config searchпозволяет вам искать определенные записи в вашей конфигурации с помощью текста поиска.

assh config search proxmox



Listing results for proxmox:

    proxmox -> root@proxmox:22

    proxmox2 -> root@proxmox2:22

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

Заключение

ASSH — это революционный инструмент, который меняет способ управления конфигурацией SSH. Начиная с начальной конфигурации и настроек по умолчанию и заканчивая расширенным использованием шаблонов и командной строки, ASSH оказывается незаменимым союзником для любого системного администратора.