Как я могу узнать то, что кэшировал gpg-агент ключей? (как то, как ssh-добавляют, что-l показывает кэширование ssh ключей),

Добавьте "tmux" к своему .zshrc файлу, который выполняется каждый раз, когда Вы запускаете zsh. Быстрый путь:

echo tmux >> ~/.zshrc
40
12.06.2013, 03:48
6 ответов

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

В первую очередь, в отличие от этого, ssh-agent возможность, который на самом деле закрытые ключи кэшей, gpg-agent может кэшировать или ключи или пароли. Это до каждого клиента, чтобы кэшироваться, и gpg просто использование gpg-agent кэшировать пароль.

Можно взаимодействовать с gpg-agent использование gpg-connect-agent утилита. В примере, который следует, я передаю команды по одному через STDIN.

$ CACHEID="ThisIsTheTrickyPart"
$ ERRSTR="Error+string+goes+here"
$ PMTSTR="Prompt"
$ DESSTR="Description+string+goes+here"
$ echo "GET_PASSPHRASE --data $CACHEID $ERRSTR $PMTSTR $DESSTR" | gpg-connect-agent
D MyPassPhrase
OK

После вызова gpg-connect-agent и передача в этой команде, pinentry команда, настроенная в моей системе, использует ошибку, подсказку и строки описания для запроса пароль. В этом случае я ввел "MyPassPhrase", который является тем, что возвращается в структурированном выводе (см. изображение ниже). Если я отправляю GET_PASSPHRASE кому: gpg-agent снова с тем же $CACHEID, это возвращает кэшируемый пароль вместо использования pinentry.

                                 ss of dialog box

GET_PASSPHRASE также принимает a --no-ask опция, которая возвратит ошибку на неудачном обращении в кэш. Здесь я использую "NotCachedID" в качестве идентификатора кэша и использую фиктивные строки для обязательных аргументов это gpg-agent не будет использовать.

$ echo "GET_PASSPHRASE --no-ask NotCachedID Err Pmt Des" | gpg-connect-agent
ERR 67108922 No data <GPG Agent>

В принципе, затем, Вы могли попросить у агента каждого возможно кэшируемого пароля в свою очередь и проверить на OK или ERR в выводе. Вопрос затем становится, как я генерирую идентификатор кэша? Поскольку мы видим в примере выше, gpg-agent либерально в том, что это принимает как идентификатор кэша. Это оказывается этим gpg вычисляет цифровой отпечаток на открытом ключе и использует кодированное шестнадцатеричными числами строковое представление в качестве идентификатора кэша, но проблема состоит в том, что этот цифровой отпечаток не является тем же как цифровым отпечатком, через который можно учиться gpg --fingerprint --list-secret-keys. Этот обзор называют keygrip (потому что он вычисляется по необработанному ключевому материалу только, тогда как цифровой отпечаток является calculcated по ключевому материалу и метке времени создания). Если Вы действительно хотите продолжить вниз этот путь, необходимо будет узнать, как генерировать корректный цифровой отпечаток для каждого из ключей, которые Вы хотите проверить (это будет легким использованием следующего поколения GnuPG, 2.1, с опцией --with-keygrip).

Предупреждение: вывод от GET_PASSPHRASE на самом деле содержит пароль в ясном. Даже если Вы кончаете --data опция, пароль явно видим как кодированная шестнадцатеричными числами строка. Это - вероятно, Очень Плохая Идея (TM) для слоняний без дела с этим, если Вы не знаете то, что Вы делаете и принимаете соответствующие меры предосторожности.

33
27.01.2020, 19:35
  • 1
    Потрясающий ответ! Я искал дни и не мог найти много на этом. Способ соединить все это и объяснить это в четких и кратких терминах! спасибо –  slm♦ 16.06.2013, 16:07
  • 2
    Снимок экрана не является pinentry, но некоторым прерыванием программы GNOME gpg-agent, это? –  Hauke Laging 07.02.2014, 00:17
  • 3
    gpg-agent вызывает любую разновидность pinentry программа это настроено для использования. Посмотрите, например, Как вынудить GPG использовать консольный режим pinentry.... –  neirbowj 08.02.2014, 20:18
  • 4
    Используя gpg-2.1.11 скомпилированный из источника на Ubuntu 14.04, я не могу выяснить что gpg-agent идентификатор кэша: Я попробовал и keygrips (основной ключ и подраздел) и ключевой цифровой отпечаток, как показано gpg --fingerprint --with-keygrip <user>. Ни один из них работы, и gpg-connect-agent всегда отчеты ERR 67108922 No data <GPG Agent>. Я проверил агент дважды, все еще имеет пароль путем успешного выполнения GPG_TTY= gpg --decrypt <file> после испытания различных идентификаторов кэша. (В случае, если это неясно путем сбрасывания GPG_TTY, дешифрование успешно выполняется, только если пароль уже кэшируется gpg-agent.) –  Matei David 04.05.2016, 19:22
  • 5
    2.0.14 мог прослушиваться? Используя технику выше, gpg-агент действительно имеет желаемый пароль для указанного ключа (определенным keygrip), но когда я пытаюсь подписать с этим keygrip, мне, тем не менее, предлагают пароль. Почему? –  Otheus 19.09.2016, 19:53

Попробуйте следующее:

$ spam="foo bar"
$ touch "$spam"
$ ls -l
-rw-rw-r-- 1 user user   0 Mar 29 05:14 foo bar
-121--251601-

Попробуйте:

IFS=$(echo -en "\n\b")
touch "$yourfile"
-121-251599-

http://lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html

cacheid является полным отпечатком ключа.

gpg --fingerprint user@foo.bar
2
27.01.2020, 19:35

Чтобы получить cacheid, вам нужно дважды упомянуть - fingerprint , например:

$ gpg --fingerprint --fingerprint ftpadmin@kernel.org
pub   1024D/517D0F0E 2000-10-10
      Key fingerprint = C75D C40A 11D7 AF88 9981  ED5B C86B A06A 517D 0F0E
uid                  Linux Kernel Archives Verification Key <ftpadmin@kernel.org>
sub   4096g/E50A8F2A 2000-10-10
      Key fingerprint = E851 4C25 10C6 0291 0D47  A008 7C8B 4360 E50A 8F2A

cacheid в этом случае будет E8514C2510C602910D47A0087C8B4360E50A8F2A .

3
27.01.2020, 19:35

На более поздних версиях gnupg (проверено на 2.1.18) используйте:

gpg --fingerprint --with-keygrip

для получения keygrip, затем

echo "KEYINFO --no-ask Err Pmt Des" | gpg-connect-agent

чтобы увидеть, кэширован он или нет.

8
27.01.2020, 19:35

В более поздних версиях GnuPG (, протестированных с 2.2.9 ), также можно вывести список клавиатур, которые в настоящее время кэшируются агентом, с помощью команды keyinfo --listс gpg-connect-agent.

$ gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 866C3DE249CF81E31A3691845DBADE2809487FF5 D - - 1 P - - -
S KEYINFO 04278155E72CAE8FF1548FE161F1B8F7673824F4 D - - - P - - -
OK

1в седьмом столбце указывает на то, что клавиша кэшируется. Связь между клавиатурой и клавишей, которую она представляет, может быть получена с помощью gpg --list-secret-keys --with-keygrip.

Источник:https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/

18
27.01.2020, 19:35

В окнах (с помощью gpg4win )вы можете перечислить ключи с помощью:

gpg-connect-agent "KEYINFO --ssh-list --ssh-fpr" /bye

Если вам нужны отпечатки пальцев SHA1, используйте:

gpg-connect-agent "KEYINFO --ssh-list --ssh-fpr=sha1" /bye

Я не знаю, как перечислить комментарии ключей, но их можно увидеть в сохраненных ключах в%APPDATA%\gnupg\private-keys-v1.d\

3
27.01.2020, 19:35

Теги

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