Как перечислить ключи, добавленные в ssh-agent с помощью ssh-add?

Вопрос или проблема

Как и где я могу проверить, какие ключи были добавлены с помощью ssh-add в мой ssh-agent?

Используйте ssh-add -l, чтобы вывести их список по отпечаткам.

$ ssh-add -l
2048 72:...:eb /home/gert/.ssh/mykey (RSA)

Или ssh-add -L, чтобы получить полный ключ в формате OpenSSH.

$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]B63SQ== /home/gert/.ssh/id_rsa

Последний формат такой же, как если бы вы добавляли их в файл ~/.ssh/authorized_keys.

Удивительно, но в версии ssh-add для MacOS в какой-то момент перестали отображаться имена файлов, как это было в Linux. Я написал скрипт, который делает то же самое для отпечатков, имеющих соответствующий файл в ~/.ssh/.

Я назвал функцию ssh-add_wf, wf = с файлом. Подробности функции ниже:

$ type ssh-add_wf
ssh-add_wf is a function
ssh-add_wf ()
{
    while read -r line; do
        for file in ~/.ssh/*.pub;
        do
            printf "%s %s\n" "$(ssh-keygen -lf "$file" | awk '{$1=""}1')" "$file";
        done | column -t | grep --color=auto "$line" || echo "$line";
    done < <(ssh-add -l | awk '{print $2}')
}

Пример

$  ssh-add_wf
 SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:qInIrnKcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:tX+AAJA0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 SHA256:EyNkhTLQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:KKKVwtvFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 SHA256:tr0hZP52XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

В приведенном выше примере любые ключи в выводе ssh-add, которые соответствуют файлу в каталоге ~/.ssh/, будут включать имя файла в выводе в четвертой колонке. Любые ключи, которые не имеют соответствующих файлов, будут иметь эту колонку пустой. В этом выводе у нас есть 3 ключа, которые имеют соответствующие файлы.

Механика функции

Скрипт использует 2 цикла. Внешний цикл — это while, который берет вывод ssh-add. Этот вывод содержит все отпечатки ключей SSH, загруженных в ssh-agent.

Внутренний цикл — это for, который проходит по содержимому всех файлов, соответствующих шаблону ~/.ssh/*.pub. Для каждого файла мы получаем информацию с помощью ssh-keygen -lf <file>, а затем удаляем первый столбец этого вывода:

…до…

4096 SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [email protected]

…после…

SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [email protected]

Эта строка затем выводится вместе с именем файла:

printf “%s %s\n” “$(ssh-keygen -lf “$file” | awk ‘{$1=””}1’)” “$file”

В конце выполнения этого цикла используется следующее:

| column -t | grep “$line” || echo “$line”

Это форматирует вывод так, чтобы он был столбчатым (column -t).

На этом этапе мы проверяем этот вывод на наличие отпечатка из ssh-add с помощью grep "$line". Если совпадение найдено, мы выводим наш printf; в противном случае возвращаемся к просто выводу оригинального отпечатка из ssh-add, $line.

Ссылки

Ответ или решение

Для того чтобы выяснить, какие ключи были добавлены в ssh-agent с помощью команды ssh-add, имеется несколько способов и подходов. Понимание этих методов важно для управления безопасностью и удобством использования SSH-ключей, особенно в условиях, когда общее количество ключей велико и необходимо поддерживать их актуальность.

Теория

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

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

Примеры

  1. Получение списка ключей по отпечаткам:

    Выполнение команды ssh-add -l выводит список ключей, добавленных в ssh-agent, преобразованный в отображение отпечатков.

    $ ssh-add -l
    2048 72:...:eb /home/gert/.ssh/mykey (RSA)

    В данном случае вы видите отпечаток ключа и путь к его файлу.

  2. Получение полных публичных ключей:

    Для получения полного представления о ключах в OpenSSH-формате используется команда ssh-add -L.

    $ ssh-add -L
    ssh-rsa AAAAB3...B63SQ== /home/gert/.ssh/id_rsa

    Этот формат представления ключей идентичен тому, который используется в файле ~/.ssh/authorized_keys.

Применение

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

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

Реализация функции ssh-add_wf

Данный скрипт обеспечивает отображение путей к файлам, сопоставленным с отпечатками ключей:

ssh-add_wf ()
{
    while read -r line; do
        for file in ~/.ssh/*.pub;
        do
            printf "%s %s\n" "$(ssh-keygen -lf "$file" | awk '{$1=""}1')" "$file";
        done | column -t | grep --color=auto "$line" || echo "$line";
    done < <(ssh-add -l | awk '{print $2}')
}

Механика работы:

  • Внешний цикл while читает отпечатки из результата команды ssh-add -l.

  • Внутренний цикл for просматривает все .pub файлы в директории ~/.ssh/, извлекая их отпечатки с помощью ssh-keygen -lf <file> и далее удаляет ненужный первый столбец.

  • Функция printf в сочетании с grep проверяет, есть ли совпадение в отпечатках ключей; если да, выводит путь к файлу, иначе просто возвращает исходный отпечаток.

Эта функция полезнa, если необходимо идентифицировать конкретные SSH-ключи, используемые в ssh-agent, и сопоставить их с файлами на диске. Такое сопоставление может существенно упростить управление ключами, например, при их ротации или удалении.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...