gpg डेटा पर हस्ताक्षर करने में विफल रहा: घातक वस्तु लिखने में विफल [Git 2.10.0]


319

मैंने Git 2.10 रिलीज़ नोट पर सुंदर विशेषताओं पर कुछ लेखों का अनुसरण किया । जिसके माध्यम से 2.10.0 तक git को अपग्रेड किया और इसके परिणामस्वरूप वैश्विक परिवर्तन किए -.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

लेकिन अब जब मैं प्रयोग करके अपने कमिट पर हस्ताक्षर करने का प्रयास करता हूं

git commit -a -S -m "message"

मुझे निम्नलिखित त्रुटि देखने को मिली -

आपको गुप्त कुंजी अनलॉक करने के लिए पासफ़्रेज़ की आवश्यकता है

उपयोगकर्ता: "XYZ (डिजिटल हस्ताक्षरित)"

2048-बिट RSA कुंजी, आईडी AAAAAAAA, 2016-07-01 बनाई गई

त्रुटि: gpg डेटा पर हस्ताक्षर करने में विफल रहा: घातक वस्तु लिखने में विफल रहा

नोट - मैं अभी भी बदलाव का उपयोग कर सकता हूंgit commit -a -m "message"

क्या इससे उबरने का कोई तरीका है? या gpgगिट के उन्नयन के साथ प्राप्त करने के लिए विन्यास में किसी भी परिवर्तन की आवश्यकता है ?


अपडेट १

इसके अलावा, आगे उपयोगिता की मांग करते हुए, GPG कुंजी के साथ Git में "ऑटोसाइन" करने का एक तरीका है? । मैंने पहले ही कुंजी का उपयोग करके कॉन्फ़िगर किया है

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

और वैसे भी स्पष्ट रूप से एक ही त्रुटि हो रही है।


3
मैं इसी तरह के मुद्दे का सामना करता हूं। मैंने विंडोज पर Git 2.8 (git-scm) को अनइंस्टॉल किया। और 2.10 स्थापित किया। अब मुझे gpg failed to sign the dataहर बार इस्तेमाल करने को मिलता है -S। 2.8 में, मैं समस्या के बिना एक कमिट पर हस्ताक्षर कर सकता हूं। मुझे नहीं पता क्या हुआ।
इल्लुमिनेटर

5
user.signingkeyनिश्चित रूप से मेरा मुद्दा जोड़ना , काफी अजीब है।
जेवियर हो

1
@nullpointer मैंने वहाँ से अपना उत्तर हटा दिया है, क्योंकि गहरी नज़र रखने के बाद मुझे एहसास हुआ कि यह एक डुप्लिकेट है!
शयन अमानी

1
एक विडंबना यह है कि मैंने अपनी मशीन को नए सिरे से स्थापित करने के लिए बदल दिया और अपने स्वयं के प्रश्न की तलाश में समाप्त हो गया और सुझाए गए समाधानों में से कोई भी मुझे बस शुरू करने के लिए पर्याप्त साफ नहीं दिखता है।
नमन

1
मेरे लिए फिक्स था: git config user.nameथा! = PGP कुंजी बनाते समय इस्तेमाल किया गया नाम
स्टैकनस्टैस्टैक्स

जवाबों:


462

मैं OSX के साथ इस मुद्दे में भाग गया।

मूल उत्तर:

ऐसा लगता है कि एक gpg अद्यतन (काढ़ा) के स्थान पर बदल गया gpgहै gpg1, आप द्विआधारी को बदल सकते हैं जहां git gpg दिखता है:

git config --global gpg.program gpg1

आप gpg1 नहीं है, तो: brew install gpg1

अद्यतन उत्तर:

ऐसा लगता है कि gpg1 को हटा दिया जा रहा है / "धीरे से उपयोग से बाहर कर दिया गया" , इसलिए आपको संभवतः वास्तव में gpg2 में अपडेट करना चाहिए, दुर्भाग्य से इसमें कुछ और कदम / थोड़ा समय शामिल है:

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

पहला भाग gpg2 स्थापित करता है, और बाद वाला इसे उपयोग करने के लिए आवश्यक हैक है । समस्या निवारण के लिए, यह उत्तर देखें (हालाँकि यह लिनक्स के बारे में नहीं है), यह एक अच्छा परीक्षण बताता है:

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

यदि यह परीक्षण सफल है (कोई त्रुटि / आउटपुट में PGP हस्ताक्षर शामिल नहीं हैं), तो आपने नवीनतम gpg संस्करण में सफलतापूर्वक अपडेट किया है।

अब आपको फिर से साइन इन करने में सक्षम होना चाहिए!
यह ध्यान देने योग्य है कि आपको इसकी आवश्यकता होगी:

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

नोट: आपके द्वारा हस्ताक्षरित कमिट करने के बाद, आप इसे साइन इन करके सत्यापित कर सकते हैं:

git log --show-signature -1

जिसमें अंतिम प्रतिबद्ध के लिए gpg जानकारी शामिल होगी।


7
Gpg.program को / usr / स्थानीय / बिन / gpg (कोई "1") पर सेट करना मेरे लिए इसे निर्धारित करता है।
ई.एस.आर.

5
ऐसा लगता है कि सहानुभूति के साथ गड़बड़ी के gnupg2साथ एक अद्यतन brewइस प्रकार gpgहटा दिया गया था, मैंने उपयोग करके लिंक को ठीक किया था brew link --overwrite gnupg2
ब्राइस

8
हम्म ... काम नहीं करता। अभी भी xcode में हस्ताक्षर करने के साथ मेरी त्रुटि देता है।
अल्बर्ट टी। वोंग

1
@DrBeco वह मूल स्थान / व्यवहार नहीं है? मुझे अभी भी ओएक्सएक्स पर एक ही मुद्दा है (मुझे लगता है कि मैंने हाल ही में अपने काढ़ा को अपडेट किया है), gpg1अभी भी निर्यात योग्य है।
एंडी हेडन

29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentryअंत में यह मेरे लिए तय किया
Dan Bechard

317

यदि gnupg2 और gpg-Agent 2.x का उपयोग किया जाता है, तो पर्यावरण चर को सेट करना सुनिश्चित करें GPG_TTY

export GPG_TTY=$(tty)

सामान्य समस्याओं के बारे में GPG के दस्तावेज़ देखें ।


17
यदि मछली का उपयोग कर रहे हैं, तो set -x GPG_TTY (tty)अपनी प्रोफ़ाइल पर रखें।
fasfsfgs

@StuartCardall chown कमांड का क्या मतलब है? आमतौर पर यह पहले से ही एक सिस्टम प्रोसेस द्वारा आपको सौंपा जा चुका होता है, जब आपने लॉग-इन किया या छद्म ट्टी बनाई। यदि यह किसी और के स्वामित्व में है और आप जड़ नहीं हैं, तो यह विफल हो जाएगा। यदि समूह कुछ और है, तो यह संभवत: कोई फर्क नहीं पड़ता है, और उपयोगकर्ता आमतौर पर समूह tty में नहीं होंगे।
पूलि

@poolie - यह अगर तुम मामलों suके लिए rootएक दूरस्थ सर्वर पर
स्टुअर्ट Cardall

6
मैंने चर को जोड़ा ~/.zshrcऔर मैं फिर से कमिट कर सकता हूं, अब यह टर्मिनल से सही तरीके से जुड़ता है। आपकी सभी मदद का धन्यवाद!
एलेक्स गुरोला

यह GitHub निर्देशों में भी है: help.github.com/articles/telling-git-about-your-gpg-key
bonh

198

यदि सब कुछ विफल रहता है, तो GIT_TRACE=1कोशिश करें और देखें कि वास्तव में क्या कर रहा है:

$ 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

अब फेलिंग कमांड को मैन्युअल रूप से चलाएं:

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

पता चला, मेरी कुंजी समाप्त हो गई थी, gitदोष नहीं था।


34
डिबगिंग के लिए अच्छा टिप। +1
वॉन सी सी

4
यह वास्तव में मुझे अपनी समस्या को हल करने में मदद करता है, और यह इस स्थिति संदेश के साथ हर प्रकार की समस्या का समाधान है। +1
xHocquet

डिबगिंग वॉक के लिए धन्यवाद। मेरी कुंजी भी समाप्त हो गई थी।
21:17 बजे Sgnl

2
धन्यवाद! इससे मुझे अपनी समस्या का सामना करना पड़ा। अजीब तरह से मेरे स्थानीय में एक परियोजना में एक निर्दिष्ट .git/configथा जो nameमेरे हस्ताक्षर वाले ईमेल से मेल नहीं खाता था। यह अस्वीकार करने के लिए पर्याप्त था।
क्रॉस

1
खैर, gpg -bsau <key>मेरी मशीन पर अमल कुछ भी निष्पादित नहीं करता है। क्या यह मानने के लिए बहुत लंबा समय लगता है? या इसका मतलब यह है कि कुंजी का उपयोग करने के लिए ठीक है? @ किसी भी अंतर्दृष्टि?
नमन

82

मैंने इसे इस छोटे और आसान माध्यम से पूरा किया है रेसिपी के :

MacOS पर ऑटो-साइन शुरू होता है (विश्व स्तर पर और विभिन्न IDEs के साथ):

अपने जाओ signingkeyमें इस तरह से

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

निम्नलिखित gpg.confफ़ाइल में डालें ( nano ~/.gnupg/gpg.confकमांड के साथ फ़ाइल संपादित करें ):

no-tty

निम्नलिखित gpg-agent.confफ़ाइल में डालें ( nano ~/.gnupg/gpg-agent.confकमांड के साथ फ़ाइल संपादित करें ):

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

अपडेट करें :

आपको टिप्पणियों के अनुसार killall gpg-agent, कॉन्फ़िगरेशन फ़ाइल को संपादित करने के बाद कमांड निष्पादित करने की आवश्यकता हो सकती है gpg.conf। जैसा कि स्व-व्याख्यात्मक आदेश कहता है, यह आदेश GPG (Gnu गोपनीयता गार्ड) एजेंट को समाप्त कर देगा।


2
क्या आप यह भी बता सकते हैं कि वे आदेश क्या कर रहे हैं? यह समझने में मदद करेगा।
एक Droid

7
मुझे killall gpg-agentकॉन्फिग फाइल्स सेट करने के बाद भी चलना था , फिर काम किया!
पास्कल लुडविग

हम कैसे जानते हैं कि हम पीछे के लोगों पर भरोसा कर सकते हैं pinentry-mac? मैं नहीं कहता कि हम नहीं कर सकते हैं, लेकिन GPGTools org एक बहुत छोटी टीम द्वारा बैकअप है और रेपो में केवल 5 योगदानकर्ता हैं, brew install gnupgजिसके उपयोग से gnupg.org का काम पूरा होता है
सूर्यकुंडसेन

यदि यह दूसरों की मदद करता है, तो मेरा मुद्दा यह था कि मेरे पास एक अमान्य स्थानीय user.signingkeyसेट था, जिसे मैंने अपने सॉर्सेट्री कॉन्फ़िगरेशन में नहीं देखा था, न ही मेरी वैश्विक सेटिंग्स (क्योंकि मैंने स्थानीय कॉन्फ़िगरेशन को देखने के लिए नहीं सोचा था) दोनों को स्थानीय सुनिश्चित करें ( git config --local --get user.signingkey) और वैश्विक ( git config --global --get user.signingkey) एक ही हैं, या उससे भी बेहतर, स्थानीय को एक को git config --local --unset user.signingkey
परेशान करें

आदेश नहीं मिला: पर OSX (10.13.06), यह निम्न त्रुटि, बैश देता है: pinentry-कार्यक्रम
CGL

59

gpg-agentपुराने डेटा के साथ अटक जाने वाली हत्या की प्रक्रिया में मदद कर सकते हैं। तो नया gpg-agentशुरू पासवर्ड के लिए पूछना होगा।


2
इसने मेरे लिए यह किया।
डेनिम

12
gpg-agent --daemonइसे शुरू करने के लिए उपयोग करें
FooBar

1
मुझे gpg-agent को पुनः आरंभ करना था
GnrlBzik

8
MacOS पर प्रक्रिया को मारने के लिए:killall gpg-agent
1919

1
ubuntu परgpgconf --kill gpg-agent
एडम

37

हस्ताक्षरित कमिटमेंट के लिए नीचे दिए गए url का पालन करें https://help.github.com/en/articles/telling-git-about-your-signing-key

अगर अभी भी gpg हो रहा है तो डेटा पर हस्ताक्षर करने में विफल रहा: घातक वस्तु लिखने में विफल

यह git के साथ कोई समस्या नहीं है, यह GPG का अनुसरण चरणों के साथ है

1।gpg --version

  1. echo "test" | gpg --clearsign

अगर यह दिखाया जा रहा है:

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
  1. तो उपयोग करें export GPG_TTY=$(tty)

4. फिर से प्रयास करें echo "test" | gpg --clearsign जिसमें पीजीपी हस्ताक्षर मिला है।

  1. git config -l | grep gpg

gpg.program = gpg प्रतिबद्ध.gpgsign = true

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


1
यह मेरे लिए समाधान था! आपका बहुत बहुत धन्यवाद!
upInCloud

अगर यह मुद्दा है तो कैसे पता लगाना है कि उत्कृष्ट वॉक-थ्रू।
फिलिप सिग्नेट

मेरे लिए यही किया। आपका बहुत बहुत धन्यवाद!
एलन गुवाटुडे

export GPG_TTY=$(tty)चाल थी। कि मेरी .zshrcफ़ाइल में जोड़ा
शेन स्टिलवेल

21

MacOS मशीनों पर इस समस्या का सामना कर रहे किसी भी व्यक्ति के लिए , यह प्रयास करें:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (अगर जरुरत हो)
  4. gpg --full-generate-key एक एल्गोरिथ्म का उपयोग करके एक कुंजी बनाएँ।
  5. निष्पादित करके कुंजी प्राप्त करें: gpg --list-keys
  6. कुंजी यहाँ सेट करें 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. यदि आप अपनी कुंजी को GitHub पर निर्यात करना चाहते हैं: तो gpg --armor --export <key> और इस कुंजी को GPG कुंजी में GitHub में जोड़ें: https://github.com/settings/keys (START और END लाइन में शामिल)

यदि समस्या अभी भी मौजूद है:

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

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

यदि समस्या अभी भी मौजूद है:

Https://gpgtools.org इंस्टॉल करें और मेनू बार से साइन दबाकर उपयोग की जाने वाली कुंजी पर हस्ताक्षर करें : कुंजी -> साइन इन करें

यदि समस्या अभी भी मौजूद है:

पर जाएँ: अपने वैश्विक .gitconfigफ़ाइल जो मेरे मामले में पर है: /Users/gent/.gitconfig और संशोधित .gitconfig फ़ाइल (कृपया सुनिश्चित करें कि ईमेल बनाने के लिए और नाम एक ही है कि आप कुंजी जनरेट करते समय बनाया है के साथ एक ही कर रहे हैं) :

[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 में 'gpsign = true' को जोड़ना मेरे लिए
पियरे

18

मेरे दो सेंट यहाँ:

जब आप बनाते हैं और gpg-agent की एक कुंजी जोड़ते हैं तो आप कुछ कहलाने वाले को परिभाषित करते हैं passphrase। अब जब passphraseकुछ बिंदु समाप्त हो रहे हैं, औरgpg आपको अपनी कुंजी अनलॉक करने के लिए इसे फिर से दर्ज करने की आवश्यकता है ताकि आप फिर से हस्ताक्षर करना शुरू कर सकें।

जब आप किसी अन्य प्रोग्राम का उपयोग करते हैं gpg, जिसके साथ gpgआप हस्तक्षेप करते हैं, तो आपको अपना पासफ़्रेज़ दर्ज करने का संकेत दिखाई नहीं देता है (मूल रूप से gpg-agentजब डीमॉनेटाइज्ड संभवतः आपको इनपुट संवाद नहीं दिखा सकता हैstdin )।

एक समाधान gpg --sign a_file.txtतब पासफ़्रेज़ दर्ज करें जो आपने दर्ज किया है जब आपने अपनी कुंजी बनाई थी और तब सब कुछ ठीक होना चाहिए (gpg-agent होना चाहिए स्वचालित रूप से होना चाहिए)

इस जवाब को देखेंअपने पासफ़्रेज़ के लिए लंबे समय तक सेट करने के तरीके को ताकि आपको हर समय ऐसा न करना पड़े।

या आप पासफ़्रेज़ को पूरी तरह से हटा सकते हैं ssh-keygen -p

संपादित करें: man gpg-agentऊपर दिए गए स्वचालित रूप से होने और लाइनों को जोड़ने के तरीके पर कुछ सामान पढ़ने के लिए एक करें :

GPG_TTY=$(tty)
export GPG_TTY

यदि आप bash का उपयोग कर रहे हैं तो अपने .bashrc पर (यह सही उत्तर है, लेकिन मैं अपनी विचारधारा को ऊपर भी रख रहा हूं)


धन्यवाद @ जॉर्ज-दारोमस, यह मेरा मुद्दा था।
निक बार्कर

10

अद्यतन अक्टूबर 2016: अंक 871 ने उल्लेख किया "साइनिंग ने गिट 2.9.3 में काम करना बंद कर दिया"

Git for Windows 2.10.1 दो दिन पहले (अक्टूबर 4, 2016) जारी किया गया है, जिसमें कॉमिट और टैग के इंटरएक्टिव GPG पर हस्ताक्षर किए गए हैं।

git में हालिया gpg-sign परिवर्तन (जो कि Linux पर कोई समस्या नहीं पेश करता है) उस तरह की समस्या को उजागर करता है जिसमें, Windows पर, MSYS2-gpg के साथ गैर-MSYS2-git सहभागिता करता है।


मूल उत्तर:

" 7.4 Git Tools - अपने काम पर हस्ताक्षर करना " पढ़ना , मुझे लगता है कि आपके पास आपका "user.signingkey कॉन्फ़िगरेशन सेट है।

Gpg के आसपास (Git 2.10 से पहले) आखिरी बड़ा रीफैक्टरिंग 2f47eae2a के लिए किया गया था , यहाँ उस त्रुटि संदेश को स्थानांतरित कर दिया गया थाgpg-interface.c

उस फ़ाइल पर लॉग ऑन करें af2b21e (Git 2.10) में हाल के परिवर्तन का पता चलता है

gpg2 पहले ही डिफ़ॉल्ट रूप से लंबे प्रारूप का उपयोग करता है, लेकिन अधिकांश वितरण अभी भी लगता है कि "gpg" संगतता कारणों के कारण पुराना 1.x संस्करण है। और gpg के पुराने संस्करणों में केवल 32-बिट शॉर्ट आईडी दिखाई देती है, जो काफी असुरक्षित है।

यह वास्तव में सत्यापन के लिए ही मायने नहीं रखता है: यदि सत्यापन गुजरता है, तो pgp हस्ताक्षर अच्छा है।
लेकिन अगर आपके पास वास्तव में कुंजी अभी तक नहीं है, और इसे लाना चाहते हैं, या आप वास्तव में जाँचना चाहते हैं कि सत्यापन के लिए किस कुंजी का उपयोग किया गया था और इसे जाँचना चाहते हैं, तो हमें अधिक सटीकता के साथ कुंजी को निर्दिष्ट करना चाहिए।

इसलिए देखें कि आपने अपने user.signingkeyकॉन्फ़िगरेशन को कैसे निर्दिष्ट किया है, और gpg का संस्करण जो आप उपयोग कर रहे हैं (gpg1 या gpg2), यह देखने के लिए कि क्या उन पर त्रुटि संदेश का कोई प्रभाव है।

0581b54 भी है जो gpg failed to sign the dataत्रुटि संदेश के लिए स्थिति को बदलता है ( 0d2b664 के पूरक में ):

हम सभी वर्तमान में stderr से नहीं पढ़ते हैं। हालांकि, हम एक भविष्य पैच में करना चाहते हैं तो यह भी तैयार करता है हमें वहाँ (और उस मामले GPG में करता है इनपुट के सभी पढ़ने, हालांकि फिर से पहले लिखने, यह संभावना नहीं है कि एक प्रमुख uid एक पाइप बफर भर जाएगा है)।

प्रतिबद्ध 4322353 से पता चलता है कि अब gpg एक अस्थायी फ़ाइल का उपयोग करता है, इसलिए इसके आसपास सही मुद्दे हो सकते हैं।

आइए एक टेम्परेरी ऑब्जेक्ट का उपयोग करके परिवर्तित करें, जो हमारे लिए कठिन मामलों को संभालता है, और लापता सफाई कॉल को जोड़ता है।


मेरा user.signingkeyकॉन्फिग सेट है। भी उपयोग कर रहा है gpg (GnuPG) 2.0.3
नमन

@nullpointer मैंने अपना उत्तर संपादित किया है। क्या आप जाँच सकते हैं कि क्या समस्या विंडोज 2.10.1 के लिए Gti के साथ बनी हुई है।
VonC

देर से अपडेट के लिए खेद है, MacOSX विंडोज पर काम कर रहा है तो यह सत्यापित नहीं कर सका।
नमन

10

Git ट्रेस मेरी स्थिति के लिए बहुत खुलासा कर रहा था ...

   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

मुझे उस प्रारूप के प्रति एक प्रारंभिक कुंजी उत्पन्न करने की आवश्यकता gitथी, जिसके खिलाफ जाँच हो रही थी। -bsauनीचे दिए गए लॉग्स में ऊपर दिए गए मान को कॉपी करना और उसका उपयोग करना सबसे अच्छा है ।

तो यह बन जाता है,

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

फिर काम हुआ।

उम्मीद है की वो मदद करदे।


यह मेरे लिए काम किया और git traceवास्तव में मददगार था।
फिलीप ओघेनारोबो बालगुन

1
दोस्त ... आप यह नहीं सोच सकते कि मैंने आपके उत्तर तक पहुंचने में कितने घंटे लगा दिए, जब तक मैं आपके उत्तर तक नहीं पहुँच पाया ... यह कुंजी का नामकरण था .. धन्यवाद! धन्यवाद! धन्यवाद!
जियोमांडा

8

साइबरविन का उपयोग करते हुए, मैंने हाल ही में स्विच किया gpg2। तब मुझे सेटिंग के बाद गिट के साथ साइन करने के लिए एक ही समस्या थी git config gpg.program gpg2

echo "test" | gpg2 --clearsignयह देखने की कोशिश करें कि क्या gpg2 काम कर रहा है। मैंने इसे सिर्फ सेट करने का सबसे आसान समाधान पाया git config gpg.program gpg, क्योंकि यह काम करता है। लेकिन आपको इस तरह से एक बेहतर त्रुटि भी मिलेगी - उदाहरण के लिए आपको पिनेंट्री स्थापित करने की आवश्यकता है।


दरअसल, कुछ लिनक्स डिस्ट्रोस पर आप एक ही मुद्दे के साथ समाप्त हो सकते हैं। Git हमेशा gpg का उपयोग करता है, gpg2 का नहीं। इन्हें भी देखें: stackoverflow.com/questions/34766123/…
गलीचा

यह मेरे लिए त्रुटि से पता चला है gpg: signing failed: Inappropriate ioctl for deviceजिसे हल किया जा सकता है export GPG_TTY=$(tty)। स्रोत: github.com/keybase/keybase-issues/issues/2798
swiknaba

8

OS X पर, gnupg2काढ़ा का उपयोग करके मुझे सिर्फ gpg एजेंट को मारना था , कभी-कभी होता है:

pkill -9 gpg-agent

और envचर सेट अगर जरूरत है:

export GPG_TTY=$(tty)

कॉमन GPG की समस्याओं को भी देखें और यहाँ भी इसका उत्तर दें।


2
यह मेरे लिए भी काम किया। मैंने एक नया उपनाम बनाया है alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'
oalders

1
यह ठीक काम करता है, धन्यवाद। इसके बाद env वैरिएबल सेट करने की आवश्यकता नहीं थी।
निक राम्यू

7

मैंने इसी तरह के जवाब देखे हैं, लेकिन मेरे लिए काम करने जैसा कुछ भी नहीं है। लिनक्स पर, मुझे अपने gpg-agentसाथ मारना और पुनः आरंभ करना था :

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

इसने मेरे लिए चाल चली। ऐसा लगता है कि आपको user.signingkeyअपनी निजी कुंजी सेट करने की आवश्यकता है और साथ ही कुछ अन्य टिप्पणियां क्या कह रही हैं।

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


6

मुझे यह त्रुटि Ubuntu 18.04 पर मिली और यह पता चला कि मेरी कुंजी समाप्त हो गई थी

यह देखने के लिए, मैंने इसे चलाया और यह पुष्टि की कि मेरी चाबियां समाप्त हो गई थीं:

gpg --list-keys

इसे ठीक करने के लिए, मैं भागा (पिछली कमांड में प्रदर्शित आईडी का उपयोग करके):

gpg --edit-key <ID>

वहां से, मैंने इन निर्देशों का समय सीमा समाप्त करने key 0और key 1पालन ​​करने के लिए बढ़ाया, जो टाइप करने के लिए और फिर संकेतों का पालन करने के लिए उबला हुआ था । फिर दोहरा रहे हैं ।key 0expirekey 1

बाद में, यह परीक्षण करने के लिए, मैं भाग गया:

echo test | gpg --clearsign

और ठीक होने से पहले, यह त्रुटि के साथ विफल हो गया:

gpg: कोई डिफ़ॉल्ट गुप्त कुंजी: कोई गुप्त कुंजी नहीं
gpg: [स्टड]: स्पष्ट-संकेत विफल: कोई गुप्त कुंजी नहीं

लेकिन तय होने के बाद, उसी कमांड ने सफलतापूर्वक संदेश पर हस्ताक्षर किए ताकि मुझे पता था कि चीजें फिर से काम कर रही हैं!


मैक ओएसएक्स कैटालिना से सेंटोस 7 तक एक वैध कुंजी आयात करते समय इस बात की पुष्टि करना। इस जानवर के साथ दो घंटे से अधिक समय तक यह जानने की कोशिश की गई कि यह अन्य चीजों के बीच पासवर्ड क्यों पूछ रहा है। अजीब तरह से यह पहले से ही समाप्त होने के लिए कभी भी सेट नहीं किया गया था, और मैंने इसे अभी भी कभी भी समाप्त नहीं होने दिया।
कोडी बी

5

मैं एक समस्या मे फंस गया। मुझे यह बताते हुए खुशी हो रही है कि यह मुद्दा साथ नहीं git 2.10.0बल्कि साथ हैgnupg 1.4.21

अस्थायी रूप से gnupg को 1.4.20 पर अपग्रेड करने ने मेरे लिए समस्या को ठीक कर दिया।

यदि आप होमब्रे का उपयोग कर रहे हैं और आपने अपने पैकेजों को अपग्रेड किया है जैसे मैंने किया, तो आप शायद brew switch gnupg 1.4.20वापस लौट सकते हैं।


3

सुनिश्चित करें कि आपके पास अपना ईमेल सेट ठीक से है।

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

1
यह एकमात्र समाधान है जो मेरे लिए काम करता है, जीथब के
नाज़

1
मेरे मामले में समस्या यह थी कि मैं एक विशिष्ट रेपो में एक कंपनी ई-मेल का उपयोग कर रहा था, जिसके लिए मेरे पास पीजीपी कुंजी नहीं थी।
rubick

3

यदि आपकी GPG कुंजी के यूआईडी के लिए ईमेल आपके द्वारा git में उपयोग किए जा रहे ईमेल से भिन्न है, तो आपको अपनी कुंजी में किसी अन्य उपयोगकर्ता आईडी को जोड़ना होगा या एक कुंजी का उपयोग करना होगा जो ईमेल से बिल्कुल मेल खाता हो।

आप उपयोग करके एक और UID जोड़ सकते हैं:

$ gpg --edit- कुंजी

मो के लिए देखें /superuser/293184/one-gnupg-pgp-key-pair-two-emails


1
यह मेरे लिए था। मसीह, "डेटा पर हस्ताक्षर करने में विफल" की तुलना में अधिक जानकारीपूर्ण त्रुटि संदेश कैसे नहीं है।
एलेक

3

मैं गलती से किसी न किसी तरह से gpg को अपडेट कर चुका होगा क्योंकि मुझे यह परीक्षण करने की कोशिश के बाद मिला है अगर gpg काम करता है:

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.

दौड़ना gpgconf --kill allमेरे लिए तय है।

आशा है कि यह किसी की मदद करता है।


2

मेरे पास सभी समान निर्भरता (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, आदि) के नवीनतम स्रोतों के साथ निर्मित नवीनतम Git स्रोतों (2.12.2) के साथ एक समान मुद्दा था।

यह पता चला है libreadlineकि GnuPG समस्याएं दे रहा था:

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

और हां, Git से उपयोगी जानकारी प्राप्त करने की कोशिश कर रहा है -vvv असफल रही, इसलिए असफलता एक रहस्य थी।

ReadLine के कारण PGP विफलता को हल करने के लिए, पैकेज प्रबंधक - gpg त्रुटि का अद्यतन या उपयोग करने के निर्देशों का पालन न करें :

टर्मिनल में:

ls /usr/local/lib

वहाँ (libreadline.so.BLAH-BLAH) में रीड लिब का एक गुच्छा था इसलिए:

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

2

ऊपर दिए गए उत्तर बहुत अच्छे हैं लेकिन उन्होंने मेरे लिए काम नहीं किया। मेरी समस्या का हल सार्वजनिक और गुप्त कुंजी दोनों को निर्यात कर रहा था ।

मशीन से कुंजियाँ सूचीबद्ध करें जहाँ से हम निर्यात कर रहे हैं

$ 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

कुंजी निर्यात करें

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

मशीन पर जाएँ हम आयात कर रहे हैं और आयात कर रहे हैं

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

बिंगो बोंगो, आप कर रहे हैं!

संदर्भ: https://www.debuntu.org/how-to-importexport-gpg-key-pair/

ps। मेरी चाबियाँ मूल रूप से बूटकैंप विंडोज़ 7 पर बनाई गई थीं और मैंने उन्हें अपने मैक एयर (समान भौतिक मशीन, अलग-अलग) पर निर्यात किया था


2

मैं उबंटू 18.04 पर हूं और एक ही त्रुटि हुई, हफ्तों तक भी चिंतित था। अंत में एहसास हुआ कि gpg2 किसी भी चीज़ की ओर इशारा नहीं कर रहा है। तो बस दौड़ो

git config --global gpg.program gpg

और टाडा, यह आकर्षण की तरह काम करता है।

हस्ताक्षर किए

आपके कमिट में अब उनके साथ सत्यापित टैग होगा।


2

मैं किसी भी कॉन्फ़िगरेशन समस्या के कारण इस त्रुटि पर ठोकर खाई, लेकिन क्योंकि मेरी कुंजी समाप्त हो गई थी। OSX पर इसकी वैधता को बढ़ाने का सबसे आसान तरीका है कि आप GPG कीचेन ऐप खोलें (यदि आपने इसे स्थापित किया है) और यह स्वचालित रूप से आपको इसे विस्तारित करने के लिए संकेत देगा। दो क्लिक, और आप कर रहे हैं। उम्मीद है कि यह मदद करता है साथी Googlers :)


2

यह उबंटू पर मेरे लिए अचानक होने लगा, यकीन नहीं होता कि हाल ही में कुछ अपडेट किया गया था, लेकिन मौजूदा मुद्दों में से कोई भी मेरे लिए लागू नहीं था (मैंने GPG_TTYसेट किया था , एजेंट को मारने की कोशिश की आदि)। gpgइस त्रुटि के साथ स्टैंडअलोन कमांड विफल हो रही थी:

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

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

मैंने विकल्प के gpgसाथ चलने की कोशिश की --debug-allऔर नीचे दिए गए आउटपुट पर ध्यान दिया:

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

उपरोक्त इंगित करता है कि pinentryकार्यक्रम के साथ कुछ समस्या है । Gpg सामान्य रूप से pinentry-cursesमेरे लिए चलता है, इसलिए मैंने इसे बदल दिया pinentry-tty(मुझे aptitude installपहले यह करना पड़ा ) और त्रुटि चली गई (हालांकि मुझे अब फुलस्क्रीन पासवर्ड प्रविष्टि नहीं मिली है, लेकिन मुझे वैसे भी पसंद नहीं है)। इस परिवर्तन को करने के लिए, मुझे एजेंट pinentry-program /usr/bin/pinentry-ttyको लाइन में जोड़ना होगा ~/.gnupg/gpg-agent.confऔर एजेंट को मारना होगा gpgconf --kill gpg-agent(यह अगली बार पुनः आरंभ होता है)।


1

उपरोक्त कोई भी उत्तर मेरी समस्या से मेल नहीं खाता था। मेरे gpgबाइनरी ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) को काढ़ा के बजाय जीपीजी सूट के हिस्से के रूप में स्थापित किया गया था ।

फिर भी, मुझे लगा कि सलाह उबली हुई है: "जो भी gpgद्विआधारी काढ़ा पर उपलब्ध नवीनतम है " का उपयोग करें । इसलिए मैंने कोशिश की:

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

मैंने सत्यापित किया कि मैंने सही ढंग से gpgअपने $PATHको काढ़ा से नए निष्पादन योग्य बिंदु पर बदल दिया है :

🍔 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

और मैंने यह भी स्पष्ट रूप से बताया कि कौन सा gpgबाइनरी उपयोग करने के लिए है:

git config --global gpg.program gpg

खैर, शायद यह पूरी तरह से निर्विवाद नहीं है, क्योंकि यह पथ के प्रति संवेदनशील है। मैं वास्तव में संदेह से परे की पुष्टि के रूप में दूर नहीं गया था कि गिट ने शराब बनाने के लिए स्विच किया था gpg

किसी भी मामले में: इनमें से कोई भी git commitमेरे कमिट को फिर से सफलतापूर्वक साइन करने के लिए पर्याप्त नहीं था ।


मेरे लिए आखिरकार काम करने वाली चीज जीपीजी सूट को अपडेट करना था । मैं संस्करण 2016.7 चला रहा था, और मैंने पाया कि 2016.10 को अपडेट करने से मेरे लिए समस्या ठीक हो गई।

मैंने खोला GPG Keychain.app, और "अपडेट की जांच करें ..." मारा। नए संस्करण के साथ: हस्ताक्षरित कमिट्स ने फिर से सही ढंग से काम किया।


मैंने नवीनतम संस्करण में अपडेट करने की कोशिश की ... जो या तो काम नहीं किया। Xcode में साइन इन करने की कोशिश कर रहा है।
अल्बर्ट टी। वोंग


1

बहुत कुछ @birchlabs की तरह, बहुत खुदाई / खोज के बाद मैंने पाया कि यह GPG नहीं था, बल्कि GPG सूट था। मैंने किया cask reinstall gpg-suiteऔर इसने मेरे लिए इसे हल किया।


0

यदि यह सिर्फ अनियमित रूप से हुआ है और अतीत में पूरी तरह से काम कर रहा है, जैसा कि मेरा मामला है, तो लॉग आउट करने की कोशिश करें ( cmd+shift+q) और वापस अंदर प्रवेश करें। मेरे लिए काम किया।


0

मेरे मामले में, अन्य उत्तर में वर्णित किसी भी समाधान ने काम नहीं किया। मुझे पता चला कि समस्या एक रिपॉजिटरी के लिए विशिष्ट थी। रेपो को हटाने और क्लोन करने से समस्या फिर से हल हो गई।


0

एक अजीब तरह का, लेकिन सुनिश्चित करें कि आपका टर्मिनल काफी बड़ा है! आप बता सकते हैं कि क्या यह चलाने से बहुत छोटा हैecho test | gpg --clearsign - यह आपको एक बहुत स्पष्ट त्रुटि संदेश देगा, जिससे आपको पता चलेगा। यदि यह पर्याप्त बड़ा नहीं है, तो आपका GPG एजेंट अपने छोटे ncurses बॉक्स को प्रदर्शित नहीं कर सकता है।

यदि आप GUI एजेंट या ऐसी किसी चीज़ का उपयोग करते हैं जो ncurses का उपयोग नहीं करती है तो यह लागू नहीं होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.