gpg verileri ölümcül olarak imzalayamadı: taahhüt nesnesi yazılamadı [Git 2.10.0]


319

Git 2.10 sürüm notundaki güzel özellikler hakkında birkaç makale izledim . Git'i 2.10.0'a yükselten ve genel olarak aşağıdaki gibi sonuçlanan değişiklikler yapmak -.gitconfig

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = abc.def@gmail.com
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

Ama şimdi taahhütlerimi kullanarak imzalamaya çalışıyorum

git commit -a -S -m "message"

Aşağıdaki hatayı görüyorum -

İçin gizli anahtarın kilidini açmak için bir parolaya ihtiyacınız var

kullanıcı: "XYZ (Dijital Olarak İmzalı)"

2048 bit RSA anahtarı, Kimlik AAAAAAAA, oluşturuldu 2016-07-01

hata: gpg verileri imzalayamadı ölümcül: tamamlama nesnesi yazılamadı

Not - Yine de şunu kullanarak değişiklik yapabilirim:git commit -a -m "message"

Aynı şeyin üstesinden gelmenin bir yolu var mı? Veya gpggit yükseltme ile birlikte almak için yapılandırmalarda gerekli herhangi bir değişiklik ?


Güncelleme 1

Ayrıca, daha fazla kullanışlılık arayışında, Git'te GPG anahtarı ile "otomatik atama" yapmanın bir yolu var mı? . Anahtarı zaten kullanarak yapılandırdım

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

ve açıkçası aynı hatayı yine de alıyorum.


3
Benzer bir sorunla karşılaşıyorum. Git 2.8'i (git-scm) Windows'ta kaldırdım. Ve yüklü 2.10. Şimdi gpg failed to sign the dataher kullandığımda alıyorum -S. 2.8'de sorunsuz bir taahhütte bulunabilirim. Ne olduğunu bilmiyorum.
Aydınlatıcı

5
Ekleme user.signingkeysorunumu garip bir şekilde düzeltti.
Xavier Ho

1
@nullpointer Yanıtımı oradan sildim, çünkü derin bir bakıştan sonra bunun bir kopya olduğunu fark ettim!
Shayan Amani

1
İronik bir şekilde, işleri yeniden kurmak için makinemi değiştirdim ve kendi sorumu aradım ve önerilen çözümlerden hiçbiri sadece başlamak için yeterince temiz görünmüyor.
Naman

1
Benim için düzeltme: git config user.namewas! = PGP anahtarı oluştururken kullanılan ad
stacksonstacks

Yanıtlar:


464

OSX ile bu sorunla karşılaştım.

Orijinal cevap:

Bu konumun değiştirildi gpg güncelleme (demlemek) gibi görünüyor gpgiçin gpg1binaryde değiştirebilir, nerede gpg yukarı git görünüyor:

git config --global gpg.program gpg1

Eğer gpg1 yoksa: brew install gpg1.

Güncel cevap:

Görünüşe göre gpg1 kullanımdan kaldırılıyor / "yavaşça kullanım dışı bırakılıyor " , bu yüzden muhtemelen gpg2'ye güncellemelisiniz, maalesef bu biraz daha fazla adım / biraz zaman içeriyor:

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

İlk bölüm gpg2'yi yükler ve ikincisi kullanmak için gerekli bir hack'tir . Sorun giderme için bu cevaba bakın (linux demlenmemiş olsa da), iyi bir test önerir:

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

Bu test başarılı olursa (hiçbir hata / çıktı PGP imzası içermez), en son gpg sürümüne başarıyla güncellediniz.

Artık git imzasını tekrar kullanabilmelisiniz!
Sahip olmanız gerekeceğini belirtmek gerekir:

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

Not: İmzalı bir taahhüt çalıştırdıktan sonra, aşağıdakilerle imzalandığını doğrulayabilirsiniz:

git log --show-signature -1

son taahhüt için gpg bilgilerini içerir.


7
Gpg.program öğesini / usr / local / bin / gpg ("1" yok) olarak ayarlamak benim için düzeltti.
Iskar

5
Bir güncelleme görünüyor gnupg2ile brewsembolik bağı ile haberci böylece gpgkullanıyorum düzeltme bağlantıları vardı çıkarıldı brew link --overwrite gnupg2.
Brice

8
hm ... çalışmıyor. hala xcode oturum açma ile hata veriyor.
Albert T. Wong

1
@DrBeco orijinal konum / davranış değil mi? Hala osx aynı sorunu var (Ben demlemek oldukça yakın zamanda güncelledim düşünüyorum), gpg1hala ihraç yürütülebilir.
Andy Hayden

29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentrysonunda benim için düzeltti
Dan Bechard

317

Gnupg2 ve gpg-agent 2.x kullanılıyorsa, ortam değişkenini ayarladığınızdan emin olun GPG_TTY.

export GPG_TTY=$(tty)

Sık karşılaşılan sorunlar hakkında GPG'nin belgelerine bakın .


17
Balık kullanıyorsanız set -x GPG_TTY (tty)profilinizi giyin .
fasfsfgs

@StuartCardall chown komutunun anlamı nedir? Genellikle, bir sistem işlemi tarafından, oturum açtığınızda veya sözde tty oluşturduğunuzda size atanmış olacaktır. Başka birine aitse ve siz kök değilseniz, başarısız olur. Grup başka bir şeyse, muhtemelen önemli değil ve kullanıcılar genellikle grup tty'de olmayacak.
poolie

@poolie - bu eğer önemli suüzere rootbir uzak sunucuda
Stuart Cardall

6
Değişkeni ekledim ~/.zshrcve terminale doğru bağlandığı için tekrar taahhütte bulunabiliyorum. Yardımların için teşekkür ederim!
Alex Gurrola

Bu ayrıca GitHub talimatlarında da bulunmaktadır: help.github.com/articles/telling-git-about-your-gpg-key
bonh

198

Her şey başarısız olursa GIT_TRACE=1git'in gerçekte ne yaptığını görmek için kullanın :

$ GIT_TRACE=1 git commit -m "Add page that always requires a logged-in user"
20:52:58.902766 git.c:328               trace: built-in: git 'commit' '-vvv' '-m' 'Add page that always requires a logged-in user'
20:52:58.918467 run-command.c:626       trace: run_command: 'gpg' '--status-fd=2' '-bsau' '23810377252EF4C2'
error: gpg failed to sign the data
fatal: failed to write commit object

Şimdi başarısız komutunu manuel olarak çalıştırın:

$ gpg -bsau 23810377252EF4C2
gpg: skipped "23810377252EF4C2": Unusable secret key
gpg: signing failed: Unusable secret key

Anlaşıldı, anahtarımın süresi doldu, gitsuçlamak değildi.


34
Hata ayıklama için güzel bir ipucu. +1
VonC

4
Bu aslında kendi sorunumu çözmeme yardımcı oldu ve bu durum mesajıyla ilgili her türlü sorunun çözümü. +1
xHocquet

Hata ayıklama yürüyüş için teşekkürler. Anahtarımın süresi de doldu.
Sgnl

2
Teşekkürler! Bu beni sorunuma götürdü. Garip benim yerel .git/configbir vardı namebenim imza e-posta eşleşmedi bir projede belirtilmiş. Bunu reddetmek için yeterliydi.
18'de

1
Makinemde gpg -bsau <key>yürütmek hiçbir şey yapmaz. Bunun yürütülmesi çok uzun sürüyor mu? Yoksa bu, anahtarın kullanılmasının iyi olduğu anlamına mı geliyor? @VonC öngörüleri var mı?
Naman

82

Ben ettik YAPILAN bu aracılığıyla kısa ve kolay tarifi:

MacOS'ta otomatik imzalama (Global olarak ve farklı IDE'lerle):

GET signingkeyiçinde bu şekilde .

brew install gnupg gnupg2 pinentry-mac
git config --global user.signingkey <YOUR_SIGNING_KEY>
git config --global commit.gpgsign true
git config --global gpg.program gpg

Aşağıdakileri gpg.confdosyaya koyun (dosyayı nano ~/.gnupg/gpg.confkomutla düzenle ):

no-tty

Aşağıdakileri gpg-agent.confdosyaya koyun (dosyayı nano ~/.gnupg/gpg-agent.confkomutla düzenle ):

pinentry-program /usr/local/bin/pinentry-mac

Güncelleme :

Yorumlara göre killall gpg-agent, yapılandırma dosyasını düzenledikten sonra komutu yürütmeniz gerekebilir gpg.conf. Kendini açıklayan komutun dediği gibi, bu komut GPG (Gnu Privacy Guard) aracısını sonlandıracaktır.


2
Bu komutların ne yaptığını da açıklayabilir misiniz? Anlamaya yardımcı olacaktır.
Droid

7
Ayrıca killall gpg-agentyapılandırma dosyalarını ayarladıktan sonra çalıştırmak zorunda kaldı , o zaman çalıştı!
Pascal Ludwig

Arkadaki insanlara güvenebileceğimizi nereden biliyoruz pinentry-mac? Yapamayız demiyorum, ama GPGTools org çok küçük bir ekip tarafından yedekleniyor ve repo sadece gnupg.org'unbrew install gnupg çalışmalarından yararlanan 5 katılımcıya sahip .
sunknudsen

Durumda bu benim Sorunum geçersiz yerel vardı, başkalarına yardım user.signingkey(hem yerel olun (yerel yapılandırma bakmak düşünmüyordu çünkü) benim SourceTree yapılandırmasında haber vermedi, hangi seti, ne de genel ayarlar git config --local --get user.signingkey) ve global ( git config --global --get user.signingkey) aynı veya daha iyiyse, geçersizse yerel olanın git config --local --unset user.signingkey
ayarını kaldırın

OSX'te (10.13.06), şu hatayı verir, bash: pinentry-program: komut bulunamadı
cgl

59

gpg-agentEski verilerle sıkışmış olabilecek öldürme sürecine yardımcı olabilir. Böylece yeni gpg-agentbaşlayan şifre isteyecektir.


2
Bu benim için yaptı.
danyim

12
Başlamak gpg-agent --daemoniçin kullanın
FooBar

1
Ben de gpg-ajan yeniden başlatmak zorunda
GnrlBzik

8
killall gpg-agent
MacOS'taki

1
Ubuntugpgconf --kill gpg-agent
Adam

38

İmzalı taahhütlü kurulumu kurmak için aşağıdaki URL'yi izleyin https://help.github.com/en/articles/telling-git-about-your-signing-key

hala gpg alma işlemi önemli verileri imzalayamadıysa: taahhüt nesnesi yazılamadı

bu git ile ilgili bir sorun değil, bu GPG ile aşağıdaki adımları izleyin

1.gpg --version

  1. echo "test" | gpg --clearsign

gösteriyorsa:

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
  1. sonra kullan export GPG_TTY=$(tty)

4. daha echo "test" | gpg --clearsign sonra hangi PGP imzasının alındığını tekrar deneyin .

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

6.apply git commit -S -m "commitMsz"


1
bu benim için bir çözümdü! Çok teşekkürler!
upInCloud

Sorunun bu olup olmadığını nasıl anlayacağınızı mükemmel bir şekilde gözden geçirin.
Philippe Signoret

Bunu benim için yaptı. Çok teşekkürler!
Allan Guwatudde

export GPG_TTY=$(tty)hile oldu. Bu benim eklendi .zshrcdosyanın
Shane Stillwell

22

MacOS makinelerinde bu sorunla karşılaşan herkes için şunu deneyin:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (gerekirse)
  4. gpg --full-generate-key Bir algoritma kullanarak bir anahtar oluşturun.
  5. Aşağıdaki anahtarları uygulayarak oluşturulan anahtarı alın: gpg --list-keys
  6. Anahtarı buraya ayarlayın git config --global user.signingkey <Key from your list>
  7. git config --global gpg.program /usr/local/bin/gpg
  8. git config --global commit.gpgsign true
  9. Anahtarınızı GitHub'a aktarmak istiyorsanız: gpg --armor --export <key> ve bu anahtarı GPG anahtarlarında GitHub'a ekleyin: https://github.com/settings/keys (START ve END satırı dahil)

Sorun hala devam ediyorsa:

test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile

echo 'export GPG_TTY=$(tty)' >> ~/.profile

Sorun hala devam ediyorsa:

Https://gpgtools.org adresini yükleyin ve kullandığınız anahtarı tuşuna basarak imzalayın menü çubuğundan İmzala'ya : Anahtar -> İmzala

Sorun hala devam ediyorsa:

Global: Git .gitconfigbenim durumumda olan hangi dosyanın: /Users/gent/.gitconfig Ve değiştirmek .gitconfig dosyasını (emin Email olun ve Adı Anahtarını oluştururken Oluşturduğunuz bu numarayı aynıdır) :

[user]
	email = gent@youremail.com
	name = Gent
	signingkey = <YOURKEY>
[gpg]
	program = /usr/local/bin/gpg
[commit]
	gpsign = true
	gpgsign = true
[filter "lfs"]
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
[credential]
	helper = osxkeychain


2
.Gitconfig dosyasına 'gpsign = true' eklemek benim için düzeltildi
Pierre

18

Buradaki iki sentim:

Gpg-agent'a bir anahtar oluşturup eklediğinizde, adlı bir şeyi tanımlarsınız passphrase. Artık bir passphrasenoktada süresi doluyor ve gpganahtarınızın kilidini açmak için tekrar girmeniz gerekiyor, böylece tekrar imzalamaya başlayabilirsiniz.

Birlikte arabirimler bu başka bir program kullandığınızda gpg, gpg'istemi s size gelmez parolanızı girmek için değil (temelde görünür gpg-agentmuhtemelen size giriş iletişim gösteremez daemonized zaman stdin).

Çözümlerden biri gpg --sign a_file.txt, anahtarınızı oluştururken girdiğiniz parolayı girmektir ve sonra her şey iyi olmalıdır (gpg-agent olmalıdır otomatik olarak imzalanmalıdır)

Bunu her zaman yapmak zorunda kalmamak için parolanız için daha uzun zaman aşımlarının nasıl ayarlanacağına ilişkin bu yanıta bakın .

Veya parolayı tümüyle ssh-keygen -p

Düzenleme: man gpg-agentYukarıdakilerin otomatik olarak gerçekleşmesi ve satırların eklenmesiyle ilgili bazı şeyleri okumak için

GPG_TTY=$(tty)
export GPG_TTY

Eğer bash kullanıyorsanız .bashrc'de (bu doğru cevap ama düşünce trenimi de yukarıda tutuyorum)


Teşekkürler @ george-daramouskas, bu benim sorunumdu.
Nic Barker

10

Ekim 2016 Güncellemesi: Sayı 871'de "İmzalama Git 2.9.3'te çalışmayı durdurdu"

Windows 2.10.1 için Git iki gün önce yayınlandı (4 Ekim 2016), taahhütlerin ve etiketin Etkileşimli GPG imzalamasını düzeltti.

git'teki son gpg işareti değişikliği (Linux'ta sorun oluşturmaz), Windows'ta MSYS2-git olmayanların MSYS2-gpg ile etkileşime girme biçiminde bir sorun ortaya çıkarır.


Orijinal cevap:

" 7.4 Git Tools - İşinizi İmzalama " yazısını okuduğunuzda , " user.signingkey" yapılandırmanızı ayarladığınızı varsayıyorum .

Gpg etrafındaki son büyük yeniden düzenleme (Git 2.10'dan önce) 2f47eae2a işlemindeydi , burada hata mesajı taşındıgpg-interface.c

Bu dosyadaki bir günlük, af2b21e işlemindeki son değişikliği gösterir (Git 2.10)

gpg2 zaten varsayılan olarak uzun formatı kullanıyor, ancak çoğu dağıtım hala uyumluluk nedeniyle eski 1.x sürümü "gpg" gibi görünüyor. Ve gpg'nin eski sürümleri sadece 32 bit kısa kimliği gösterir, ki bu oldukça güvensizdir.

Bu aslında doğrulamanın kendisi için önemli değildir : doğrulama başarılı olursa , pgp imzası iyidir.
Ancak henüz anahtarınız yoksa ve getirmek istiyorsanız veya doğrulama için hangi anahtarın kullanıldığını tam olarak kontrol etmek ve kontrol etmek istiyorsanız, anahtarı daha kesin bir şekilde belirtmeliyiz.

Bu nedenle user.signingkey, hata mesajında ​​herhangi bir etkisinin olup olmadığını görmek için yapılandırmanızı ve kullandığınız gpg sürümünü (gpg1 veya gpg2) kontrol edin.

Ayrıca hata mesajı koşulunu değiştiren taahhüt 0581b54 de vardır gpg failed to sign the data( tamamlamayı 0d2b664'e ek olarak ):

Şu anda hiç stderr'den okuma yapmıyoruz. Bu da bize orada (ve bu durumda gpg hazırlar böylece Ancak, biz, bir gelecek yama içinde isteyeceksiniz yapar gerçi yine tüm girdi okumadan önce yazma, bir anahtar uid bir boru tampon doldurmak olasılığı yoktur).

Tamamlama 4322353 , gpg'nin artık geçici bir dosya kullandığını gösterir, bu nedenle doğru sorunlar olabilir.

Bizim için zor durumları ele alan ve eksik temizleme çağrısını ekleyen bir tempfile nesnesi kullanmaya geçelim.


user.signingkeyYapılandırma ayarım var . Ayrıca kullanarak gpg (GnuPG) 2.0.3.
Naman

@nullpointer Cevabımı düzenledim. Sorunun devam edip etmediğini Windows 2.10.1 için Gti ile kontrol edebilir misiniz?
VonC

geç güncelleme için üzgünüm, Windows değil MacOSX üzerinde çalışmak bu yüzden bunu doğrulayamadı.
Naman

10

Git iz benim durumum için çok açıklayıcıydı ...

   GIT_TRACE=1 git commit -m "a commit message"
   13:45:39.940081 git.c:344               trace: built-in: git commit -m 'a commit message'
   13:45:39.977999 run-command.c:640       trace: run_command: gpg --status-fd=2 -bsau 'full name <your-email@domain.com>'
   error: gpg failed to sign the data
   fatal: failed to write commit object

Ben gitkontrol edildi biçimi başına bir ilk anahtar oluşturmak gerekiyordu . -bsauGünlüklere yukarıda iletilen değeri olduğu gibi kopyalamak ve aşağıda kullanmak en iyisidir .

Böylece olur,

   gpg --quick-generate-key "full name <your-email@domain.com>"

Sonra işe yaradı.

Umarım yardımcı olur.


Bu benim için çalıştı ve git tracegerçekten yardımcı oldu.
philip oghenerobo balogun

1
dostum ... Cevabınıza ulaşana kadar bunu çözmek için kaç saat harcadığımı hayal edemezsiniz ... bu anahtarın isimlendirilmesiydi .. teşekkür ederim! teşekkür ederim! teşekkür ederim!
giomanda

8

Cygwin kullanarak yakın zamanda geçtim gpg2. Daha sonra git ile imzaladıktan sonra aynı sorunu yaşadımgit config gpg.program gpg2 .

echo "test" | gpg2 --clearsignGpg2'nin çalışıp çalışmadığını görmeye çalışın . Bunu ayarlamak için en kolay çözümü buldum git config gpg.program gpg, çünkü bu işe yarıyor. Ancak bu şekilde daha iyi bir hata alırsınız - örneğin pinentry'yi yüklemeniz gerekir.


Aslında, bazı Linux dağıtımlarında aynı sorunla karşılaşabilirsiniz. Git her zaman gpg2 değil, gpg kullanır. Ayrıca bakınız: stackoverflow.com/questions/34766123/…
kilim

Bu benim için gpg: signing failed: Inappropriate ioctl for deviceçözülebilecek hatayı ortaya çıkardı export GPG_TTY=$(tty). Kaynak: github.com/keybase/keybase-issues/issues/2798
swiknaba

8

OS X'te, gnupg2demlemek yoluyla kullanarak sadece gpg ajanını öldürmek zorunda kaldım , bazen olur:

pkill -9 gpg-agent

Ve envgerekirse değişkeni ayarlayın :

export GPG_TTY=$(tty)

Ayrıca bkz. Genel GPG sorunları ve bu yanıtı da burada bulabilirsiniz.


2
Bu benim için de işe yaradı. Yeni bir takma ad oluşturdum alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.
oalders

1
Bu iyi çalışıyor, teşekkürler. Daha sonra env değişkenini ayarlamanız bile gerekmedi.
Nick Rameau

8

Benzer cevaplar gördüm, ama benim için işe yarayan şey gibi değil. Linux'ta öldürmek ve yeniden başlatmak zorunda kaldım gpg-agent:

$ pkill gpg-agent
$ gpg-agent --daemon
$ git commit ...

Bu benim için hile yaptı. Görünüşe göre user.signingkeydiğer bazı yorumların söylediklerinden özel anahtarınıza da ayarlamış olmanız gerekir.

$ git config --global user.signingkey [your_key_hash]


6

Ubuntu 18.04'te bu hatayı aldım ve anahtarımın süresinin dolduğu ortaya çıktı .

Bunu görmek için bunu çalıştırdım ve anahtarlarımın süresinin dolduğunu doğruladı:

gpg --list-keys

Bunu düzeltmek için koştum (önceki komutta görüntülenen kimliği kullanarak):

gpg --edit-key <ID>

Oradan, ben sona ermesinden genişletilmiş key 0ve key 1aşağıdaki bu talimatlara yazarak aşağı haşlanmış key 0sonra expireve istemleri aşağıdaki. Sonra için tekrarlayın key 1.

Daha sonra, bunu test etmek için koştum:

echo test | gpg --clearsign

Düzeltmeden önce hatayla başarısız oldu:

gpg: varsayılan gizli anahtar yok: Gizli anahtar yok
gpg: [stdin]: clear-sign başarısız: Gizli anahtar yok

Ancak düzeltmeden sonra aynı komut başarıyla mesajı imzaladı, böylece bir şeylerin tekrar çalıştığını biliyordum!


Bunun onaylanması, Mac OSX Catalina için CentOS7'ye geçerli bir anahtar alınırken bir sorunu çözdü. Diğer şeylerin yanı sıra neden bir şifre sormaya devam ettiğini anlamaya çalışırken iki saatten fazla bu canavarla savaştı. Garip bir şekilde, zaten asla sona ermeyecek şekilde ayarlanmıştı ve ben hala hiç sona ermeyecek şekilde ayarladım.
Cody B

5

Ben de aynı problemle karşılaştım. Ben sorunu ile değil yattığını bildirmek için mutluyum git 2.10.0fakat gnupg 1.4.21.

Geçici olarak gnupg'u 1.4.20'ye düşürmek sorunu düzeltti.

Homebrew kullanıyorsanız ve paketlerinizi benim yaptığım gibi yükselttiyseniz, muhtemelen brew switch gnupg 1.4.20geri dönmek için koşabilirsiniz .


3

E-postanızın doğru ayarlandığından emin olun.

git config --global user.email "user@example.com"

1
Bu benim için işe yarayan tek çözüm, github
Naz

1
Benim durumumda, belirli bir repoda şirket e-postası kullanıyordum, bunun için PGP anahtarı oluşturmadım.
rubick

3

GPG anahtarınızın kullanıcı kimliğine atanan e-posta git'te kullandığınız e-postadan farklıysa, anahtarınıza başka bir kullanıcı kimliği eklemeniz VEYA e-postayla tam olarak eşleşen bir anahtar kullanmanız gerekir.

Şunları kullanarak başka bir UID ekleyebilirsiniz:

$ gpg --edit-key

Daha fazla bilgi için /superuser/293184/one-gnupg-pgp-key-pair-two-emails


1
Bu benim içindi. Tanrım, "veri imzalanamadı" ifadesinden daha bilgilendirici bir hata mesajı yok.
Alec

3

Ben gpg çalışırsa test etmeye çalıştıktan sonra bu var çünkü yanlışlıkla bir şekilde gpg güncellenmiş olması gerekir:

gpg: WARNING: server 'gpg-agent' is older than us (2.1.21 < 2.2.10)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.

Koşmak gpgconf --kill allbenim için düzeltti.

Umarım bu birine yardımcı olur.


2

Tüm bağımlılıklarının en son kaynakları (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, vb.)

libreadlineGnuPG problemleri olduğu ortaya çıktı :

$ gpg --version
gpg: symbol lookup error: /usr/local/lib/libreadline.so.7: undefined symbol: UP

Ve elbette, Git'ten yararlı bilgiler almaya çalışmak -vvvbaşarısız oldu, bu yüzden başarısızlık bir gizemdi.

ReadLine nedeniyle PGP hatasını çözmek için Paket yöneticisi - gpg hatası güncellenemiyor veya kullanılamıyor bölümündeki talimatları izleyin :

Terminalde:

ls /usr/local/lib

orada bir sürü readline libs vardı (libreadline.so.BLAH-BLAH) bu yüzden:

su
mkdir temp
mv /usr/local/lib/libreadline* temp
ldconfig

2

Yukarıdaki cevaplar harika ama benim için çalışmadılar. Ya sorunu çözüldü hem ihraç edildi halkı ve gizli anahtarlar.

ihracat yaptığımız makineden anahtarları listeler

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
--------------------------------
pub 1024D/ABCDFE01 2008-04-13
uid firstname lastname (description) <email@example.com>
sub 2048g/DEFABC01 2008-04-13

anahtarları dışa aktar

$ gpg --output mygpgkey_pub.gpg --armor --export ABCDFE01
$ gpg --output mygpgkey_sec.gpg --armor --export-secret-key ABCDFE01

ithal ettiğimiz ve ithal ettiğimiz makineye git

$ gpg --import ~/mygpgkey_pub.gpg
$ gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg

bingo bongo, işin bitti!

başvuru: https://www.debuntu.org/how-to-importexport-gpg-key-pair/

ps. Anahtarlarım başlangıçta bootcamp windows 7'de yapıldı ve onları mac havama ihraç ettim (aynı fiziksel makine, neredeyse farklı)


2

Ubuntu 18.04 kullanıyorum ve aynı hatayı aldım, haftalarca da endişeliydi. Sonunda gpg2'nin hiçbir şeye işaret etmediğini fark etti. Yani sadece koş

git config --global gpg.program gpg

Ve tada, çekicilik gibi çalışır.

İmzalı taahhüt

Taahhütleriniz artık onlarla birlikte doğrulanmış bir etikete sahip olacak.


2

Herhangi bir yapılandırma sorunu nedeniyle değil, anahtarımın süresi dolduğundan bu hatayı tökezledim. OSX'te geçerliliğini artırmanın en kolay yolu GPG Keychain uygulamasını açmaktır (yüklediyseniz) ve otomatik olarak uzatmanızı ister. İki tıklama ile işiniz bitti. Umarım bu Google çalışanlarına yardımcı olur :)


2

Bu, Ubuntu'da benim için birdenbire gerçekleşmeye başladı, yakın zamanda bazı güncellemelerin yapılıp yapılmadığından emin değilim, ancak mevcut sorunların hiçbiri benim için geçerli değildi ( GPG_TTYbelirledim, ajanı öldürmeyi denedim vb.) Tek başına gpgkomut bu hatayla başarısız oldu:

$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

test
gpg: signing failed: Operation cancelled
gpg: [stdin]: clear-sign failed: Operation cancelled

Seçeneği gpgile çalışmayı denedim --debug-allve aşağıdaki çıktıyı fark ettim:

gpg: DBG: chan_3 <- INQUIRE PINENTRY_LAUNCHED 27472 gnome3 1.1.0 /dev/pts/6 screen-256color -
gpg: DBG: chan_3 -> END
gpg: DBG: chan_3 <- ERR 83886179 Operation cancelled <Pinentry>
gpg: signing failed: Operation cancelled

Yukarıdaki pinentryprogram ile ilgili bir sorun olduğunu gösterir . Gpg normalde pinentry-cursesbenim için çalışır , bu yüzden onu değiştirdim pinentry-tty( aptitude installilk önce vardı ) ve hata gitti (artık tam ekran şifre girişi almıyorum, ama yine de bunu sevmiyorum). Bu değişikliği yapmak için Çizmeyi eklemek zorunda pinentry-program /usr/bin/pinentry-ttyiçin ~/.gnupg/gpg-agent.confve birlikte ajanı öldürmek gpgconf --kill gpg-agent(sefere yeniden alır).


1

Yukarıdaki cevapların hiçbiri benim sorunumla eşleşmedi. Benim gpgikili ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) bir parçası olarak yüklenen GPG Suite ziyade demlemek tarafından değil.

Bununla birlikte, tavsiyenin " gpgdemlemek için mevcut olan en son ikili olanı kullan" ı düşündüğünü hissettim . Bu yüzden denedim:

brew update
brew upgrade git
brew install gpg

# the following are suggestions from brew's Caveats, to make `/usr/local/bin/gpg`
# point to the brew binary:
rm '/usr/local/bin/gpg'
brew link --overwrite gnupg2

Ben doğru değişmişti doğruladıktan gpgayaklarımın üzerinde $PATHdemlemek yeni yürütülebilir noktaya:

🍔 which gpg
/usr/local/bin/gpg
🍔 ls -l /usr/local/bin/gpg
lrwxr-xr-x  1 burger  admin  33 Feb 13 13:22 /usr/local/bin/gpg -> ../Cellar/gnupg2/2.0.30_3/bin/gpg

Ve ben de açıkça hangi gpgbinary kullanacağımı söyledim :

git config --global gpg.program gpg

Belki de bu, yola duyarlı olduğu için tamamen su geçirmez değildir. Gerçekten git git demlemek için geçiş olmuştu şüphe ötesinde doğrulayan kadar gitmedi gpg.

Her halükarda: bunların hiçbiri git committaahhütlerimi başarıyla imzalamam için yeterli değildi .


Sonunda benim için işe yarayan şey GPG Suite'i güncellemekti . 2016.7 sürümünü çalıştırıyordum ve 2016.10 güncellemesinin benim için sorunu çözdüğünü buldum.

Açtım GPG Keychain.appve "Güncellemeleri kontrol et ..." düğmesine basın. Yeni sürüm ile: imzalı taahhütler tekrar doğru çalıştı.


En son sürüme güncelleme denedim ... ya da işe yaramadı. xcode oturum açmaya çalışıyor.
Albert T. Wong


1

@Birchlabs gibi, kazma / arama bir sürü sonra GPG değil, daha ziyade GPG Suite olduğunu buldum. Yaptım cask reinstall gpg-suiteve benim için çözdü.


0

Bu sadece rastgele gerçekleşti ve geçmişte mükemmel çalışıyorsa, benim durumumda olduğu gibi, oturumu kapatmayı ( cmd+shift+q) ve tekrar giriş yapmayı deneyin .


0

Benim durumumda, diğer cevapta belirtilen çözümlerin hiçbiri işe yaramadı. Sorunun bir depoya özgü olduğunu öğrendim. Repoyu silmek ve klonlamak sorunu çözdü.


0

Biraz garip ama terminalinizin yeterince büyük olduğundan emin olun! Koşarak çok küçük olup olmadığını söyleyebilirsinecho test | gpg --clearsign - size bildiren oldukça açık bir hata mesajı verecektir. Yeterince büyük değilse, GPG ajanınız küçük ncurses kutusunu görüntüleyemez.

GUI aracısı veya ncurses kullanmayan bir şey kullanırsanız bu geçerli olmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.