gpg gagal menandatangani data fatal: gagal menulis objek commit [Git 2.10.0]

319

Saya mengikuti beberapa artikel di atas atribut cantik pada catatan rilis Git 2.10 . Melalui yang meningkatkan git ke 2.10.0 dan membuat perubahan ke global yang .gitconfigmenghasilkan sebagai berikut -

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = [email protected]
    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

Tetapi sekarang saya mencoba untuk menandatangani komitmen saya menggunakan

git commit -a -S -m "message"

Saya bisa melihat kesalahan berikut -

Anda memerlukan frasa sandi untuk membuka kunci kunci rahasia

pengguna: "XYZ (Ditandatangani Secara Digital)"

Kunci RSA 2048-bit, ID AAAAAAAAA, dibuat 2016-07-01

kesalahan: gpg gagal menandatangani data fatal: gagal menulis objek komit

Catatan - Saya masih bisa melakukan perubahan menggunakangit commit -a -m "message"

Apakah ada cara untuk mengatasi hal yang sama? Atau perubahan apa pun yang diperlukan pada gpgkonfigurasi agar dapat mengikuti peningkatan git?


Perbarui 1

Juga mencari kegunaan lebih lanjut, mengikuti Apakah ada cara untuk "autosign" melakukan di Git dengan kunci GPG? . Saya sudah mengkonfigurasi kunci menggunakan

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

dan tentu saja mendapatkan kesalahan yang sama pula.

Naman
sumber
3
Saya menghadapi masalah serupa. Saya menghapus Git 2.8 (git-scm) di Windows. Dan menginstal 2.10. Sekarang saya mendapatkan gpg failed to sign the datasetiap kali saya gunakan -S. Di 2.8, saya bisa menandatangani komit tanpa masalah. Saya tidak tahu apa yang terjadi.
Illuminator
5
Menambahkan user.signingkeymemperbaiki masalah saya, anehnya.
Xavier Ho
1
@nullpointer Saya sudah menghapus jawaban saya dari sana, karena setelah melihat lebih dalam, saya menyadari itu duplikat!
Shayan Amani
1
Suatu ironi, saya telah mengubah mesin saya untuk mengatur hal-hal baru dan akhirnya mencari pertanyaan saya sendiri dan tidak ada solusi yang disarankan terlihat cukup bersih bagi saya untuk memulai saja.
Naman
1
Untuk saya perbaiki adalah: git config user.namewas! = Nama yang digunakan saat membuat kunci PGP
stacksonstacks

Jawaban:

464

Saya mengalami masalah dengan OSX ini.

Jawaban asli:

Sepertinya pembaruan gpg (buatan) diubah ke lokasi gpgmenjadi gpg1, Anda dapat mengubah biner tempat git mencari gpg:

git config --global gpg.program gpg1

Jika Anda tidak memiliki gpg1: brew install gpg1.

Jawaban yang diperbarui:

Sepertinya gpg1 sudah usang / " tidak digunakan dengan lembut" , jadi Anda mungkin harus benar-benar memperbarui ke gpg2, sayangnya ini melibatkan beberapa langkah lagi / sedikit waktu:

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

Bagian pertama menginstal gpg2, dan yang terakhir adalah peretasan yang diperlukan untuk menggunakannya . Untuk pemecahan masalah, lihat jawaban ini (meskipun itu tentang linux bukan buatan), ini menyarankan tes yang bagus:

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

Jika tes ini berhasil (tidak ada kesalahan / keluaran termasuk tanda tangan PGP), Anda telah berhasil diperbarui ke versi gpg terbaru.

Anda sekarang dapat menggunakan penandatanganan git lagi!
Perlu dicatat bahwa Anda harus memiliki:

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

Catatan: Setelah menjalankan komit yang ditandatangani, Anda dapat memverifikasinya ditandatangani dengan:

git log --show-signature -1

yang akan mencakup info gpg untuk komit terakhir.

Andy Hayden
sumber
7
Mengatur gpg.program ke / usr / local / bin / gpg (no "1") memperbaikinya untuk saya.
Iskar
5
Tampaknya pembaruan gnupg2dengan brewmengacaukan symlink gpgdihapus, saya telah memperbaiki tautan yang digunakan brew link --overwrite gnupg2.
Brice
8
hm ... tidak berfungsi. masih memberikan kesalahan saya dengan masuk xcode.
Albert T. Wong
1
@DrBeco bukankah itu lokasi / perilaku asli? Saya masih memiliki masalah yang sama pada osx (saya pikir saya telah memperbarui minuman saya cukup baru-baru ini), gpg1adalah masih dapat dieksekusi dieksekusi.
Andy Hayden
29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentryakhirnya memperbaikinya untuk saya
Dan Bechard
317

Jika gnupg2 dan gpg-agent 2.x digunakan, pastikan untuk mengatur variabel lingkungan GPG_TTY.

export GPG_TTY=$(tty)

Lihat dokumentasi GPG tentang masalah umum .

Koraktor
sumber
17
Jika menggunakan ikan, letakkan set -x GPG_TTY (tty)di profil Anda.
fasfsfgs
@StuartCardall Apa gunanya perintah chown? Biasanya itu sudah ditugaskan kepada Anda oleh proses sistem, ketika Anda login atau membuat pseudo-tty. Jika dimiliki oleh orang lain dan Anda tidak root, itu akan gagal. Jika grup adalah sesuatu yang lain, mungkin tidak masalah, dan pengguna biasanya tidak akan berada dalam grup tty.
poolie
@poolie - itu penting jika Anda suuntuk rootdi server jauh
Stuart Cardall
6
Saya menambahkan variabel ke ~/.zshrcdan saya dapat membuat komit lagi, sekarang terhubung dengan benar ke terminal. Terima kasih atas seluruh bantuan Anda!
Alex Gurrola
Ini juga ada dalam petunjuk GitHub: help.github.com/articles/telling-git-about-your-gpg-key
bonh
198

Jika semuanya gagal, gunakan GIT_TRACE=1untuk mencoba dan melihat apa yang sebenarnya dilakukan git:

$ 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

Sekarang jalankan perintah gagal secara manual:

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

Ternyata, kunciku sudah kedaluwarsa, gittidak bisa disalahkan.

Bombe
sumber
34
Tip yang bagus untuk debugging. +1
VonC
4
Ini sebenarnya membantu saya memecahkan masalah saya sendiri, dan ini merupakan solusi untuk setiap jenis masalah dengan pesan status ini. +1
xHocquet
Terima kasih untuk proses debugging. Kunci saya telah kedaluwarsa juga.
Sgnl
2
Terima kasih! Ini membawa saya ke masalah saya. Anehnya lokal saya .git/configtelah namemenentukan dalam satu proyek yang tidak cocok dengan email saya yang masuk Itu cukup untuk menolaknya.
Kross
1
Nah, mengeksekusi gpg -bsau <key>di komputer saya tidak menjalankan apa pun. Apakah ini kira terlalu lama untuk dieksekusi? Atau apakah itu berarti kuncinya baik-baik saja untuk digunakan? @VonC ada wawasan?
Naman
82

Saya telah MELAKUKANNYA melalui resep pendek dan mudah ini :

Masuk otomatis dilakukan di macOS (Secara global dan dengan berbagai IDE):

Dapatkan Anda signingkeydengan cara ini .

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

Masukkan yang berikut ini dalam gpg.conffile (edit file dengan nano ~/.gnupg/gpg.confperintah):

no-tty

Masukkan yang berikut ini dalam gpg-agent.conffile (edit file dengan nano ~/.gnupg/gpg-agent.confperintah):

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

Perbarui :

Anda mungkin perlu menjalankan killall gpg-agentperintah setelah mengedit file konfigurasi gpg.conf,, sesuai dengan komentar. Seperti yang dikatakan perintah penjelasan sendiri, perintah ini akan menghentikan agen GPG (Penjaga Privasi Gnu).

Shayan Amani
sumber
2
Bisakah Anda juga menjelaskan apa yang dilakukan perintah-perintah itu? Ini akan membantu pemahaman.
A Droid
7
Saya juga harus menjalankan killall gpg-agentsetelah mengatur file konfigurasi, kemudian berhasil!
Pascal Ludwig
Bagaimana kita tahu kita bisa mempercayai orang-orang di belakang pinentry-mac? Saya tidak mengatakan kita tidak bisa, tetapi org GPGTools adalah cadangan oleh tim yang sangat kecil dan repo hanya memiliki 5 kontributor vs menggunakan brew install gnupgyang memanfaatkan karya gnupg.org .
sunknudsen
Jika itu membantu orang lain, masalah saya adalah bahwa saya memiliki user.signingkeyset lokal yang tidak valid , yang tidak saya perhatikan dalam konfigurasi sumber saya, atau pengaturan global saya (karena saya tidak berpikir untuk melihat konfigurasi lokal) Pastikan kedua lokal ( git config --local --get user.signingkey) dan global ( git config --global --get user.signingkey) sama, atau bahkan lebih baik, batalkan yang lokal jika tidak valid ( git config --local --unset user.signingkey)
Glenn 'devalias'
pada OSX (10.13.06), ia memberikan kesalahan berikut, bash: pinentry-program: perintah tidak ditemukan
cgl
59

Dapat membantu menghentikan proses gpg-agentyang mungkin macet dengan data lama. Jadi yang baru gpg-agentmulai akan meminta kata sandi.

MaximKostrikin
sumber
2
Ini berhasil untuk saya.
danyim
12
Gunakan gpg-agent --daemonuntuk memulainya
FooBar
1
saya harus memulai kembali gpg-agent juga
GnrlBzik
8
Untuk mematikan proses pada macOS:killall gpg-agent
incleaf
1
di ubuntugpgconf --kill gpg-agent
Adam
38

Ikuti url di bawah ini untuk menyiapkan komit yang ditandatangani https://help.github.com/en/articles/telling-git-about-your-signing-key

jika masih mendapatkan gpg gagal menandatangani data fatal: gagal menulis objek komit

ini bukan masalah dengan git, ini dengan GPG ikuti langkah-langkah di bawah ini

1.gpg --version

  1. echo "test" | gpg --clearsign

jika ditampilkan:

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

4. lalu coba lagi echo "test" | gpg --clearsign di mana tanda tangan PGP didapat.

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

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

jayesh
sumber
1
ini solusi untukku! Terima kasih banyak!
upInCloud
Jalan-jalan yang sangat baik tentang bagaimana mencari tahu apakah ini masalahnya.
Philippe Signoret
Inilah yang melakukannya untuk saya. Terima kasih banyak!
Allan Guwatudde
export GPG_TTY=$(tty)adalah triknya. Menambahkan itu ke .zshrcfile saya
Shane Stillwell
22

Bagi siapa saja yang menghadapi masalah ini pada mesin MacOS , coba ini:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (jika diperlukan)
  4. gpg --full-generate-key Buat kunci dengan menggunakan algoritma.
  5. Dapatkan kunci yang dihasilkan dengan menjalankan: gpg --list-keys
  6. Atur kuncinya di sini 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. Jika Anda ingin mengekspor Kunci Anda ke GitHub maka: gpg --armor --export <key> dan tambahkan kunci ini ke GitHub di kunci GPG: https://github.com/settings/keys (dengan START dan END line disertakan)

Jika masalah masih ada:

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

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

Jika masalah masih ada:

Pasang https://gpgtools.org dan tandatangani kunci yang Anda gunakan dengan menekan Masuk dari bilah menu: Kunci -> Masuk

Jika masalah masih ada:

Pergi ke: global Anda .gitconfigberkas yang dalam kasus saya adalah di: /Users/gent/.gitconfig Dan memodifikasi .gitconfig berkas (pastikan Email dan Nama adalah sama dengan yang telah Anda buat sementara menghasilkan Key) :

[user]
	email = [email protected]
	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

Gent Berani
sumber
2
Menambahkan 'gpsign = true' di .gitconfig memperbaikinya untuk saya
Pierre
18

Dua sen saya di sini:

Saat Anda membuat dan menambahkan kunci ke agen gpg, Anda mendefinisikan sesuatu yang disebut passphrase. Sekarang passphrasedi beberapa titik berakhir, dangpg Anda perlu memasukkannya lagi untuk membuka kunci sehingga Anda dapat mulai masuk lagi.

Ketika Anda menggunakan program lain yang berinteraksi dengan gpg, Anda gpgdiminta untuk memasukkan frasa sandi Anda tidak muncul (pada dasarnya gpg-agentketika daemonized tidak dapat menampilkan dialog input pada Andastdin ).

Salah satu solusinya adalah gpg --sign a_file.txtkemudian memasukkan frasa sandi yang telah Anda masukkan saat membuat kunci dan semuanya akan baik-baik saja (gpg-agent harus secara otomatis masuk)

Lihat jawaban ini tentang cara menetapkan batas waktu lebih lama untuk frasa sandi Anda sehingga Anda tidak harus melakukan ini sepanjang waktu.

Atau Anda dapat menghapus kata sandi sepenuhnya ssh-keygen -p

Sunting: Lakukan man gpg-agentuntuk membaca beberapa hal tentang bagaimana hal di atas terjadi secara otomatis dan tambahkan baris:

GPG_TTY=$(tty)
export GPG_TTY

di .bashrc Anda jika Anda menggunakan bash (ini adalah jawaban yang benar tapi saya tetap melatih pemikiran saya di atas)

George Daramouskas
sumber
Terima kasih @ george-daramouskas, ini adalah masalah saya.
Nic Barker
10

Pembaruan Oktober 2016: masalah 871 menyebutkan "Masuk berhenti bekerja di Git 2.9.3"

Git untuk Windows 2.10.1 dirilis dua hari lalu (4 Oktober 2016) telah memperbaiki penandatanganan komitmen dan tag Interaktif GPG.

perubahan gpg-sign baru-baru ini di git (yang memperkenalkan tidak ada masalah di Linux) memperlihatkan masalah dengan cara, di Windows, non-MSYS2-git berinteraksi dengan MSYS2-gpg.


Jawaban asli:

Membaca " 7.4 Git Tools - Menandatangani Pekerjaan Anda ", saya anggap Anda telah user.signingkeymenyetel konfigurasi " " Anda .

Refactoring besar terakhir (sebelum Git 2.10) di sekitar gpg dilakukan di 2f47eae2a , di sini pesan kesalahan dipindahkan kegpg-interface.c

Log pada file itu mengungkapkan perubahan terbaru dalam commit af2b21e (Git 2.10)

gpg2 sudah menggunakan format panjang secara default, tetapi sebagian besar distribusi tampaknya masih memiliki "gpg" menjadi versi 1.x yang lebih lama karena alasan kompatibilitas. Dan versi gpg yang lebih lama hanya menampilkan ID pendek 32-bit, yang cukup tidak aman.

Ini sebenarnya tidak masalah untuk verifikasi itu sendiri: jika verifikasi berlalu, tanda tangan pgp baik.
Tetapi jika Anda belum benar-benar memiliki kunci, dan ingin mengambilnya, atau Anda ingin memeriksa dengan tepat kunci mana yang digunakan untuk verifikasi dan ingin memeriksanya, kita harus menentukan kunci dengan lebih presisi.

Jadi periksa bagaimana Anda menentukan user.signingkeykonfigurasi Anda , dan versi gpg yang Anda gunakan (gpg1 atau gpg2), untuk melihat apakah mereka memiliki efek pada pesan kesalahan.

Ada juga commit 0581b54 yang mengubah kondisi untuk gpg failed to sign the datapesan kesalahan (sebagai pelengkap untuk melakukan 0d2b664 ):

Kami tidak membaca dari stderr sama sekali saat ini. Namun, kami akan ingin di patch masa depan, jadi ini juga mempersiapkan kita ada (dan dalam kasus gpg melakukan write sebelum membaca semua masukan, meskipun lagi, tidak mungkin bahwa uid kunci akan mengisi buffer pipa).

Komit 4322353 menunjukkan gpg sekarang menggunakan file sementara, sehingga mungkin ada masalah yang tepat di sekitar itu.

Mari kita konversi menggunakan objek tempfile, yang menangani hard case untuk kita, dan menambahkan panggilan pembersihan yang hilang.

VONC
sumber
Saya memiliki user.signingkeyset konfigurasi saya . Juga menggunakan gpg (GnuPG) 2.0.3.
Naman
@nullpointer Saya telah mengedit jawaban saya. Bisakah Anda memeriksa apakah masalah berlanjut dengan Gti Untuk Windows 2.10.1.
VonC
maaf atas keterlambatan pembaruan, bekerja pada MacOSX bukan Windows sehingga tidak dapat memverifikasi ini.
Naman
10

Jejak git sangat mengungkapkan situasi saya ...

   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 <[email protected]>'
   error: gpg failed to sign the data
   fatal: failed to write commit object

Saya perlu membuat kunci awal per format yang gitdiperiksa. Cara terbaik untuk menyalin nilai yang diteruskan ke -bsauatas dalam log seperti apa adanya dan gunakan di bawah ini.

Jadi itu menjadi,

   gpg --quick-generate-key "full name <[email protected]>"

Lalu berhasil.

Semoga itu bisa membantu.

phyatt
sumber
Ini bekerja untuk saya dan git tracesangat membantu.
philip oghenerobo balogun
1
sobat ... Anda tidak dapat membayangkan berapa jam saya habiskan untuk mencoba menyelesaikan masalah ini sampai saya mencapai Jawaban Anda ... itu adalah penamaan kunci selama ini .. terima kasih! Terima kasih! Terima kasih!
giomanda
8

Menggunakan cygwin, saya baru saja beralih ke gpg2. Lalu saya punya masalah yang sama untuk masuk dengan git setelah pengaturangit config gpg.program gpg2 .

Coba echo "test" | gpg2 --clearsignlihat apakah gpg2 berfungsi. Saya menemukan ini solusi termudah untuk ditetapkan git config gpg.program gpg, karena itu berfungsi. Tetapi Anda juga akan mendapatkan kesalahan yang lebih baik dengan cara ini - mis. Anda perlu menginstal pinentry.

lucidbrot
sumber
Sebenarnya, pada beberapa distro Linux Anda mungkin berakhir dengan masalah yang sama. Git selalu menggunakan gpg, bukan gpg2. Lihat juga: stackoverflow.com/questions/34766123/…
rugk
Ini menunjukkan kepada saya kesalahan gpg: signing failed: Inappropriate ioctl for deviceyang bisa diselesaikan oleh export GPG_TTY=$(tty). Sumber: github.com/keybase/keybase-issues/issues/2798
swiknaba
8

Pada OS X, menggunakan gnupg2via minuman saya hanya perlu membunuh agen gpg , kadang-kadang terjadi:

pkill -9 gpg-agent

Dan atur envvariabel jika perlu:

export GPG_TTY=$(tty)

Lihat Masalah umum GPG juga dan jawaban ini di sini juga.

trainoasis
sumber
2
Ini juga bekerja untuk saya. Saya telah membuat alias baru alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.
Penumpang
1
Ini berfungsi dengan baik, terima kasih. Bahkan tidak perlu mengatur variabel env sesudahnya.
Nick Rameau
8

Saya telah melihat jawaban yang sama, tetapi tidak persis seperti apa yang berhasil untuk saya. Di Linux, saya harus mematikan dan memulai kembali gpg-agentdengan:

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

Ini berhasil bagi saya. Sepertinya Anda perlu user.signingkeymengatur ke kunci pribadi Anda juga dari apa yang dikatakan beberapa komentar lain.

$ git config --global user.signingkey [your_key_hash]
Engineero
sumber
6

Saya mendapatkan kesalahan ini di Ubuntu 18.04 dan ternyata kunci saya telah kedaluwarsa .

Untuk melihat ini, saya menjalankan ini dan mengkonfirmasi bahwa kunci saya telah kedaluwarsa:

gpg --list-keys

Untuk memperbaikinya, saya berlari (menggunakan ID yang ditampilkan pada perintah sebelumnya):

gpg --edit-key <ID>

Dari sana, saya memperpanjang kedaluwarsa key 0dan key 1mengikuti instruksi ini yang key 0kemudian menjadi mengetik expiredan mengikuti perintah. Lalu ulangi untuk key 1.

Setelah itu, untuk menguji ini, saya berlari:

echo test | gpg --clearsign

Dan sebelum perbaikan, gagal dengan kesalahan:

gpg: tidak ada kunci rahasia default: Tidak ada kunci rahasia
gpg: [stdin]: gagal masuk gagal: Tidak ada kunci rahasia

Tetapi setelah perbaikan, perintah yang sama berhasil menandatangani pesan itu sehingga saya tahu semuanya berjalan kembali!

gMale
sumber
Mengonfirmasi masalah ini telah diperbaiki ketika mengimpor kunci yang valid dari Mac OSX Catalina ke CentOS7. Berjuang dengan binatang buas ini selama lebih dari dua jam mencoba mencari tahu mengapa ia terus meminta kata sandi di antara hal-hal lain. Anehnya itu sudah diatur untuk tidak pernah kedaluwarsa, dan saya mengaturnya untuk tidak pernah kedaluwarsa.
Cody B
5

Saya mengalami masalah yang sama. Saya senang melaporkan bahwa masalahnya bukan terletak pada git 2.10.0tetapi dengan gnupg 1.4.21.

Menurunkan sementara gnupg ke 1.4.20 memperbaiki masalah untuk saya.

Jika Anda menggunakan homebrew dan Anda memutakhirkan paket-paket Anda seperti yang saya lakukan, Anda mungkin bisa menjalankannya brew switch gnupg 1.4.20untuk kembali.

Arno
sumber
3

Pastikan Anda mengatur email dengan benar.

git config --global user.email "[email protected]"
Weston Reed
sumber
1
Ini adalah satu-satunya solusi yang bekerja untuk saya, sangat membantu untuk mengikuti metode yang benar untuk menghasilkan kunci GPG via github
Naz
1
Dalam kasus saya masalahnya adalah saya menggunakan email perusahaan dalam repo tertentu, yang saya tidak punya kunci PGP yang dihasilkan.
rubi
3

Jika email yang dikaitkan dengan kunci GPG Anda berbeda dengan email yang Anda gunakan di git, Anda harus menambahkan id pengguna lain ke kunci Anda ATAU menggunakan kunci yang persis sama dengan email.

Anda dapat menambahkan UID lain dengan menggunakan:

$ gpg --edit-key

Lihat mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails

JavaRocky
sumber
1
Ini untuk saya. Ya Tuhan, bagaimana tidak ada pesan kesalahan yang lebih informatif daripada "gagal menandatangani data".
Alec
3

Saya pasti secara tidak sengaja memperbarui gpg karena saya mendapatkan ini setelah mencoba menguji apakah gpg berfungsi:

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.

Menjalankan gpgconf --kill allmemperbaikinya untukku.

Semoga ini bisa membantu seseorang.

Visokoo
sumber
2

Saya memiliki masalah serupa dengan sumber Git terbaru (2.12.2) yang dibangun bersama dengan sumber terbaru dari semua dependensinya (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, dll).

Ternyata libreadlinememberi masalah GnuPG:

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

Dan tentu saja, berusaha mendapatkan informasi yang bermanfaat dari Git dengan -vvvgagal, sehingga kegagalan itu menjadi misteri.

Untuk mengatasi kegagalan PGP karena ReadLine, ikuti instruksi di Tidak dapat memperbarui atau menggunakan manajer paket - kesalahan gpg :

Di terminal:

ls /usr/local/lib

ada banyak lib readline di sana (libreadline.so.BLAH-BLAH) jadi saya:

su
mkdir temp
mv /usr/local/lib/libreadline* temp
ldconfig
jww
sumber
2

Jawaban di atas bagus tetapi tidak berhasil untuk saya. Yang memecahkan masalah saya adalah mengekspor baik publik maupun rahasia kunci kunci .

daftar kunci dari mesin tempat kami mengekspor

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

ekspor kunci

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

buka mesin yang kami impor dan impor

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

bingo bongo, kamu sudah selesai!

referensi: https://www.debuntu.org/how-to-importexport-gpg-key-pair/

ps. Kunci saya awalnya dibuat pada bootcamp windows 7 dan saya mengekspornya ke mac air saya (mesin fisik yang sama, berbeda secara virtual)

asus
sumber
2

Saya di Ubuntu 18.04 dan mendapat kesalahan yang sama, khawatir selama berminggu-minggu juga. Akhirnya menyadari bahwa gpg2 tidak mengarah ke apa pun. Jadi jalankan saja

git config --global gpg.program gpg

Dan tada, itu bekerja seperti pesona.

Komit yang ditandatangani

Komit Anda sekarang akan memiliki tag yang diverifikasi dengannya.

Aashutosh Rathi
sumber
2

Saya menemukan kesalahan ini bukan karena masalah konfigurasi, tetapi karena kunci saya kedaluwarsa. Cara termudah untuk memperpanjang validitasnya pada OSX adalah dengan membuka aplikasi Keychain GPG (jika sudah terpasang) dan secara otomatis akan meminta Anda untuk memperpanjangnya. Dua klik, dan Anda selesai. Semoga ini bisa membantu sesama Googler :)

maxhm10
sumber
2

Ini mulai terjadi tiba-tiba bagi saya di Ubuntu, tidak yakin apakah beberapa pembaruan baru-baru ini melakukannya, tetapi tidak ada masalah yang ada yang berlaku bagi saya (saya telah GPG_TTYmenetapkan, mencoba membunuh agen, dll.). gpgPerintah mandiri gagal dengan kesalahan ini:

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

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

Saya mencoba menjalankan gpgdengan --debug-allpilihan dan melihat di bawah ini keluaran:

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

Di atas menunjukkan bahwa ada beberapa masalah dengan pinentryprogram ini. Gpg biasanya berjalan pinentry-cursesuntuk saya, jadi saya mengubahnya ke pinentry-tty(saya harus aptitude installterlebih dahulu) dan kesalahan hilang (meskipun saya tidak lagi mendapatkan entri kata sandi layar penuh, tapi saya tidak suka itu). Untuk melakukan perubahan ini, saya harus menambahkan baris pinentry-program /usr/bin/pinentry-ttyke ~/.gnupg/gpg-agent.confdan membunuh agen dengan gpgconf --kill gpg-agent(itu akan dimulai kembali di waktu berikutnya).

haridsv
sumber
1

Tidak ada jawaban di atas yang cocok dengan masalah saya. gpgBiner saya ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) dipasang sebagai bagian dari GPG Suite , bukan oleh minuman.

Namun demikian, saya merasa bahwa sarannya adalah: "menggunakan gpgbiner mana pun yang terbaru yang tersedia pada minuman". Jadi saya mencoba:

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

Saya memverifikasi bahwa saya telah benar mengubah gpgpada saya $PATHuntuk menunjuk ke executable baru dari minuman:

🍔 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

Dan saya juga secara eksplisit memberi tahu git gpgbiner mana yang akan digunakan:

git config --global gpg.program gpg

Yah, mungkin itu tidak sepenuhnya kedap air, karena sensitif terhadap jalan. Aku tidak benar-benar pergi sejauh memastikan tanpa keraguan bahwa git telah beralih untuk meminta minuman itu gpg.

Dalam kasus apa pun: semua ini tidak cukup untuk git commitberhasil menandatangani komitmen saya lagi.


Yang akhirnya berhasil bagi saya adalah memperbarui GPG Suite . Saya menjalankan versi 2016.7, dan saya menemukan bahwa memperbarui ke 2016.10 memperbaiki masalah bagi saya.

Saya membuka GPG Keychain.app, dan menekan "Periksa pembaruan ...". Dengan versi baru: komit yang ditandatangani berfungsi dengan benar lagi.

Birchlabs
sumber
Saya mencoba memperbarui ke versi terbaru ... juga tidak berhasil. mencoba masuk xcode.
Albert T. Wong
1

dapatkan pengaturannya hanya dengan:

brew uninstall gpg 

brew install gpg2
Anurag pareek
sumber
1

Sangat mirip @birchlabs, setelah banyak menggali / mencari saya menemukan bahwa itu bukan GPG, melainkan GPG Suite. Saya lakukan cask reinstall gpg-suitedan itu menyelesaikannya untuk saya.

John
sumber
0

Jika ini hanya terjadi secara acak dan telah berfungsi dengan baik di masa lalu, seperti kasus saya, coba logout ( cmd+shift+q) dan masuk kembali. Bekerja untuk saya

Skylar Brown
sumber
0

Dalam kasus saya, tidak ada solusi yang disebutkan dalam jawaban lain yang berfungsi. Saya menemukan bahwa masalahnya khusus untuk satu repositori. Menghapus dan mengkloning repo kembali memecahkan masalah.

David Miguel
sumber
0

Agak aneh, tapi pastikan terminal Anda cukup besar! Anda dapat mengetahui apakah itu terlalu kecil dengan menjalankan echo test | gpg --clearsign- itu akan memberi Anda pesan kesalahan yang cukup jelas untuk memberi tahu Anda. Jika tidak cukup besar, agen GPG Anda tidak dapat menampilkan kotak ncurses kecilnya.

Yang ini tidak akan berlaku jika Anda menggunakan agen GUI atau sesuatu yang tidak menggunakan ncurses.

Dana Gugatan Monica
sumber