В современных инфраструктурах безопасность доступа к серверам играет ключевую роль. Одним из эффективных методов защиты является регулярная ротация SSH‑ключей. В этой статье мы покажем, как реализовать полностью автономную систему ротации ключей и управлять доступом к Linux‑серверам через Telegram‑бота, работающего в Termux.
Что такое «start» в контексте автоматизации?
Термин start часто используется в скриптах и инструкциях для обозначения начала процесса. По данным dictionary.cambridge.org, start – «to begin doing something». Аналогично, dictionary.com определяет его как «to begin or set out, as on a journey or activity». В merriam-webster.com указано, что глагол может означать «to begin an activity or undertaking» и «to move suddenly and violently». thesaurus.com предлагает синонимы: begin, commence, launch. Эти определения помогут правильно использовать start в наших скриптах и командах.
Обзор Termux и возможностей ботов
Termux – это терминальная среда Android, предоставляющая полноценный Linux‑доступ. Благодаря пакетному менеджеру pkg можно установить Python, OpenSSH, curl и другие инструменты, необходимые для создания ботов и автоматизации.
Архитектура решения
- Хранилище ключей – каталог
/data/data/com.termux/files/home/ssh_keys, где каждый пользователь имеет отдельный подкаталог. - Планировщик – встроенный
cronв Termux, запускающий скрипт ротации по расписанию. - Telegram‑бот – небольшое Python‑приложение, использующее
python-telegram-botдля получения команд и отправки уведомлений. - Автономная ротация – скрипт
rotate_keys.sh, который генерирует новые ключи, обновляетauthorized_keysна целевых серверах и уведомляет администраторов.
Реализация шаг за шагом
Ниже представлены основные команды и скрипты. Все они должны выполняться в Termux.
1. Установка базовых пакетов
pkg update && pkg upgrade -y
pkg install python git openssh curl -y
pip install python-telegram-bot==13.15
2. Генерация начального SSH‑ключа
ssh-keygen -t ed25519 -f $HOME/.ssh/id_ed25519 -N ""
Эта команда start процесс использования SSH‑ключей в системе.
3. Создание скрипта ротации
#!/data/data/com.termux/files/usr/bin/bash
KEY_DIR="$HOME/ssh_keys"
SERVER_LIST="$HOME/server_list.txt"
# Функция генерации нового ключа
generate_key() {
local user=$1
local key_path="$KEY_DIR/$user/id_ed25519"
ssh-keygen -t ed25519 -f "$key_path" -N "" -q
echo "New key generated for $user"
}
# Обновление authorized_keys на удалённом сервере
update_server() {
local server=$1
local user=$2
local pub_key=$(cat "$KEY_DIR/$user/id_ed25519.pub")
ssh $user@$server "mkdir -p ~/.ssh && echo '$pub_key' > ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
echo "Updated $server for $user"
}
# Основной цикл
while IFS=, read -r user server; do
generate_key "$user"
update_server "$server" "$user"
# Уведомляем бота
python $HOME/bot_notify.py "Key rotated for $user on $server"
sleep 1
done < "$SERVER_LIST"
Скрипт можно start автоматически через cron.
4. Настройка cron для автоматической ротации
# Откройте crontab
crontab -e
# Добавьте строку (каждые 30 дней)
0 2 /30 $HOME/rotate_keys.sh >> $HOME/rotate.log 2>&1
5. Реализация Telegram‑бота
#!/data/data/com.termux/files/usr/bin/python3
import os
from telegram import Update, Bot
from telegram.ext import Updater, CommandHandler, CallbackContext
TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
bot = Bot(token=TOKEN)
updater = Updater(token=TOKEN, use_context=True)
dispatcher = updater.dispatcher
def start(update: Update, context: CallbackContext):
update.message.reply_text('Bot is running. Use /rotate to start key rotation.')
def rotate(update: Update, context: CallbackContext):
# Запускаем скрипт ротации
os.system(f"{os.getenv('HOME')}/rotate_keys.sh")
update.message.reply_text('Key rotation started.')
dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CommandHandler('rotate', rotate))
updater.start_polling()
updater.idle()
Команда /rotate в Telegram start процесс обновления ключей на всех серверах.
Управление доступом через бота
Бот может принимать дополнительные команды:
/add_user username server_ip– генерирует ключ и сразу добавляет его на указанный сервер./remove_user username server_ip– удаляет публичный ключ изauthorized_keys./list_keys– выводит список текущих пользователей и их ключей.
Все действия логируются в файле $HOME/bot_actions.log и отправляются администратору.
Безопасность и лучшие практики
- Ограничьте права скриптов:
chmod 700 rotate_keys.shиchmod 600 $HOME/.ssh/. - Храните токен бота в переменной окружения
TELEGRAM_BOT_TOKEN, а не в коде. - Используйте
ssh -o StrictHostKeyChecking=noтолько в контролируемой среде. - Периодически проверяйте логи на предмет несанкционированных запусков.
Заключение
Мы рассмотрели полный цикл создания автономной системы ротации SSH‑ключей и управления доступом к Linux‑серверам через Termux‑бота. Такой подход повышает уровень безопасности, автоматизирует рутинные задачи и даёт гибкий контроль через удобный Telegram‑интерфейс.
Если вам требуется профессиональная настройка Termux‑окружения, разработка кастомных ботов или аудит безопасности вашей инфраструктуры, обратитесь к услугам RybinskLab. Мы поможем внедрить надёжные решения, адаптированные под ваши бизнес‑задачи.