
Предыстория Link to heading
Долгое время хранил SSH-ключи в виде файлов на диске. Это неудобно и небезопасно: файлы могут быть украдены, забыты на разных устройствах, да и бэкапить их — отдельная головная боль.
Пользуюсь Bitwarden, а точнее Vaultwarden сервером с десктопным клиентом на компе. Через него храню пароли, TOTP и т.д. Но в Bitwarden можно хранить ещё и SSH-ключи, а встроенный SSH Agent позволяет использовать их без сохранения на диск.
Зачем это нужно? Link to heading
- Безопасность — приватные ключи не лежат в файлах на диске
- Централизованное хранение — все ключи в одном месте, с доступом со всех устройств
- Автоматизация — SSH сам перебирает ключи, правда Bitwarden не сопоставляет ключи по имени хоста. Он просто предлагает все доступные ключи по очереди. Сервер сам выбирает подходящий.
- Синхронизация — добавил ключ в Bitwarden, и он доступен на всех устройствах
Что понадобится Link to heading
- Bitwarden Desktop для macOS. Поставить его можно через Homebrew:
brew install bitwarden - Немного свободного времени
Шаг 1: Включаем SSH Agent в Bitwarden Link to heading
- Открываем Bitwarden Desktop приложение
- Переходим в Settings → SSH Agent
- Включаем опцию “Enable SSH Agent”

После включения Bitwarden создаст Unix-сокет для работы с SSH. На macOS путь к сокету:
~/.bitwarden-ssh-agent.sock
Шаг 2: Добавляем SSH-ключи в Bitwarden Link to heading
- В Bitwarden создаём новый элемент типа SSH Key

Публичный ключ при этом должен быть добавлен на серверы в ~/.ssh/authorized_keys — как обычно.
Шаг 3: Настраиваем окружение Link to heading
Теперь нужно указать системе использовать сокет Bitwarden вместо стандартного SSH-агента macOS.
Открываем ~/.zshrc и добавляем:
export SSH_AUTH_SOCK="$HOME/.bitwarden-ssh-agent.sock"
Применяем изменения:
source ~/.zshrc
Шаг 4: Обновляем SSH config Link to heading
Открываем ~/.ssh/config и убираем IdentityFile (если у вас были уже добавлены, если нет, добавляем с нуля) для хостов, которые будут использовать ключи из Bitwarden.
Было:
Host LinuxServer
Hostname 192.168.1.11
user root
port 22
IdentityFile ~/LinuxServer.key
Должно стать:
Host LinuxServer
Hostname 192.168.1.11
user root
port 22
AddKeysToAgent yes
Bitwarden SSH Agent сам предложит все доступные ключи при подключении.
Шаг 5: Проверяем работу Link to heading
Перед проверкой убедитесь, что Bitwarden запущен и разблокирован. Ключи доступны только после разблокировки хранилища.
Проверяем, что Bitwarden отдал ключи:
ssh-add -l
Вывод должен показать ключи из Bitwarden:
256 SHA256:i0DqblPzC/00lDAJzetqI53EYzzr+DF@#CDFDF@ LinuxServer (ED25519)
256 SHA256:uFCDz4H6b+dfYb+Od4VilIlOF7FZKCwNA99PgdXdyj0 LinuxServer2 (ED25519)
Подключаемся к серверу:
ssh LinuxServer
Примечание: После подключения в Bitwarden-клиенте появится запрос на разрешение использования ключа. Но если надоедает это, можно поставить настройку, чтобы не спрашивал, пока не будет заблокировано хранилище.

Как это работает Link to heading
- При подключении SSH (
ssh LinuxServer) сервер отправляет список допустимых ключей - Bitwarden SSH Agent получает запрос и перебирает все разблокированные SSH-ключи
- Сервер принимает тот ключ, который есть в
~/.ssh/authorized_keys
Важно: Bitwarden не сопоставляет ключи по имени хоста. Он просто предлагает все доступные ключи по очереди. Сервер сам выбирает подходящий.
Заключение Link to heading
Теперь все SSH-ключи хранятся только в Bitwarden, без файлов на диске. Подключение происходит автоматически, без лишних действий.
Это безопаснее, удобнее и проще в управлении. Особенно если у вас много ключей для разных серверов.