Перейти к основному содержимому

SSH-ключи из Bitwarden на macOS

·465 слов·3 минут·
logo

Предыстория
#

Долгое время хранил SSH-ключи в виде файлов на диске. Это неудобно и небезопасно: файлы могут быть украдены, забыты на разных устройствах, да и бэкапить их — отдельная головная боль.

Пользуюсь Bitwarden, а точнее Vaultwarden сервером с десктопным клиентом на компе. Через него храню пароли, TOTP и т.д. Но в Bitwarden можно хранить ещё и SSH-ключи, а встроенный SSH Agent позволяет использовать их без сохранения на диск.

Зачем это нужно?
#

  • Безопасность — приватные ключи не лежат в файлах на диске
  • Централизованное хранение — все ключи в одном месте, с доступом со всех устройств
  • Автоматизация — SSH сам перебирает ключи, правда Bitwarden не сопоставляет ключи по имени хоста. Он просто предлагает все доступные ключи по очереди. Сервер сам выбирает подходящий.
  • Синхронизация — добавил ключ в Bitwarden, и он доступен на всех устройствах

Что понадобится
#

  • Bitwarden Desktop для macOS. Поставить его можно через Homebrew: brew install bitwarden
  • Немного свободного времени

Шаг 1: Включаем SSH Agent в Bitwarden
#

  1. Открываем Bitwarden Desktop приложение
  2. Переходим в Settings → SSH Agent
  3. Включаем опцию “Enable SSH Agent”

После включения Bitwarden создаст Unix-сокет для работы с SSH. На macOS путь к сокету:

~/.bitwarden-ssh-agent.sock

Шаг 2: Добавляем SSH-ключи в Bitwarden
#

  1. В Bitwarden создаём новый элемент типа SSH Key

Публичный ключ при этом должен быть добавлен на серверы в ~/.ssh/authorized_keys — как обычно.

Шаг 3: Настраиваем окружение
#

Теперь нужно указать системе использовать сокет Bitwarden вместо стандартного SSH-агента macOS.

Открываем ~/.zshrc и добавляем:

export SSH_AUTH_SOCK="$HOME/.bitwarden-ssh-agent.sock"

Применяем изменения:

source ~/.zshrc

Шаг 4: Обновляем SSH config
#

Открываем ~/.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: Проверяем работу
#

Перед проверкой убедитесь, что Bitwarden запущен и разблокирован. Ключи доступны только после разблокировки хранилища.

Проверяем, что Bitwarden отдал ключи:

ssh-add -l

Вывод должен показать ключи из Bitwarden:

256 SHA256:i0DqblPzC/00lDAJzetqI53EYzzr+DF@#CDFDF@ LinuxServer (ED25519)
256 SHA256:uFCDz4H6b+dfYb+Od4VilIlOF7FZKCwNA99PgdXdyj0 LinuxServer2 (ED25519)

Подключаемся к серверу:

ssh LinuxServer

Примечание: После подключения в Bitwarden-клиенте появится запрос на разрешение использования ключа. Но если надоедает это, можно поставить настройку, чтобы не спрашивал, пока не будет заблокировано хранилище.

Как это работает
#

  1. При подключении SSH (ssh LinuxServer) сервер отправляет список допустимых ключей
  2. Bitwarden SSH Agent получает запрос и перебирает все разблокированные SSH-ключи
  3. Сервер принимает тот ключ, который есть в ~/.ssh/authorized_keys

Важно: Bitwarden не сопоставляет ключи по имени хоста. Он просто предлагает все доступные ключи по очереди. Сервер сам выбирает подходящий.

Заключение
#

Теперь все SSH-ключи хранятся только в Bitwarden, без файлов на диске. Подключение происходит автоматически, без лишних действий.

Это безопаснее, удобнее и проще в управлении. Особенно если у вас много ключей для разных серверов.

Related