ASSH или Advanced SSH Config – это обертка для SSH, которая позволяет динамически и расширенно управлять конфигурациями SSH.
Стандартные конфигурации SSH могут быстро стать сложными и трудноуправляемыми, особенно в средах с большим количеством серверов.
ASSH предлагает решение этой проблемы путем создания уровня абстракции.
Это повышает эффективность использования возможностей файла конфигурации SSH.
Например, если у вас есть набор серверов, разделенных на среды разработки, тестирования и продуктиве.
С помощью ASSH вы можете определить эти среды в четкой и организованной манере, что упрощает переключение между ними по мере необходимости.
# assh.yml
defaults:
user: talha
groups:
development:
hosts:
- dev1.example.com
- dev2.example.com
testing:
hosts:
- test1.example.com
- test2.example.com
production:
hosts:
- prod1.example.com
- prod2.example.com
ASSH позволяет определять группы серверов на основе их окружения, что упрощает подключение к определенному окружению без перечисления отдельных хостов.
Например, чтобы подключиться к серверу dev:
Принцип работы 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:
Файлы конфигурации ASSH
После установки ASSH необходимо понять, как определяются конфигурационные файлы.
Файл ~/.ssh/config – это стандартный текстовый файл, определяющий настройки для SSH-соединений.
Этот файл может содержать такую информацию, как имена хостов, IP-адреса, имена пользователей, порты и другие параметры конфигурации.
Вот пример того, как может выглядеть базовая запись в этом файле:
Host myserver
HostName myserver.example.com
User myuser
Port 22
IdentityFile ~/.ssh/id_ed25519
В этом примере myserver – это алиас для SSH-соединения с сервером myserver.example.com.
В этом файле также указывается имя пользователя, порт и файл идентификации SSH, который будет использоваться для этого соединения.
Host *.example.com
User myuser
IdentityFile ~/.ssh/id_ed25519
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 5m
В этом примере *.example.com – это шаблон для SSH-подключения к серверам, доменное имя которых заканчивается на .example.com.
В этом шаблоне также указывается имя пользователя, файл идентификации SSH и настройки соединений, которые будут использоваться для этого соединения.
В этом примере ControlMaster включает мультиплексирование SSH-соединений.
Здесь оно установлено в auto, что указывает SSH пытаться использовать существующее соединение с тем же хостом вместо создания нового, а ControlPath, как следует из названия, указывает местоположение управляющего сокета.
Аналогично, ControlPresist задает, как долго мастер-соединение будет оставаться открытым после закрытия клиентских соединений.
Создание файла SSH
Для создания SSH-файла ASSH использует собственный конфигурационный файл с именем .assh.yml.
В этот конфигурационный файл assh добавляет свои собственные опции и функциональные возможности.
Например, с помощью ASSH вы можете определить шаблоны для общих конфигураций, использовать хуки для запуска определенных действий и многое другое.
Давайте рассмотрим это подробнее на первом, довольно упрощенном примере:
hosts:
on1.talha.local:
User:talha
В этом примере на on1.talha.local юзер войдет в систему под пользователем bob.
Первое, что нужно сделать перед началом работы, – сохранить текущий файл:
Чтобы создать или обновить файл конфигурации SSH, выполните следующую команду:
Эта команда позволяет 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-соединение с одним из ваших серверов:
Если подключение прошло успешно, значит, 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.com
User specialuser
Port 2222
В этом случае specialserver будет использовать пользователя и порт, отличные от тех, что заданы в настройках по умолчанию.
Создание шаблонов
Шаблон в ASSH – это своего рода шаблон конфигурации, который может быть применен к нескольким записям в вашем ~/.ssh/config.
Это позволяет вам определить базовую конфигурацию и повторно использовать ее для разных хостов, избегая избыточности и упрощая поддержку конфигураций.
Чтобы создать шаблон в ASSH, вы начинаете с определения секции Templates в вашем конфигурационном файле.
Например :
templates:
my-template:
User: bart
В этом примере my-template – это шаблон, определяющий общий параметр: пользователя.
Чтобы применить этот шаблон к хосту, просто укажите имя шаблона в конфигурации хоста:
Host server1
Inherits my-template
HostName server1.example.com
Host server2
Inherits my-template
HostName server2.example.com
Здесь server1 и server2 наследуют настройки, определенные в шаблоне my-template, что обеспечивает согласованность конфигурации и сокращает дублирование.
Другие команды ASSH CLI
Интерфейс командной строки (CLI) ASSH предлагает несколько команд под названием assh config, с помощью которых вы можете эффективно управлять конфигурацией SSH.
Эти команды позволяют создавать, визуализировать и манипулировать конфигурацией расширенным способом.
Графическая визуализация хостов
Команда assh config graphviz генерирует графическое представление ваших хостов и их связей в формате 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 ];
}
Это может быть очень полезно для визуализации сложных конфигураций, особенно если у вас есть зависимости или отношения между различными хостами, например, шлюзы или каскадные конфигурации.
Вывод в 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.
От начальной конфигурации и настроек по умолчанию до расширенного использования шаблонов и CLI – ASSH окажется незаменимым помощником для любого системного администратора.
см. также:
- 🖧 Быстрый и простой способ заблокировать SSH
- 🛡️ Как обезопасить и защитить сервер OpenSSH
- 🖧 Как настроить проброс X11 SSH на Linux
- 🐍 Брутим SSH удаленного сервера
- 🐧 Как предотвратить разрыв соединения SSH из-за неактивности при использовании MobaXterm
- 🖧 Как протестировать SSH соединение с удаленным хостом
- 🐧 Как определить использует ли пользователь SSH-аутентификацию на основе пароля или ключа
- 🐧 Как проверить конфигурацию клиента OpenSSH
- 🖧 8 способов предотвратить атаки брутфорс на SSH на Linux (CentOS / RHEL)