Home » Как создать SSH ключи с OpenSSH на macOS или Linux
Как создать SSH ключи с OpenSSH на macOS или Linux

Как создать SSH ключи с OpenSSH на macOS или Linux

Рано или поздно каждый серверный админ сталкивается с необходимостью настроить SSH-доступ без постоянного ввода паролей. Не только из-за удобства, но и из соображений безопасности — SSH-ключи значительно надёжнее паролей и практически невозможно взломать методом брутфорса. Сегодня разберём, как создать и настроить SSH-ключи с OpenSSH на macOS и Linux быстро и правильно.

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

Как работают SSH-ключи

SSH-ключи работают по принципу асимметричной криптографии. Генерируется пара ключей: приватный (остаётся на вашем компьютере) и публичный (размещается на сервере). При подключении происходит математическая верификация без передачи секретной информации по сети.

Процесс выглядит примерно так:

  • Клиент отправляет запрос на подключение
  • Сервер генерирует случайное число и шифрует его публичным ключом
  • Клиент расшифровывает число приватным ключом и отправляет хэш обратно
  • Сервер проверяет хэш и разрешает доступ

Создание SSH-ключей: пошаговое руководство

Базовая генерация ключей

Для создания стандартной пары ключей используется команда ssh-keygen:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Разберём параметры:

  • -t rsa — тип алгоритма шифрования
  • -b 4096 — длина ключа в битах
  • -C — комментарий для идентификации ключа

Система предложит выбрать место сохранения (по умолчанию ~/.ssh/id_rsa) и установить passphrase. Рекомендую всегда использовать passphrase для дополнительной защиты.

Выбор типа ключа

OpenSSH поддерживает несколько типов ключей. Вот сравнение основных:

Тип Безопасность Производительность Совместимость Рекомендация
RSA 4096 Высокая Средняя Отличная Для максимальной совместимости
Ed25519 Очень высокая Высокая Хорошая Для новых систем
ECDSA Высокая Высокая Средняя Не рекомендуется
DSA Низкая Средняя Устаревшая Избегать

Современный подход: Ed25519

Для новых проектов рекомендую использовать Ed25519 — современный и быстрый алгоритм:

ssh-keygen -t ed25519 -C "your_email@example.com"

Ed25519 генерирует более короткие ключи (32 байта) с лучшей производительностью и безопасностью по сравнению с RSA.

Размещение ключей на сервере

Метод 1: ssh-copy-id (рекомендуется)

Самый простой способ:

ssh-copy-id username@server_ip

Команда автоматически скопирует ваш публичный ключ в файл ~/.ssh/authorized_keys на сервере.

Метод 2: Ручное копирование

Если ssh-copy-id недоступен:

cat ~/.ssh/id_rsa.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Метод 3: Через панель управления хостингом

Многие хостинг-провайдеры предоставляют веб-интерфейс для добавления SSH-ключей. Просто скопируйте содержимое файла ~/.ssh/id_rsa.pub в соответствующее поле.

Если вы ищете хостинг с удобным управлением SSH-ключами, рекомендую посмотреть VPS-серверы или выделенные серверы с простой панелью управления.

Настройка SSH-клиента

Конфигурационный файл SSH

Создайте файл ~/.ssh/config для удобного управления подключениями:

Host myserver
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

Host production
    HostName prod.example.com
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    ForwardAgent yes

Теперь можно подключаться просто: ssh myserver

Полезные опции конфигурации

  • IdentitiesOnly yes — использовать только указанный ключ
  • ForwardAgent yes — проброс SSH-агента для работы с Git
  • ServerAliveInterval 60 — keep-alive для нестабильных соединений
  • StrictHostKeyChecking no — отключить проверку отпечатков (только для dev-окружения!)

Управление SSH-агентом

Запуск SSH-агента

SSH-агент хранит расшифрованные приватные ключи в памяти:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

Автоматическая загрузка ключей

Для macOS добавьте в ~/.ssh/config:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

Для Linux добавьте в ~/.bashrc или ~/.zshrc:

if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa
fi

Продвинутые сценарии использования

Множественные ключи для разных проектов

Создайте отдельные ключи для разных проектов:

ssh-keygen -t ed25519 -f ~/.ssh/project_a -C "project-a@company.com"
ssh-keygen -t ed25519 -f ~/.ssh/project_b -C "project-b@company.com"

Настройте в ~/.ssh/config:

Host project-a-server
    HostName server-a.example.com
    User deploy
    IdentityFile ~/.ssh/project_a

Host project-b-server
    HostName server-b.example.com
    User deploy
    IdentityFile ~/.ssh/project_b

Проксирование через промежуточный сервер

Для доступа к серверам через jump-host:

Host jump-server
    HostName jump.example.com
    User admin
    IdentityFile ~/.ssh/id_rsa

Host internal-server
    HostName 10.0.0.10
    User root
    ProxyJump jump-server
    IdentityFile ~/.ssh/id_rsa

Интеграция с Git

Для работы с Git через SSH создайте отдельный ключ:

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_git -C "git@example.com"

Добавьте в ~/.ssh/config:

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_git

Автоматизация и скрипты

Скрипт для массового развёртывания ключей

Создайте скрипт для автоматической настройки SSH-ключей на множественных серверах:

#!/bin/bash

SERVERS=(
    "user@server1.example.com"
    "user@server2.example.com"
    "user@server3.example.com"
)

PUBLIC_KEY=$(cat ~/.ssh/id_rsa.pub)

for server in "${SERVERS[@]}"; do
    echo "Configuring SSH key for $server..."
    ssh "$server" "mkdir -p ~/.ssh && echo '$PUBLIC_KEY' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh"
done

Ansible playbook для SSH-ключей

Для автоматизации с Ansible:

---
- name: Configure SSH keys
  hosts: all
  tasks:
    - name: Add SSH key
      authorized_key:
        user: "{{ ansible_user }}"
        state: present
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
        comment: "Admin key"

Безопасность и лучшие практики

Настройка сервера SSH

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

PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin no
AllowUsers deploy admin
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

Перезапустите SSH-сервис:

sudo systemctl restart ssh

Аудит и мониторинг

Регулярно проверяйте файлы authorized_keys:

find /home -name "authorized_keys" -exec ls -la {} \;

Мониторьте SSH-подключения в логах:

tail -f /var/log/auth.log | grep ssh

Альтернативные решения

Сравнение с другими методами аутентификации

Метод Безопасность Удобство Сложность настройки Применение
SSH-ключи Высокая Высокое Низкая Основной метод
Пароли Средняя Низкое Низкая Только для первоначальной настройки
2FA (Google Authenticator) Очень высокая Среднее Высокая Для критичных систем
Сертификаты Очень высокая Высокое Очень высокая Крупные организации

Похожие утилиты

  • OpenSSH — стандартная реализация SSH
  • Mosh — мобильный SSH с поддержкой роуминга
  • Teleport — современный SSH-сервер с веб-интерфейсом
  • Age — современная альтернатива GPG с SSH-ключами

Troubleshooting: частые проблемы

Ошибка “Permission denied (publickey)”

Проверьте права доступа:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Ключ не принимается сервером

Проверьте логи SSH в режиме отладки:

ssh -v username@server

На сервере проверьте логи:

sudo tail -f /var/log/auth.log

Несколько ключей — используется не тот

Укажите конкретный ключ:

ssh -i ~/.ssh/specific_key username@server

Интересные факты и нестандартные применения

SSH-ключи можно использовать не только для подключения к серверам:

  • Git signing: Подписывание коммитов SSH-ключами (Git 2.34+)
  • Port forwarding: Создание туннелей для доступа к внутренним сервисам
  • SOCKS proxy: ssh -D 8080 user@server для проксирования трафика
  • Remote command execution: Выполнение команд без интерактивного подключения
  • File synchronization: Интеграция с rsync для безопасной синхронизации

SSH-ключи в контейнерах

Для Docker-контейнеров можно монтировать SSH-ключи:

docker run -v ~/.ssh:/root/.ssh:ro -it ubuntu:latest

Временные ключи

Создание ключей с ограниченным временем жизни:

ssh-keygen -t ed25519 -f temp_key -N ""
ssh-keygen -s ca_key -I temp_user -V +1h temp_key.pub

Заключение и рекомендации

SSH-ключи — это основа безопасной работы с серверами. Вот мои рекомендации:

  • Для новых проектов: Используйте Ed25519 ключи
  • Для максимальной совместимости: RSA 4096 бит
  • Всегда используйте passphrase для приватных ключей
  • Настройте SSH-агент для удобства работы
  • Создавайте отдельные ключи для разных проектов
  • Регулярно ротируйте ключи (раз в 1-2 года)
  • Отключите парольную аутентификацию на серверах

SSH-ключи открывают широкие возможности для автоматизации: от простых скриптов развёртывания до сложных CI/CD пайплайнов. Они интегрируются с большинством современных инструментов и являются стандартом де-факто для безопасного доступа к серверам.

Правильно настроенные SSH-ключи не только повышают безопасность, но и значительно упрощают ежедневную работу с серверами. Потратьте время на правильную настройку один раз — и получите удобство и безопасность на годы вперёд.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked