Расширьте возможности использования 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, чтобы лучше понять, как этот инструмент обогащает работу с SSH. ASSH — это не просто оболочка; это умное переосмысление того, как мы взаимодействуем с SSH.
ASSH работает, вставляя себя между вашим SSH-клиентом и вашими SSH-соединениями. Он перехватывает SSH-команды и манипулирует ими в соответствии с конфигурациями, указанными в вашем ~/.ssh/config. Это обеспечивает большую гибкость и глубокую настройку ваших подключений.
Анализатор конфигурации: ASSH считывает и интерпретирует файл конфигурации SSH. Он добавляет дополнительный уровень функциональности, сохраняя базовый синтаксис и функциональность исходного SSH-файла.
SSH-прокси: Когда инициируется SSH-соединение, ASSH действует как прокси. Он может динамически изменять параметры подключения, распределять нагрузку между несколькими хостами или даже проходить через несколько серверов, чтобы достичь конечного пункта назначения.
Одним из самых мощных аспектов ASSH является его способность легко обрабатывать сложные конфигурации. Например, вы можете настраивать соединения через прокси-серверы, устанавливать правила автоматического повторного подключения или даже управлять группами хостов с похожими конфигурациями.
С помощью ASSH у вас есть возможность определять расширенные правила для каждого хоста или группы хостов в вашем файле конфигурации. Эти правила могут включать:
Независимо от того, используете ли вы Linux, macOS или Windows, процесс установки разработан таким образом, чтобы быть максимально простым. ASSH легко устанавливается с помощью обычных менеджеров пакетов.
В Linux процесс может немного отличаться в зависимости от вашего дистрибутива, но ASSH обычно доступен через стандартные менеджеры пакетов. ASSH также можно установить с asdf-vm:
asdf plugin add assh asdf install assh latest asdf global assh latest
После установки 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 определяет, как долго главное соединение будет оставаться открытым после закрытия клиентских подключений.
ASSH использует свой собственный конфигурационный файл с именем .assh.yml для создания SSH-файла. В этом конфигурационном файле assh добавляет свои собственные опции и функциональные возможности. Например, с помощью ASSH вы можете определять шаблоны для общих конфигураций, использовать перехваты для запуска определенных действий и многое другое.
Давайте рассмотрим это подробно на первом, довольно упрощенном примере:
hosts: on1.talha.local: User:talha
В этом примере on1.talha.local войдет в систему под именем пользователя bob.
Первое, что нужно сделать перед запуском чего-либо, — это сохранить текущий файл:
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, что обеспечивает согласованность конфигурации при одновременном сокращении дублирования.
Интерфейс командной строки 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 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 оказывается незаменимым союзником для любого системного администратора.