Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
DNS Linux OS

Где хранятся SSH ключи в Linux — и как ими безопасно управлять

SSH (Secure Shell) — один из наиболее критических инструментов в экосистеме Linux. Системные администраторы, разработчики и инженеры DevOps полагаются на него ежедневно для удаленного доступа к серверам, безопасной передачи файлов, автоматизации развертывания и управления инфраструктурой. Хотя большинство пользователей взаимодействуют с SSH через простую команду терминала, реальный основу безопасности составляют пары SSH-ключей — криптографические учетные данные, которые обеспечивают аутентификацию без пароля, автоматизированные рабочие процессы и усиленный контроль доступа.

Управляете ли вы одним экземпляром VPS Hosting или организуете доступ на десятках Dedicated Servers, понимание того, где именно хранятся SSH-ключи — и как ими правильно управлять — это не опционально. Это фундаментальное требование безопасности.

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

Что такое SSH ключи и почему они важны?

SSH ключи используют асимметричную криптографию для аутентификации пользователей и серверов. Каждая пара ключей состоит из:

  • Приватный ключ — хранится в секрете на клиентской машине, никогда не передается
  • Публичный ключ — размещается на удаленном сервере для проверки личности

При подключении к серверу SSH использует криптографический handshake для проверки того, что вы владеете приватным ключом, соответствующим публичному ключу на сервере — без передачи самого приватного ключа. Это принципиально более безопасно, чем аутентификация на основе пароля.

Расположение хранилища SSH-ключей по умолчанию (ключи пользователя)

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

~/.ssh/

Это расширяется до полного пути:

/home/username/.ssh/

Для пользователя root в частности:

/root/.ssh/

Общие файлы внутри ~/.ssh/

ФайлНазначение
id_rsaПриватный ключ RSA по умолчанию
id_rsa.pubСоответствующий публичный ключ RSA
id_ecdsaПриватный ключ ECDSA
id_ed25519Приватный ключ Ed25519 (рекомендуется)
id_*.pubПубличный ключ для любого приватного ключа
authorized_keysСписок публичных ключей, разрешённых для входа в этот аккаунт
known_hostsОтпечатки ранее подключённых серверов
configКонфигурация SSH-клиента для пользователя

Когда вы запускаете ssh-keygen, ключи по умолчанию записываются в эту директорию, если вы не указали другой путь во время генерации ключей.

Системные расположения SSH ключей (Host Keys)

Помимо пользовательских ключей, SSH daemon (sshd) — компонент на стороне сервера — поддерживает свой собственный набор хост-ключей. Они хранятся на уровне системы в:

/etc/ssh/

Файлы Host Key в /etc/ssh/

ФайлНазначение
ssh_host_rsa_keyПриватный ключ хоста RSA
ssh_host_rsa_key.pubПубличный ключ хоста RSA
ssh_host_ecdsa_keyПриватный ключ хоста ECDSA
ssh_host_ecdsa_key.pubПубличный ключ хоста ECDSA
ssh_host_ed25519_keyПриватный ключ хоста Ed25519
ssh_host_ed25519_key.pubПубличный ключ хоста Ed25519

Эти хост-ключи служат другой цели, чем пользовательские ключи. Когда клиент подключается к серверу в первый раз, сервер представляет свой публичный хост-ключ. Клиент сохраняет этот отпечаток в ~/.ssh/known_hosts. При последующих подключениях SSH проверяет совпадение отпечатка — защищая от атак типа man-in-the-middle.

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

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

Вы не ограничены директорией по умолчанию ~/.ssh/. SSH-ключи можно генерировать и хранить в любом месте файловой системы. Чтобы использовать ключ, хранящийся в нестандартном расположении, укажите его явно:

ssh -i /path/to/custom_key user@host

Использование ~/.ssh/config для нескольких ключей

Управление несколькими серверами, проектами или учетными записями пользователей становится намного проще с правильно настроенным файлом ~/.ssh/config. Это позволяет определить параметры для каждого хоста, включая используемый ключ:

Host production-server
    HostName 203.0.113.10
    User deploy
    IdentityFile ~/.ssh/production_ed25519

Host staging-server
    HostName 203.0.113.20
    User deploy
    IdentityFile ~/.ssh/staging_ed25519

Host github.com
    User git
    IdentityFile ~/.ssh/github_key

С этой конфигурацией запуск ssh production-server автоматически использует правильный ключ без каких-либо дополнительных флагов.

Как используются SSH ключи: клиент и сервер

Исходящие соединения (сторона клиента)

При инициировании SSH соединения SSH клиент ищет приватные ключи в ~/.ssh/ по умолчанию. Эти ключи используются для аутентификации на удаленном сервере.

Инструменты, использующие SSH ключи клиента:

  • ssh — прямой доступ к удаленной оболочке
  • scp — безопасное копирование файлов
  • rsync — синхронизация файлов через SSH
  • git — при использовании SSH-репозиториев

Входящие соединения (сторона сервера)

На сервере SSH проверяет определенный файл, чтобы определить, какие пользователи авторизованы для подключения:

~/.ssh/authorized_keys

Этот файл содержит один открытый ключ в строке. Каждая запись дает владельцу соответствующего приватного ключа разрешение на вход как этот пользователь.

Практический пример: Если пользователь alice хочет подключиться по SSH на сервер как пользователь webadmin, открытый ключ Alice должен присутствовать в /home/webadmin/.ssh/authorized_keys — не в собственном домашнем каталоге Alice на этом сервере.

Разрешения файлов — критически важны для безопасности SSH

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

Требуемые параметры разрешений

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/config

Таблица справочных разрешений

ПутьТребуемое разрешениеВосьмеричная
~/.ssh/Чтение/запись/выполнение только для владельца700
~/.ssh/authorized_keysЧтение/запись только для владельца600
~/.ssh/id_rsa (приватный ключ)Чтение/запись только для владельца600
~/.ssh/id_rsa.pub (публичный ключ)Чтение для владельца, чтение для остальных644
~/.ssh/configЧтение/запись только для владельца600

Чтобы исправить разрешения одной командой:

chmod 700 ~/.ssh && chmod 600 ~/.ssh/* && chmod 644 ~/.ssh/*.pub

Безопасное создание SSH ключей

Всегда предпочитайте Ed25519 вместо RSA для новых ключей. Ed25519 обеспечивает более надежную безопасность с меньшим размером ключей и более быстрой производительностью.

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

Для устаревших систем, требующих RSA, используйте минимум 4096 бит:

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

Всегда устанавливайте парольную фразу при запросе. Парольная фраза шифрует приватный ключ на диске, поэтому даже если злоумышленник получит доступ к вашей файловой системе, он не сможет использовать ключ без парольной фразы.

Управление ключами с помощью ssh-agent

Ввод пароля каждый раз при использовании SSH ключа становится непрактичным. ssh-agent решает эту проблему, кэшируя расшифрованные ключи в памяти на время вашей сессии.

Запуск ssh-agent и добавление ключа

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

Вам будет предложено ввести пароль один раз. После этого SSH операции автоматически используют кэшированный ключ.

Полезные команды ssh-agent

# List currently loaded keys
ssh-add -l

# Remove a specific key from the agent
ssh-add -d ~/.ssh/mykey

# Remove all keys from the agent
ssh-add -D

Копирование открытых ключей на удаленные серверы

Самый простой способ установить ваш открытый ключ на удаленный сервер — это ssh-copy-id:

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

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

Если ssh-copy-id недоступен, сделайте это вручную:

cat ~/.ssh/id_ed25519.pub | ssh user@remote-host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Аудит и отладка проблем с SSH ключами

Подробное логирование подключений

Когда аутентификация SSH не удается, режим подробности показывает ровно то, что происходит:

ssh -v user@host

Для еще большей детализации:

ssh -vvv user@host

Этот вывод показывает, какие файлы идентификации были попробованы, был ли консультирован агент и где произошла ошибка аутентификации.

Проверьте журнал SSH на стороне сервера

На удаленном сервере события аутентификации SSH регистрируются в:

# Debian/Ubuntu
tail -f /var/log/auth.log

# CentOS/RHEL/Fedora
tail -f /var/log/secure

# Systems using journald
journalctl -u sshd -f

Проверьте файл authorized_keys

# Check the file exists and has correct permissions
ls -la ~/.ssh/authorized_keys

# View its contents
cat ~/.ssh/authorized_keys

# Count how many keys are authorized
grep -c "ssh-" ~/.ssh/authorized_keys

SSH Key Security Best Practices

Надлежащее управление ключами выходит за рамки знания того, где хранятся файлы. Следуйте этим практикам на каждой управляемой системе:

1. Используйте один ключ для каждой цели

Никогда не переиспользуйте один и тот же SSH ключ в разных окружениях, для разных клиентов или проектов. Используйте отдельные ключи для личного доступа, автоматизации развертывания и общего доступа команды.

2. Регулярно ротируйте ключи

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

3. Аудит authorized_keys файлов

Регулярно проверяйте, какие открытые ключи авторизованы на каждом сервере. Удаляйте любые ключи, принадлежащие бывшим сотрудникам, устаревшей автоматизации или неизвестным источникам:

# Find all authorized_keys files on a system
find / -name "authorized_keys" 2>/dev/null

4. Отключите аутентификацию по паролю

После настройки SSH ключей полностью отключите вход по SSH с использованием пароля в /etc/ssh/sshd_config:

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password

Перезагрузите sshd после изменений:

systemctl restart sshd

5. Ограничьте использование корневого ключа

Избегайте использования корневых SSH ключей в нескольких окружениях. Вместо этого используйте учетные записи пользователей с включенным sudo и отдельными ключами.

6. Используйте аутентификацию на основе сертификатов для масштабирования

Для больших инфраструктур рассмотрите использование SSH сертификатов (через SSH Certificate Authority) вместо управления отдельными authorized_keys записями. Это значительно упрощает управление доступом на множество серверов.

SSH ключи в облачных и хостинг-средах

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

Для команд, управляющих несколькими средами, рассмотрите возможность объединения вашей стратегии SSH ключей со структурированной настройкой VPS Control Panels, которая может упростить управление пользователями и контроль доступа во всей вашей инфраструктуре.

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

Для команд, которые полагаются на Email Hosting наряду с инфраструктурой своего сервера, управление SSH ключами распространяется на защиту систем, обрабатывающих вашу почту — еще одна причина, почему последовательная гигиена ключей на всех серверах имеет значение.

Quick Reference: SSH Key File Locations

РасположениеТипНазначение
~/.ssh/id_ed25519Приватный ключ пользователяАутентификация клиента
~/.ssh/id_ed25519.pubОткрытый ключ пользователяРаспределяется на серверы
~/.ssh/authorized_keysАвторизованные открытые ключиКонтролирует, кто может войти
~/.ssh/known_hostsОтпечатки сервераПредотвращает MITM атаки
~/.ssh/configКонфигурация клиентаПараметры для каждого хоста
/etc/ssh/ssh_host_*Ключи хостаИдентификация сервера
/etc/ssh/sshd_configКонфигурация демонаПараметры SSH сервера

Заключение

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

Подведем итоги ключевых выводов:

  • Пользовательские ключи находятся в ~/.ssh/ и используются для аутентификации на стороне клиента
  • Ключи хоста находятся в /etc/ssh/ и идентифицируют сервер для подключающихся клиентов
  • authorized_keys контролирует входящий доступ — проверяйте его регулярно
  • Разрешения файлов не подлежат обсуждению — неправильные разрешения молча нарушают SSH
  • Ed25519 — предпочтительный тип ключа для создания новых ключей
  • Всегда используйте парольные фразы и ssh-agent для повседневного управления ключами
  • Ротируйте и проверяйте ключи как часть вашей регулярной гигиены безопасности

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

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