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

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

Защищённое хранение SSH‑ключей в Termux с использованием GnuPG и ssh‑add

Подробное руководство по безопасному хранению SSH‑ключей в Termux: шифрование приватных ключей GnuPG, настройка ssh‑agent и автоматическое добавление через ssh‑add.

Termux предоставляет полноценную Linux‑среду на Android‑устройстве, что делает его отличным инструментом для разработчиков, системных администраторов и специалистов по безопасности. Одним из самых частых сценариев использования является работа с удалёнными репозиториями и серверами через ssh. Хранение приватных SSH‑ключей непосредственно в файловой системе устройства несёт в себе риск компрометации, особенно если телефон попадает в чужие руки.

В этой статье мы рассмотрим, как защитить приватный SSH‑ключ в Termux с помощью GnuPG (gpg) и ssh‑agent, а также автоматизировать процесс добавления ключа через ssh‑add.

Почему обычное хранение небезопасно

  • Файлы в ~/.ssh доступны любому приложению с правами доступа к хранилищу Termux.
  • При потере телефона или его компрометации злоумышленник может скопировать ключ и получить доступ к вашим серверам.
  • Стандартные права доступа (600) защищают только от других пользователей Linux‑системы, но не от Android‑приложений.

Установка необходимых пакетов

pkg update && pkg upgrade -y
pkg install gnupg openssh -y

Пакет gnupg предоставляет инструменты для асимметричного шифрования, а openssh — клиентскую часть ssh и вспомогательные утилиты (ssh‑add, ssh‑agent).

Создание или импорт SSH‑ключа

Если у вас уже есть готовый ключ, скопируйте его в ~/.ssh/id_rsa. В противном случае сгенерируйте новый:

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "your@email.com"

Не задавайте пароль, если планируете хранить ключ в зашифрованном виде GnuPG – пароль будет запрашиваться у gpg.

Шифрование приватного ключа с помощью GnuPG

Создайте (если ещё нет) GPG‑ключ, который будет использоваться для шифрования:

gpg --full-generate-key

Выберите тип RSA and RSA (default) (2048 бит или 4096 бит) и задайте надёжный пароль. После завершения запомните KEY_ID (например, AB12CDEF).

Зашифруйте приватный SSH‑ключ:

gpg --output ~/.ssh/id_ed25519.gpg --encrypt --recipient AB12CDEF ~/.ssh/id_ed25519

После успешного шифрования можно удалить оригинальный файл:

rm -f ~/.ssh/id_ed25519

Настройка ssh‑agent и автоматическое добавление ключа

Для того, чтобы ssh использовал ваш зашифрованный ключ, необходимо:

  1. Запустить ssh‑agent и экспортировать переменные окружения.
  2. Расшифровать ключ в RAM и добавить его в агент через ssh‑add.

Создайте скрипт ~/bin/ssh-agent-start.sh (не забудьте сделать его исполняемым chmod +x):

#!/data/data/com.termux/files/usr/bin/bash

# Запуск ssh-agent, если он ещё не запущен
if ! pgrep -x ssh-agent > /dev/null; then
    eval "$(ssh-agent -s)"
fi

# Расшифровка ключа в временный файл (в RAM)
TMP_KEY=$(mktemp -p /dev/shm sshkey.XXXXXX)

gpg --quiet --batch --yes --decrypt ~/.ssh/id_ed25519.gpg > "$TMP_KEY"
chmod 600 "$TMP_KEY"

# Добавление в агент (ssh‑add запросит пароль gpg, если он нужен)
ssh-add "$TMP_KEY"

# Удаляем временный файл сразу после добавления
shred -u "$TMP_KEY"

# Сообщаем пользователю
echo "SSH‑ключ успешно добавлен в ssh‑agent"

Теперь достаточно выполнить скрипт один раз после каждой перезагрузки Termux:

~/bin/ssh-agent-start.sh

Для автоматизации добавьте вызов в файл ~/.bashrc (или ~/.zshrc, если используете Zsh):

# --- BEGIN: Автозапуск ssh‑agent с зашифрованным ключом
if [ -z "$SSH_AUTH_SOCK" ]; then
    source ~/bin/ssh-agent-start.sh
fi
# --- END

Проверка работы

После выполнения скрипта проверьте, что агент действительно хранит ваш ключ:

ssh-add -l

Вы увидите отпечаток вашего публичного ключа. Теперь любые ssh‑соединения будут использовать его автоматически.

Дополнительные меры защиты

  • Блокировка экрана Android – предотвращает доступ к Termux без разблокировки.
  • Тайм‑аут ssh‑agent – можно задать SSH_AGENT_TIMEOUT (например, 3600 сек.) и добавить в .bashrc:
    export SSH_AGENT_TIMEOUT=3600
  • Хранение GPG‑ключа в аппаратном токене (YubiKey) – полностью исключает хранение пароля в памяти устройства.

Устранение типичных проблем

ПроблемаПричинаРешение
«gpg: decryption failed: No secret key»Отсутствует соответствующий секретный GPG‑ключ в keyring.Импортируйте ключ командой gpg --import your_private_key.asc.
«ssh-add: Could not open a connection to your authentication agent»ssh‑agent не запущен или переменные окружения не экспортированы.Убедитесь, что скрипт ssh-agent-start.sh выполнен, либо запустите eval "$(ssh-agent -s)" вручную.
«Permission denied (publickey)»Ключ не был добавлен в агент или использован неверный публичный ключ.Проверьте вывод ssh-add -l и убедитесь, что публичный ключ присутствует в ~/.ssh/authorized_keys на сервере.

Заключение

Защита SSH‑ключей в Termux – это комбинация надёжного шифрования (GnuPG) и удобного доступа через ssh‑agent. При правильной настройке ваш приватный ключ хранится в зашифрованном виде, появляется в памяти только на время сеанса и автоматически удаляется после использования. Такой подход минимизирует риск утечки и делает работу с удалёнными системами на мобильных устройствах безопасной.

Если вам требуется индивидуальная настройка безопасной инфраструктуры, аудит мобильных DevOps‑процессов или интеграция аппаратных токенов (YubiKey, Nitrokey) – команда RybinskLab готова предоставить профессиональные услуги. Мы поможем построить надёжную систему доступа, оптимизировать скрипты автоматизации и обеспечить соответствие требованиям информационной безопасности.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

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