Когда я впервые узнал, как создавать ключи ssh, все учебные пособия, которые я прочитал, указали, что следует выбрать хорошую парольную фразу. Но недавно, при настройке процесса демона, которому требуется ssh для другого компьютера, я обнаружил, что единственный способ (кажется) иметь ключ, который мне не нужно аутентифицировать при каждой загрузке, - это создать ключ с пустым кодовая фраза. Итак, мой вопрос: каковы проблемы с использованием ключа без ключевой фразы?

answer

Ключ без парольной фразы зависит от того, что никто другой не сможет получить этот ключ (кто в любом случае не сможет получить доступ к ресурсам, к которым он дает доступ). Итак, если ключ предоставляет доступ к машине, находящейся рядом с ним, и обе машины имеют одинаковый уровень электронной и физической безопасности, тогда в этом нет ничего страшного.

С другой стороны, если ваш ключ находится на машине с плохой безопасностью (возможно, у него много ненадежных пользователей, он легко физически доступен или не обновляется в режиме исправлений), то вы, вероятно, не используете Я не хочу хранить там ключи без парольной фразы.

В конечном счете, все сводится к уверенности в вашей настройке и взвешиванию рисков / затрат, связанных с ее выполнением - если вы можете быть достаточно уверены, что злоумышленнику нереально легче получить доступ к ключу, чем к ресурсу, к которому ключ дает вам доступ. , тогда ты в порядке. Если у вас нет такой уверенности, вам, вероятно, следует исправить причины, почему :)

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

если вы хотите зашифровать свой закрытый ключ, вы можете использовать его ssh-agentна своей рабочей станции для «кэширования» незашифрованного ключа. когда вы хотите сохранить свой расшифрованный ключ, вы запускаете ssh-add ~/.ssh/id_rsaили как бы там ни был назван ваш закрытый ключ. Вам будет предложено ввести пароль, и расшифрованный ключ будет доступен для ваших ssh-соединений до тех пор, пока вы не выйдете из системы, не завершите работу ssh-agentили не завершите работу.

вы можете killсохранить ключи с помощью, ssh-agent -kи вы можете назначить время жизни ключа, чтобы он был в памяти, ssh-agent -t [seconds]например, таким образом; если вы не хотите, чтобы ваш ключ был расшифрован вечно, но вы хотите много использовать ssh для своих хостов, вы можете установить тайм-аут на 5-10 минут. так что вам не нужно постоянно вводить пароль вашего ключа.

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

если вы похожи на меня и храните свой закрытый ключ на флэш-накопителе, вы определенно захотите его зашифровать, даже если это всего лишь закрытый ключ (отдельный ключ, который я использую на своей рабочей станции, поэтому, если Я теряю свой ключ, я легко могу просто удалить открытый ключ флэш-накопителя из моего ~/.ssh/authorized_keysсписка серверов , что также вызывает / отличную / причину для добавления ПОЛЕЗНЫХ комментариев к вашим открытым ключам)

в вашем ответе на предыдущий ответ вы сказали, что только люди, которым вы доверяете, имеют доступ к машине с ключами. Я просто хочу уточнить, что ваш закрытый ключ НЕ должен находиться на сервере, к которому вы подключаетесь, в случае, если вы это делаете. на сервере должен быть только ваш открытый ключ, и это не проблема, поэтому это «открытый» ключ.

о, я забыл упомянуть; Я запускаю, ssh-agentкогда запускаю X, иначе дешифрованные ключи, которые я храню ssh-add, не сохраняются в разных xtermсеансах, и мне приходится повторно вводить пароль каждый раз, когда я закрываю xtermзапущенный ssh-addмной. В моем ~/.xinitrcфайле у меня есть:

if [ -x /usr/bin/ssh-agent ]; then
   eval $(/usr/bin/ssh-agent)
fi

У меня есть вызов для ssh-agentобертывания, evalпотому что ssh-agent возвращает некоторые переменные среды, которые необходимо установить при запуске и запускать ~/.xinitrc, переменные среды постоянны на протяжении всего сеанса X.

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

  1. Защитите ключ с помощью файловой системы perms.
  2. Используйте ключ, защищенный паролем, и вводите ключ вручную при каждом перезапуске.
  3. Используйте ключ, защищенный паролем, и сохраните ключ в файловой системе, чтобы автоматизировать перезапуск.

У каждого из них есть недостатки, поэтому все зависит от того, чего вы больше всего боитесь.

Для автоматического доступа, который, как вы говорите, требует ключей без парольной фразы, я всегда использую дополнительные параметры authorized_keys (см. Sshd (8)), чтобы ограничить команду, которую можно запустить.

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

Затем я также привязываю его к IP-адресам, которые могут подключаться с помощью этого ключа (не на 100% надежный, но и с ограничением команд).

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

Если вы хотите использовать ssh для выполнения какой-либо автоматизированной процедуры - я имею в виду конкретно проверки Nagios - тогда вы, вероятно, не захотите использовать парольную фразу.

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

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

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

сертификаты ssh

~/.ssh/authorized_keysФайл предоставляет доступ к SSH - сервер с опцией грантов , потому что в настройках по умолчанию , что файл принадлежит пользователю, так что пользователь может добавить открытые ключи друга, чтобы разделить доступ. Также по усмотрению пользователя реализовать такие параметры, как упомянутый @jrg. Sshd не знает, есть ли у пользователя кодовая фраза или нет. Итак, независимо от вашего мнения о безопасности использования парольных фраз, всегда найдутся люди, которые их не используют или не удаляют.

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

ssh-keygen -t ed25519 -a 500 -f ~/.ssh/trusted-user-ca-keys

Открытый ключ CA устанавливается на ssh-серверах. И AuthorizedKeysFile, и PasswordAuthentication отключены:

TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pub
PasswordAuthentication no
AuthorizedKeysFile /dev/null

Единственный способ получить доступ к ssh-серверу - использовать подписанный открытый ключ. Любой, кому требуется доступ, должен подать заявку на получение доступа, отправив свой открытый ключ в ЦС. Взамен они получают сертификат защиты от несанкционированного доступа, который может включать параметры, как описано в man ssh-keygen, и, например, срок действия в течение одной недели:

ssh-keygen -s ~/.ssh/ca_ssh -I user -O no-port-forwarding -O no-pty -V +1w user.pub
  • Вам больше не нужно управлять файлами authorized_keys на своих серверах.
  • Пользователи не могут вмешиваться в свой файл authorized_keys.
  • Вы можете менять разрешения с временным доступом.
  • Вы можете заблокировать параметры.