Храним SSH-ключи безопасно

Original author: kvaps
  • Translation


Хочу рассказать как безопасно хранить SSH-ключи на локальной машине, не боясь того, что какое-то приложение может украсть или расшифровать их.


Статья будет полезна тем, кто так и не нашел элегантного решения после паранои в 2018 и продолжает хранить ключи в $HOME/.ssh.


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


Это дает возможность безопасно хранить все ключи прямо в базе паролей и автоматически добавлять их в систему при её открытии. Как только база будет закрыта, использование SSH-ключей также станет невозможным.


Первым делом добавим автозапуск SSH-агента при входе в систему, для этого откройте ~/.bashrc в вашем любимом редакторе и добавьте в самый конец:


SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initialising new SSH agent..."
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

После чего нам нужно включить поддержку в KeePassXC:


Инструменты --> Параметры --> SSH-агент --> Включить SSH-агент



На этом настройка завершена, теперь попробуем добавить новый SSH-ключ в KeePassXC:


Нажимаем на иконку с ключом, затем заполняем данные:



Если ключ защищен паролем, укажите так-же пароль к нему


На вкладке Дополнительные загружаем вложение с нашим id_rsa:



На вкладке SSH-агент, отметим:


  • Добавить ключ в агент при открытии/разблокировке базы данных
  • Убрать ключ из агента при закрытии/блокировке базы данных

Далее выберем наш ключ (id_rsa) во вложении


И нажмем кнопку Добавить в агент:



Теперь при запуске KeePassXC ключ будет автоматически добавляться в SSH-агент, таким образом его можно больше не хранить на диске!

Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 25

    +3
    Отлично, как это провернуть на системе без иксов?
      0
      Хороший вопрос.
      Если вы про удаленный сервер, то думаю можно попробовать пробросить сокет ssh-агента для добавления ssh-ключа.
        0
        Есть keepassxc-cli

        Возможно софт можно собрать без Qt или статично, так чтоб Х не тянулся в зависимостях

        Но имо проще создать ссш ключ с запросом пароля
        0
        круто. не проще использовать связку (ключ с паролем) + TOTP? Может не удобно, но зато надежно
          0
          Конечно можно, но тут скорее решается вопрос хранения персональных ssh-ключей.
          Большинство людей и так используют KeePass для хранения паролей, но не знают что в нем есть такая замечательная возможность как взаимодействие с ssh-агентом.
            0
            Никогда не доверял пароли, особенно критичные стороннему софту. И keepass никогда не использовал. Так что, в данном случае, соглашусь с Вашим мнением
              +2
              а как вы храните многочисленные и разнообразные пароли?
            +1
            А еще проще использовать аппаратные хранилища ключей, типа GPG Card. Но его купить надо (и желательно не потерять случайно)
              0
              не проще, т.к. не везде есть возможность его использовать, а еще бэкапить нельзя
                0

                В целом да, но:


                • бекапить можно, по крайней мере yubikey при генерации предлагает это сделать
                • для бекапа можно сделать отдельный обычный ключ, который будет лежать в оффлайн хранилище (банковская ячейка и т.п.)
                • на основных ОС работает без проблем, не уверен только в мобильных; есть какие-то распространенные ситуации, где апаратный ключ невозможно использовать?
                  0
                  Вот только бэкап — это небезопасно само по себе, вот в чем проблема. Это конфликт надежности и безопасности, ибо бэкап могут украсть и незащищенный ключ попадет в руки злоумышленника.
              +1

              Сам использую Yubikey с forcesig. Довольно удобно (кроме необходимости вводить пин для каждой операции) и надёжно. Но для более быстрого сетапа можно попробовать Krypton.

                0
                А как быть если ключей несколько для разных хостов?
                  0
                  Таким образом можно добавить сколько хочешь ключей
                    0
                    Но при этом, к сожалению, если серверов больше 5-10, то данный способ хранения не очень будет удобным — потому как все ключи по списку будут отправляться на сервер, и после N-ного ключа (если нужный не был отправлен) сервер отключит клиента с ошибкой авторизации.
                      0

                      SSH умеет использовать public keys в качестве IdentityFile.
                      То есть ничто вам не мешает хранить id_rsa.pub в ~/.ssh и ссылаться на него в качестве IdentityFile для конкретных хостов, при этом сам private key будет надежно сохранен в кипасе.

                        0
                        Не совсем вас понял — как можно логинится с помочью паблик ключа? Как такое возможно? Буду благодарен за ссыль где почитать об этом.
                          0

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


                          ssh-add -l

                          https://superuser.com/questions/357602/use-a-specified-key-from-ssh-agent

                        0
                        del
                          0
                            0
                            Спасибо, посмотрю-почитаю :)
                      +2
                      ключи по умолчанию хранятся безопасно — они зашифрованы пассфразой, причем каждый своей, а тут один пароль на все. не делайте пустую пассфразу и все.
                        0
                        Тут ещё и решается вопрос менеджмента ключей весьма удобной гуйкой. При этом я храню свою БД в облаке и синхронизирую между хостами. Таким образом, мои ключи ещё и удобно забекаплены :-j
                          0

                          Шифрование ssh-ключей было достаточно сильно раскритикованно из-за возможности быстрого перебора паролей.


                          https://www.opennet.ru/opennews/art.shtml?num=49082

                            0
                            только устаревших же, поменяйте

                        Only users with full accounts can post comments. Log in, please.