Где хранятся 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— синхронизация файлов через SSHgit— при использовании 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_keysSSH 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/null4. Отключите аутентификацию по паролю
После настройки SSH ключей полностью отключите вход по SSH с использованием пароля в /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-passwordПерезагрузите sshd после изменений:
systemctl restart sshd5. Ограничьте использование корневого ключа
Избегайте использования корневых 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 ключам с той же осторожностью, что и к любым критическим учетным данным. Потому что это именно то, что они собой представляют.
на всех хостинговых услугах