We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Реализация автономной системы ротации SSH‑ключей и управления доступом к серверам Linux через Termux‑бота

В современных инфраструктурах безопасность доступа к серверам играет ключевую роль. Одним из эффективных методов защиты является регулярная ротация 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. Мы поможем внедрить надёжные решения, адаптированные под ваши бизнес‑задачи.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом РыбинскЛАБ.

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю ИТ-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса. Запомните информация развлекательный ознакомительный носит, не нарушайте закон!

Связаться со мной
Поддержать проект