Гид по технологиям

Автоматизация SSH в Bash: sshpass и SSH‑ключи

• 4 min read • DevOps • Обновлено 20 Nov 2025
Автоматизация SSH: sshpass и SSH‑ключи
Автоматизация SSH: sshpass и SSH‑ключи

Оболочка Bash с командной строкой

Быстрые ссылки

Использование sshpass

Стандартный клиент ssh не имеет флага –password, поэтому для автоматической передачи пароля используют утилиту sshpass. Утилита полезна для быстрых одноразовых задач, но не подходит для постоянной автоматизации в продуктивной среде.

Установка (примеры для популярных дистрибутивов):

# Debian/Ubuntu
sudo apt-get install sshpass

# RHEL/CentOS (EPEL может быть нужен)
sudo yum install sshpass

# Fedora
sudo dnf install sshpass

# Arch Linux
sudo pacman -S sshpass

Простейший синтаксис в скрипте:

sshpass -p 'пароль' ssh user@remote

Но так писать не рекомендуется: пароль попадёт в историю команд и может быть виден другим процессам. Лучше хранить пароль в файле с ограниченными правами:

echo "пароль" > /path/to/password_file
chmod 600 /path/to/password_file
sshpass -f /path/to/password_file ssh user@remote

Альтернативный безопаснее вариант — передавать пароль через переменную окружения (опция -e):

export SSHPASS='пароль'
sshpass -e ssh user@remote
unset SSHPASS

Важно: sshpass взаимодействует с вводом пароля и представляет собой обходной путь — он не шифрует пароль и не управляет доступом. Примеры плохих практик:

  • Запись пароля в репозиторий или общий конфигурационный файл.
  • Разрешения файлов выше 600 для файла с паролем.
  • Оставлять переменные окружения с паролями в CI‑логах.

Варианты использования и флаги

  • -p ‘Пароль’ — передать в командной строке (небезопасно).
  • -f файл — взять пароль из файла.
  • -e — взять пароль из переменной окружения SSHPASS.
  • -P prompt — указать альтернативную подсказку (при особых серверах).

Настройка SSH‑ключей

SSH‑ключи — предпочтённый способ аутентификации. Они длиннее, труднее подделать и позволяют хранить доступ централизованно.

Генерация ключа (рекомендуется ed25519, иначе RSA с достаточной длиной):

# быстрее и безопаснее
ssh-keygen -t ed25519 -C "your_email@example.com"

# или, если требуется RSA
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

По умолчанию ключи сохраняются в ~/.ssh/id_ed25519 и ~/.ssh/id_ed25519.pub (или id_rsa*.pub). Публичный ключ нужно добавить в сервер в файл ~/.ssh/authorized_keys пользователя.

Есть удобная команда, которая копирует ключ и настраивает права:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host

После этого вход по паролю не потребуется (если на сервере разрешена аутентификация по ключам).

Рекомендации по безопасности ключей

  • Используйте passphrase для приватного ключа и ssh‑agent.
  • Храните приватный ключ с правами 600.
  • При необходимости используйте hardware token (YubiKey) или менеджер ключей.
  • Регулярно ревокуйте и проверяйте список authorized_keys на сервере.

Отключение парольной аутентификации на сервере

Отредактируйте /etc/ssh/sshd_config на сервере:

PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no

# при желании ограничить доступ по IP
AllowUsers user@192.0.2.0/24

Перезапустите sshd:

sudo systemctl restart sshd
# или
sudo service sshd restart

Отключение паролей повышает безопасность, но перед этим убедитесь, что у вас есть рабочие ключи и доступ на случай ошибки.

Когда sshpass не подходит

  • Автоматизация CI/CD для продакшн‑среды — использовать ключи или специальные сервисы секретов (Vault, AWS Secrets Manager и т.п.).
  • Множественные пользователи и ротация паролей — управление ключами и централизованная авторизация проще в поддержке.
  • Требования соответствия и аудита — хранение паролей в файлах не отвечает стандартам.

Чек‑лист безопасности и роль‑ориентированные задачи

Важно: этот чек‑лист поможет быстро проверить основные шаги перед развёртыванием.

Чек‑лист для админа:

  • Создать ed25519 ключ и проверить вход локально.
  • Развернуть публичный ключ в authorized_keys на целевых серверах.
  • Настроить sshd_config: PasswordAuthentication no, PermitRootLogin no.
  • Настроить двухфакторную аутентификацию для SSH при необходимости.
  • Настроить логирование и оповещения об неудачных попытках входа.

Чек‑лист для разработчика/интеграции:

  • Использовать ssh‑agent в CI или сервисный ключ с минимальным доступом.
  • Хранить приватные ключи в менеджере секретов, не в репозитории.
  • Обеспечить ротацию ключей и ревокацию при изменениях в команде.

CI/Automation (короткий SOP):

  • Храните приватный ключ в защищённом хранилище CI.
  • Делайте временные ключи с ограниченным TTL для одноразовых задач.
  • Логируйте использование ключей и выполняйте аудит.

Небольшая методология принятия решения

Если вам нужна простая автоматизация без долгосрочных обязательств и вы понимаете риски — sshpass подойдёт для временных задач. Если доступ постоянный, критичен или требует аудита — внедряйте SSH‑ключи и сервис управления секретами.

flowchart TD
    A[Нужно автоматизировать SSH?] --> B{Это кратковременная задача?}
    B -- Да --> C[Можно временно использовать sshpass с файлом и chmod 600]
    B -- Нет --> D[Использовать SSH‑ключи + ssh-agent / менеджер секретов]
    D --> E{Требуется аудит и ротация?}
    E -- Да --> F[Интегрировать с Vault или аналогом]
    E -- Нет --> G[Управлять ключами через централизованный инвентарь]

Глоссарий — одно предложение на термин

  • sshpass — утилита для передачи пароля в stdin при использовании ssh.
  • ssh‑agent — демон, хранящий приватные ключи и дающий доступ без ввода passphrase.
  • authorized_keys — файл на сервере с публичными ключами, разрешающими вход.
  • ed25519 — современный тип ключа SSH, рекомендуемый за баланс безопасности и скорости.

Короткое резюме

  • sshpass решает задачу передачи паролей в скриптах, но повышает риск утечки.
  • SSH‑ключи (особенно ed25519) — предпочтительный, более безопасный подход.
  • Отключение PasswordAuthentication на серверах и использование менеджеров секретов — лучшая практика для продакшна.

Важно: перед массовым переходом на ключи подготовьте план отката и тестовую сессию для восстановления доступа, чтобы не потерять доступ к серверам.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро