Проверка ключей SSH имеют парольные фразы

5158
Peter Farmer

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

То, что я хочу сделать, это заставить этот скрипт проверить, что у каждого данного ssh-ключа пользователя есть пароль перед тем, как принять открытый ключ и распространить его.

Я попробовал несколько вещей, как используя ssh-agentи ssh-addзатем проблема возникает, когда ssh-addспрашивают на ключевую фразу.

Есть ли способ получить что-то вроде opensslпроверки парольной фразы, слегка потерпеть неудачу с кодом возврата, 1если ключ имеет парольную фразу?

Спасибо!

8
Не могли бы вы уточнить, является ли требование _ иметь_фрагмент_файла или _не_ иметь его - и по каким причинам? grawity 13 лет назад 0
grawity: Мое требование - убедиться, что пользователи установили парольные фразы в своих ключах ssh, только ключи с парольными фразами будут распространяться на другие серверы. Peter Farmer 13 лет назад 0

1 ответ на вопрос

11
Jawa

Если ключевой файл использует парольную фразу, он имеет атрибут «Proc-Type:», установленный со словом «ENCRYPTED».

Таким образом, вы можете определить, использует ли ключевой файл фразу-пароль, пропустив ее findи grepпосмотреть, есть ли в ней строка «ENCRYPTED».

# list keyfiles that USE a passphrase HOMES=/home /mnt/nfs_home find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -exec grep -q "ENCRYPTED" {} \; -print 

печатает список файлов с парольными фразами. Затем вы можете сопоставить их со списком всех ключевых файлов, чтобы выделить те, которые не используют парольную фразу. Список всех ключевых файлов можно получить, например, -execпропустив параметр, следующим образом:

# list all keyfiles HOMES=/home /mnt/nfs_home find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print 

Похожие вопросы