ssh-add -l
size eklenen tüm ssh anahtarlarını gösterir ssh-add ~/.ssh/id_yourkey
. Gpg ve gpg-agent ile benzerini nasıl yaparım, başka bir deyişle, önbelleğe alınmış anahtarların bir listesini göstermesini isterim?
ssh-add -l
size eklenen tüm ssh anahtarlarını gösterir ssh-add ~/.ssh/id_yourkey
. Gpg ve gpg-agent ile benzerini nasıl yaparım, başka bir deyişle, önbelleğe alınmış anahtarların bir listesini göstermesini isterim?
Yanıtlar:
Bunu en azından henüz veya en azından genel durumda yapamayabilirsiniz. Ancak öğrendiklerimi paylaşacağım ve bu cevabın zaman içinde güncellenmesini dört gözle bekleyeceğim.
Her şeyden önce, ssh-agent
aslında özel anahtarları önbelleğe alan özelliklerin aksine, gpg-agent
tuşları veya parolaları önbelleğe alabilir. Önbelleğe alınacak her istemciye bağlıdır ve gpg
yalnızca gpg-agent
parolayı önbelleğe almak için kullanır .
Yardımcı programı gpg-agent
kullanarak etkileşime girebilirsiniz gpg-connect-agent
. Aşağıdaki örnekte, komutları her seferinde STDIN aracılığıyla tek tek iletiyorum.
$ 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
Bu komutu çağırıp ilettikten sonra , pinentry
sistemimde yapılandırılan komut bir parola istemek için error, prompt ve açıklama dizgilerini kullanır. Bu durumda, yapılandırılmış çıktıda döndürülen "MyPassPhrase" 'a girdim (aşağıdaki resme bakın) . Aynı GET_PASSPHRASE
şekilde gpg-agent
tekrar gönderirsem $CACHEID
, kullanmak yerine önbelleğe alınmış parolayı döndürür pinentry
.
GET_PASSPHRASE
Ayrıca --no-ask
bayan önbellekte hata döndürecek bir seçeneği de kabul eder . Burada önbellek kimliği olarak "NotCachedID" kullanıyorum ve kullanılmayacak gerekli argümanlar için kukla dizeleri gpg-agent
kullanıyorum.
$ echo "GET_PASSPHRASE --no-ask NotCachedID Err Pmt Des" | gpg-connect-agent
ERR 67108922 No data <GPG Agent>
Prensip olarak, o zaman, ajanı sırayla her önbellekte saklanan parola için sorabilir ve çıktıyı kontrol edebilir OK
ya da kontrol edebilirsiniz ERR
. Sonra soru ortaya çıkıyor, önbellek kimliğini nasıl oluşturabilirim? Yukarıdaki örnekte gördüğümüz gpg-agent
gibi, önbellek kimliği olarak kabul ettiği konuda liberaldir. Açık gpg
anahtar üzerindeki bir parmak izini hesapladığı ve önbellek kimliği olarak onaltılık kodlu bir dize temsili kullandığı ortaya çıkıyor , ancak sorun bu parmak izinin öğrenebileceğiniz parmak izi ile aynı olmamasıdırgpg --fingerprint --list-secret-keys
. Bu özet, keygrip olarak adlandırılır (çünkü ham anahtar materyali üzerinde hesaplanır çünkü sadece parmak izi ana materyal ve oluşturma zaman damgası üzerinde hesaplanır). Bu yoldan gerçekten devam etmek istiyorsanız, kontrol etmek istediğiniz tuşların her biri için doğru parmak izini nasıl oluşturacağınızı bulmak zorunda kalacaksınız (bu seçenek, yeni nesil GnuPG, 2.1 seçeneğini kullanmakla kolay olacaktır --with-keygrip
).
Uyarı:GET_PASSPHRASE
Aslında gelen çıktıda parola bulunur . --data
Seçeneği bıraksanız bile , parola altıgen kodlu bir dize olarak açıkça görünür. Ne yaptığınızı bilmiyorsanız ve uygun önlemleri almıyorsanız, bununla uğraşmak muhtemelen Çok Kötü Bir Fikir'dir (tm).
gpg-agent
, değil mi?
gpg-agent
Kullanmak için pinentry
programın ne tür bir tadı isterse onu çağırır . Örneğin bakınız kullanım konsol modu pinentry için GPG nasıl zorlanır ... .
gpg-2.1.11
Ubuntu 14.04'teki derlenmiş kaynaktan kullanarak gpg-agent
önbellek kimliğinin ne olduğunu çözemiyorum: Hem keygrip'leri (ana anahtar ve alt anahtar) hem de anahtar parmak izini gösterildiği gibi denedim gpg --fingerprint --with-keygrip <user>
. Hiçbiri işe yaramaz ve gpg-connect-agent
daima rapor verir ERR 67108922 No data <GPG Agent>
. Ajanın, GPG_TTY= gpg --decrypt <file>
çeşitli önbellek kimliklerini denedikten sonra başarılı bir şekilde çalıştırarak hala parolaya sahip olduğunu kontrol ettim . (Belirsiz olması durumunda, set GPG_TTY
çözerek, şifre çözme işlemi yalnızca parola zaten önbelleğe alınmışsa başarılı olur gpg-agent
.)
(2.2.9 ile test) GnuPG'nin sonraki sürümlerinde şu anda komutunu kullanarak ajan tarafından önbelleğe keygrips listelemek de mümkündür keyinfo --list
ile gpg-connect-agent
.
$ gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 866C3DE249CF81E31A3691845DBADE2809487FF5 D - - 1 P - - -
S KEYINFO 04278155E72CAE8FF1548FE161F1B8F7673824F4 D - - - P - - -
OK
1
Yedinci sütunda keygrip önbelleğe olduğunu gösterir. Bir keygrip ve temsil ettiği anahtar arasındaki ilişki ile alınabilir gpg --list-secret-keys --with-keygrip
.
Kaynak: https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/
Önbelleği almak için --fingerprint
iki kez bahsetmeniz gerekir , örneğin:
$ 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
Bu durumda önbellek olurdu E8514C2510C602910D47A0087C8B4360E50A8F2A
.
--fingerprint
ya da ikisi --fingerprint --fingerprint
aynı çıktıyı verir. @BenCreasy'ın yazdığı gibi, yukarıdaki cevabı keygrip kullanarak çalışır.
http://lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
Önbellek, anahtarın tam parmak izidir.
gpg --fingerprint user@foo.bar