Преамбула#
Наверное, всего того, что описано ниже, не было, если бы я придерживался хоть какого-то work-life balance. А пока мне нужен доступ к серверам, часто в любое время, в любом месте. Речь не о том, чтобы программировать с телефона (хотя в качестве примера это тоже рассмотрим), а скорее о перезапуске какой-нибудь службы или убийстве зависшего процесса. Впрочем, обо всём по порядку.
Шаринг доступов SSH#
Путь#
За время работы в разных компаниях я видел разные способы шаринга доступов к серверам. У кого-то это были Google-таблицы с логинами и паролями, у кого-то самописные шифровальщики паролей. Мы долгое время использовали Passbolt (что хоть и решало проблему, но только частично). В целом, на рабочих серверах большому числу людей делать нечего. Те же разработчики по идее выливают изменения через CI/CD. Но даже если у вас всего один системный администратор, хотелось бы:
- Иметь одинаковые учетные записи на всех серверах (причем отдельные под каждого пользователя)
- Доступ осуществлялся через ключи
- Данные о ip адресах и портах не приходилось тягать вручуную
Как результат, мы пришли к следующей модели:
- Создаём группу по названию компании (ansible)
- Создаём пользователей, прописываем их ключи и добавляем в группу (ansible)
- Проверяем есть ли в группе пользователи вне списка, их удаляем (например при увольнении) (ansible)
- Записываем хост в конфиг chezmoi и шарим по машинам
Описывать часть Ansible я не буду, так как наше решение все ещё не идеальное, оно скорее закрывало наши боли в моменте. А вот Chezmoi интересный инструмент, который я опишу ниже.
Chezmoi#
Независимо от того, на какой платформе вы работаете, ваш SSH-конфиг хранится в ~/.ssh/. Более того, формат для Linux и Windows одинаковый. Теоретически можно хранить свежую версию config файла в Git, и это закроет большую часть потребностей. Но очень скоро захочется:
- Разделить ssh ключи на группы
- Иметь возможность подмены всяких переменных
Тут то мне и попался на глаза chezmoi.
Этап 1. Файл инициализации.#
Вы можете определить файл, который интерактивно запросит глобальные переменные у пользователя при инициализации. У меня это было что-то типа:
|
|
Теперь при первом запуске инициализации chezmoi запросит базовые переменные.
Этап 2. Создание шаблона#
Не хочется сводить статью к цитированию документации. Я не уверен, что статья не устарела на тот момент, как я её опубликовал. Но основную мысль передам. Chezmoi использует шаблонизатор Go. Если вы с ним не знакомы - это не проблема, в документации есть множество примеров.
|
|
В целом стандартная структура файла .ssh, за исключением
- {{ if .otherEnable -}} … {{end}} - Условный блок, что означает что сервер не будет включён в файл у тех пользоветелей, которые указали что им доступ на сервера other не нужны.
- {{.d_server_user}} - наша переменная
То есть ключ пользователя добавлен на сервер под его учётной записью (чаще всего фамилия.ио). А сами параметры подключени пользователь получает через chezmoi.
Этап 3. Подключение полученного файла.#
Этот этап на первых порах вызвал некоторые проблемы, так как не хотелось получать ошибку совместимости файлов после того, как пользователь допишет своих параметров в SSH. Однако было найдено простое решение. Конфигурацию SSH мы прописываем не в файл ~/.ssh/config
а рядом в ~/.ssh/share_config
. И подключаем скриптом (run_apply.sh):
|
|
Как только появился скрипт sh - сразу возник вопрос совместимости с windows. И пришлось добавить следующие строки в .chezmoi.json.tmpl
:
|
|
Теперь, при применении конфигурации chezmoi запускает скрипт, который пытается прописать include shared_config
в файл ~/.ssh/conf
.
Цикл работы#
- При появлении нового сервера или сотрудника прогоняем Ansible по серверам, создавая пользователей и добавляя им ключи
- Сотрудник устанавливает Chezmoi и пишет в консоли
chezmoi init
. Ответив интерактивно на вопросы, уже может подключаться к любому доступному серверу (список доступных серверов виден в файле). Если вы ранее не работали с ~/.ssh/conf, то для вас будет приятный бонус, так как для подключения к серверу теперь вместоssh root@myserver.ru -p 242321
достаточно ввестиssh myserver.ru
. - Сотрудник увольняется. Мы также прогоняем Ansible по серверам, и он удаляет пользователя.
Повторюсь, у этой системы есть недостатки, но это закрывает базовые потребности без необходимости внедрения полноценного LDAP.
При чём здесь телефон.#
Теперь, имея способ шаринга доступов, можно шарить их везде. Например, на телефоне (если у вас не iPhone, конечно).
Устанавливаем termux. Тут нет никаких подводных камней. Он доступен в маркете, но важно!, устанавливать его из f-droid. Если установить Termux из маркета, то дополнения будут платными. Если установить Termux из маркета, а дополнения из F-Droid, будут конфликты. Сразу можно установить Termux: далее - мой путь (не гайдлайн).
- Что бы избежать возможных проблем
pkg update
иpkg upgrade
- Устанавливаем zsh, git, curl, wget
pkg install zsh git curl wget
1.1. Вам может понадобится vim. Я использую AstroVim.
pkg install neovim
git clone --depth 1 https://github.com/AstroNvim/template ~/.config/nvim
rm -rf ~/.config/nvim/.git
#Почему-то когда я писал статью, не подтянул в зависимости си. Установим вручную
pkg install clang zig
- Устанавливаем ohmyzsh
sh -c "$(curl -fsSL https://install.ohmyz.sh/)"
- Используем zsh по умолчанию
chsh -s zsh
зависимости от темы могут понадобиться дополнительные шрифты. Об этом описано на странице zsh. Обычно это сводится к клонированию репозитория и запуску install.sh. Перед установкой стоит попробовать выбрать шрифт через стилизацию (долгий тап - More - Style). Тут же меняется цвет фона. 4. Наконец установка самого chezmoi
pkg install chezmoi
- Инициализация вашей конфигурации:
chezmoi init ссылка_на_ваш_репозиторий
Дичь (я попытаюсь добавить её в каждой статье)#
Верстать адаптив сразу на телефоне#
Termux по сути позволяет запустить Node.js. Vue из-под Vite не завёлся, ругаясь на компилятор ESLint (кажется, это мелкая устранимая проблема, но честно говоря…). А вот проект на Vue2 завелся без проблем. Открыв вторую вкладку Termux, можно править файлы и даже watch отрабатывает корректно. Смотреть результат можно тут же в окне браузера:
Сидеть в интернете через консольный браузер#
Я попробовал установить Browsh, но он отказался запускаться (не видел Firefox). А вот Lynx запустился. Вот, например, этот блог:
Шалость не удалась#
В максимальном угаре хотелось запустить Docker и в нём какую-то весомую серверную часть. Судя по гайдам в интернете, это возможно, но подразумевает, что через QEMU будет поднят образ Alpine, и уже в нём Docker. Я, честно говоря, не настолько упорот в данный момент. Возможно, когда-нибудь.