ข้อผิดพลาด Git - gpg ไม่สามารถลงชื่อข้อมูลได้


149

ฉันเพิ่งเริ่มใช้ git และติดตั้ง git และ gpg ผ่าน homebrew ด้วยเหตุผลบางอย่างฉันได้รับข้อผิดพลาดนี้เมื่อgit commit ฉันดูคำถาม stackoverflow อื่น ๆ อีกมากมายเกี่ยวกับหัวข้อนี้ ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไรเพื่อให้ฉันสามารถอัปโหลดได้สำเร็จ

error: gpg failed to sign the data
fatal: failed to write commit object

3
สำหรับผู้ใช้ Mac ฉันมีปัญหานี้ คำแนะนำในหน้านี้ช่วยให้ฉันรู้ว่าฉันอาจมี gpg สองเวอร์ชันติดตั้งอยู่และฉันก็ทำได้ หนึ่งจาก Brew และอีกหนึ่งจาก GPG Suite ฉันต้องการใช้ GPG Suite หนึ่งเพราะมันอนุญาตให้แคชข้อความรหัสผ่านในระบบพวงกุญแจ การถอนการติดตั้งเวอร์ชันชงแก้ไขปัญหาของฉัน พร้อมด้วยคำตอบ @ sideshowbarker เกี่ยวกับการฆ่า gpg-agent ดังนั้นฉันคิดว่าการกำหนดค่าของแต่ละคนรบกวนซึ่งกันและกัน
Michael Welch


สำเนาซ้ำซ้อนที่เป็นไปได้ของstackoverflow.com/questions/41502146/…
Dr Beco

ฉันเพิ่งพบปัญหากับการลงนาม gpg ปัญหาคือว่า repo คอมไพล์ของฉันไม่มีชุด gpg.signingkey ในท้องถิ่น ดังนั้นเพียงแค่ตั้งรหัสgit config --local user.signingkeyที่ถูกต้องและมันจะลงทะเบียนอัตโนมัติอีกครั้ง และอาจยกเลิกการตั้งค่าระดับโลกด้วยgit config --global --unset user.signingkey
MarcusJ

คำตอบ:


210

สำหรับการแก้ไขปัญหาลองทำสองสิ่งแรก:

  • เรียกใช้git config --global gpg.program gpg2เพื่อให้แน่ใจว่า git ใช้gpg2และไม่gpg
  • เรียกใช้echo "test" | gpg2 --clearsignเพื่อให้แน่ใจว่าgpg2ตัวเองกำลังทำงาน

หากสิ่งนั้นดูดีแล้วสิ่งต่อไปที่ต้องลอง:

  • เรียกใช้brew install pinentryเพื่อให้แน่ใจว่าคุณมีเครื่องมือที่ดีติดตั้งสำหรับรายการวลีรหัสผ่าน

หากหลังจากนั้นคุณจะลองใหม่อีกครั้งgit commitและยังคงได้รับfailed to sign the dataข้อผิดพลาด "":

  • รันgpgconf --kill gpg-agentเพื่อฆ่าเอเจนต์ที่รันอยู่ที่อาจหยุดทำงาน

หากข้อความนั้นgpgconfไม่ได้รับการติดตั้งหรือไม่มี--killตัวเลือกคุณอาจลองทำสิ่งนี้:

  1. cp ~/.gnupg ~/.gnupg-GOODเพื่อบันทึกสำเนาของคุณ~/.gnupgเพื่อเปลี่ยนกลับเป็นภายหลังหากจำเป็น
  2. brew install gnupg21 เพื่อติดตั้ง GnuPG 2.1

เหตุผลในการบันทึกสำเนาของ~/.gnupgdir ของคุณก็คือ GnuPG 2.1 อาจสร้าง / เปลี่ยนแปลงข้อมูลสำคัญบางอย่างในลักษณะที่ไม่เข้ากันได้กับ GnuPG 2.0 และรุ่นก่อนหน้าดังนั้นหากคุณต้องการย้อนกลับไปในภายหลังคุณสามารถทำได้mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupgคุณต้องการที่จะกลับไปต่อมาที่คุณสามารถทำได้


มิฉะนั้นจะมีขั้นตอนพื้นฐานในการเรียกใช้เพื่อตรวจสอบว่าคุณมีสภาพแวดล้อม GnuPG ที่ใช้งานได้:

  • เรียกใช้gpg2 -K --keyid-format SHORTเพื่อตรวจสอบว่าคุณมีคู่คีย์อย่างน้อยหนึ่งคู่

หากผลลัพธ์ที่แสดงให้เห็นว่าคุณไม่มีรหัสลับสำหรับ GnuPG ที่จะใช้คุณต้องสร้างขึ้นใหม่:

  • วิ่งgpg2 --gen-keyเพื่อให้ GnuPG แนะนำคุณผ่านขั้นตอนในการสร้างคู่กุญแจ

หากคุณได้รับข้อความแสดงข้อผิดพลาดว่า“ ไม่เหมาะสมกับ ioctl สำหรับอุปกรณ์”ให้ทำดังนี้

  • เรียกใช้export GPG_TTY=$(tty)และ / หรือเพิ่มลงในของคุณ~/.bashrcหรือ˜/.bash_profile

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันเรียกใช้คำสั่งที่สอง: gpg: ไม่มีรหัสลับเริ่มต้น: ไม่มีรหัสลับ gpg: [stdin]: clearsign ล้มเหลว: ไม่มีรหัสลับ
สิทธิ์

@ ป้องกันไม่ให้ดูเหมือนว่า gpg จะไม่คิดว่าคุณมีกุญแจที่จะใช้ในการเซ็นชื่อ ดูขั้นตอนเพิ่มเติมที่ฉันเพิ่มในคำตอบ หากคุณไม่เคยวิ่งgpg2 --gen-keyมาก่อนนั่นเป็นสิ่งที่คุณต้องทำก่อน
sideshowbarker

2
เมื่อฉันเรียกใช้ echo "test" | gpg2 - เคลียร์มันให้ฉัน: gpg-agent [-]: คำสั่ง get_passphrase ล้มเหลว: ioctl ที่ไม่เหมาะสมสำหรับอุปกรณ์ gpg: ปัญหากับตัวแทน: ioctl ที่ไม่เหมาะสมสำหรับอุปกรณ์ gpg: ไม่มีคีย์ลับเริ่มต้น: การดำเนินการยกเลิก gpg: [stdin]: การล้างข้อมูลล้มเหลว: การดำเนินการถูกยกเลิก ฉันพยายามเป็นไปได้อื่น ๆ อีกมากมาย แต่ไม่มีงาน มีวิธีใช้ GIT ที่ไม่มี GPG หรือไม่!
สิทธิ์

9
export GPG_TTY=$(tty)คุณอาจลอง ตราบใดที่มีวิธีการใช้ git โดยไม่ต้อง gpg คุณควรจะทำเช่นนั้นได้โดยค่าเริ่มต้นหรืออย่างอื่นเพียงแค่วิ่งgit config --global commit.gpgsign falseไปที่การตั้งค่าการลงนาม gpg ทั่วโลกของคุณ
sideshowbarker

10
ที่นี่ใน Mac OS X ฉันเริ่มตรวจแก้จุดบกพร่องecho "test" | gpg2 --clearsignพบข้อผิดพลาดและนำฉันไปยังเธรดนี้ซึ่งแก้ไขปัญหาของฉัน: ฉันเพิ่งใส่ไฟล์export GPG_TTY=$(tty)ของฉัน˜/.bash_profileแล้วโหลดใหม่อีกครั้งด้วยsource ˜/.bash_profile
herrera

71

Git จำเป็นต้องทราบว่ามีการเซ็นกุญแจใด

หลังจากคุณตั้งค่า GPG, gpg-agent และไฟล์ gpg.conf ของคุณ (ดูคู่มือนี้ ) คุณจะต้องเรียกใช้

git config --global user.signingkey EB11C755

เห็นได้ชัดว่าแทนที่กุญแจสาธารณะในตอนท้ายด้วยตัวคุณเอง หากคุณต้องการให้ทุกการกระทำที่จะลงนามโดยค่าเริ่มต้นใช้

git config --global commit.gpgsign true

7
ฉันเพิ่งพบปัญหานี้ในกรณีที่คนอื่นโง่พอที่จะทำสิ่งที่ฉันทำ: ตรวจสอบให้แน่ใจว่าคุณสะกดชื่อ
ZNK

1
แท้จริงความคิดเห็นนี้โดย @ZNK ทำเพื่อฉัน ฉันสะกดมันว่า "signkey" แทนที่จะเป็น "signkey"
249

1
คำตอบที่ได้รับการยอมรับควรกล่าวถึงว่านี่เป็นขั้นตอนการแก้ไขปัญหาแรกเพราะบางครั้งคุณมีกุญแจทั้งหมดอยู่แล้วมันก็แค่ลืมคีย์ที่จะใช้
f055

41

ยังไงก็เถอะ git ของคุณถูกกำหนดให้ลงชื่อใน GPG ทุกการกระทำ การลงชื่อด้วย GPG ไม่จำเป็นต้องกระทำหรือผลักดันโดยใช้คอมไพล์ เป็นไปได้ที่จะให้ข้อผิดพลาดเนื่องจากกลไกการลงนาม gpg ของคุณยังไม่ได้กำหนดค่า

หากคุณยังใหม่กับ git ให้ลองใช้งานได้ก่อนโดยไม่ต้องลงชื่อ GPG ก่อนแล้วเพิ่มการลงชื่อเข้าใช้ในภายหลังหากคุณต้องการจริงๆ

คุณสามารถตรวจสอบว่าการตั้งค่าคอมไพล์ของคุณเกี่ยวกับ gpg ได้อย่างไร:

git config -l | grep gpg

ซึ่งอาจสร้างเส้นศูนย์หรือมากกว่านั้นรวมไปถึง:

commit.gpgsign=true

หาก "commit.gpgsign" เป็นจริงแสดงว่าคุณเปิดใช้งานการเซ็นชื่อ gpg แล้ว ปิดใช้งานด้วย:

git config --global --unset commit.gpgsign

จากนั้นลองเรียกใช้การกระทำของคุณอีกครั้ง ตอนนี้มันควรจะทำงานโดยไม่ต้องลงชื่อ gpg หลังจากที่คุณใช้งานคอมไพล์พื้นฐานได้แล้วคุณควรลองเพิ่ม gpg การเซ็นชื่อกลับไปที่มิกซ์


12
! น่ากลัว git config --global --unset commit.gpgsignทำงานให้ฉัน :)
hpaknia

ว้าว!! มันใช้งานได้สำหรับฉัน: git config - global --unset commit.gpgsign
Hardy Mathew

32

อ้างถึง @sideshowbarker และโซลูชัน @Xavier Ho ฉันแก้ไขปัญหาของฉันผ่านขั้นตอนต่อไปนี้

สมมติว่า gpg2 ติดตั้งโดยชง

git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key

gpg2 -K --keyid-format SHORT 

           

... /. GnuPG / pubring.gpg

วินาที rsa2048 / 0A61C6FC 2017-06-29 [SC] [หมดอายุ: 2019-06-29]

git config --global user.signingkey 0A61C6FC

เพื่อนร่วมงานของฉันถูกเตือนให้จำต้องผนวกเข้าด้วยกัน

export GPG_TTY=$(tty)

เป็น ~ / .zshrc หากใช้ zsh มิฉะนั้นจะผนวกกับ ~ / .bash_profile


สำหรับ macOS

gpg2 รวมกับ gpg ในการชงและด้วยเหตุนี้คำสั่ง gpg จะชี้ไปที่ gpg2

brew install gpg2

ข้อมูลชง gpg

gnupg: เสถียร 2.2.6 (บรรจุขวด)

git config --global gpg.program gpg
gpg -K --keyid-format SHORT 

และมี pinentry-mac สำหรับรายการข้อความรหัสผ่าน

brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf

เพิ่มบรรทัด

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

เพื่อนร่วมงานของฉันถูกเตือนให้จำต้องผนวกเข้าด้วยกัน

export GPG_TTY=$(tty)

เป็น ~ / .zshrc หากใช้ zsh มิฉะนั้นจะผนวกกับ ~ / .bash_profile


1
macOS 10.15 (Catalina) มาพร้อมกับ GnuPG เวอร์ชัน 2.2.17 ดังนั้นจึงไม่จำเป็นต้องติดตั้งแยกต่างหากเว้นแต่ว่าคุณวางแผนจัดการอัปเดตด้วยตัวเอง
Josh Habdas

18

ฉันใช้มัน มันรองรับ zsha และทำงานบน Windows Subsystem สำหรับ Linux:

export GPG_TTY=$(tty)

2
ฉันใช้ zsh กับ MacOS Catalina และนี่เป็นการเปลี่ยนแปลงเดียวที่ฉันต้องการเพื่อให้มันใช้งานได้ ขอบคุณ
JP Lew

ฉันได้รับข้อผิดพลาดใน OP หลังจากคัดลอกคีย์ไปยังสภาพแวดล้อม WSL ของฉันปรากฎว่าฉันต้องทำสิ่งนี้เพื่อให้พรอมต์สำหรับข้อความรหัสผ่านบนคีย์ ขอบคุณ
narwic

10

ตรวจสอบว่าคีย์ของคุณหมดอายุ เมื่อคุณแก้ไขวันหมดอายุ (ไม่จำเป็นต้องสร้างรหัสใหม่ยกเว้นคุณต้องการ) gitจะทำงานได้ตามปกติ

วิธีหนึ่งในการแก้ไขรหัสหมดอายุ:

(หมายเหตุ: $แสดงถึงพรอมต์บรรทัดคำสั่งพิมพ์คำสั่งหลังจากพรอมต์กด Enter หลังจากแต่ละคำสั่ง)

$ gpg2 --list-keysเพื่อหากุญแจ ID เหมาะสม (อักขระ\บนpubบรรทัด)

$ gpg2 --edit-key <key id> - สิ่งนี้จะเปิดเชลล์ gpg โดยเปลี่ยนเป็นพร้อมต์ gpg>

gpg> expire - ทำตามคำแนะนำเพื่อตั้งวันที่หมดอายุใหม่สำหรับคีย์หลัก

ถัดไปหากมีคีย์ย่อยที่หมดอายุ ( subแสดงบนบรรทัด) ให้รีเซ็ตวันที่หมดอายุเช่นกัน:

gpg> key 1- เลือกคีย์ย่อยแรก gpg> expire- ทำตามคำแนะนำเพื่อตั้งวันที่หมดอายุใหม่สำหรับคีย์ย่อย

ทำซ้ำสำหรับแต่ละคีย์ย่อยที่ตามมาตามต้องการ


ฉันมีปัญหานี้ทุกครั้งที่ฉันพยายามเรียกใช้คีย์ gpg ที่ไม่มีวันหมดอายุ ด้วยเหตุผลบางอย่างคอมไพล์ไม่ชอบสิ่งนั้น การใช้วิธีการนี้เพื่อเพิ่มวันหมดอายุ (ไม่ว่าในอนาคตจะมีวิธีไกลแค่ไหน) ในการแก้ปัญหา
some_guy632

อย่าลืมพิมพ์saveที่พรอมต์ gpg เมื่อเสร็จแล้ว!
daviewales

5

สิ่งนี้ใช้ได้กับฉันใน Ubuntu 18.04

ตรวจสอบรหัส gpg ของคุณ

gpg -K --keyid-format LONG

หากคุณได้รับการตอบกลับเปล่าให้สร้างคีย์ GPG

gpg --generate-key

รันคำสั่งแรกอีกครั้งคุณควรได้ผลลัพธ์เป็น:

sec   rsa3072/95A854E0593B3214 2019-05-06 [SC] [expires: 2021-05-05]
      AF2F7514568DC26B0EB97B9595A854E0593B74D8
uid                 [ultimate] yourname<your_email>
ssb   rsa3072/EFD326E6C611117C 2019-05-06 [E] [expires: 2021-05-05]

ตั้งค่าคีย์การร้องเพลง git

git config --global user.singingkey 95A854E0593B3214

ถ้างั้นคุณก็ไปดี! (--Global เป็นตัวเลือก)

หรือถ้าคุณไม่รังเกียจที่จะเซ็นชื่อด้วยคีย์ ssh ของคุณ

git config commit.gpgsign false

โปรดทราบว่านี่ไม่แนะนำเนื่องจากปัญหาด้านความปลอดภัยตามคำถามนี้ที่นี่และที่นี่


"หรือถ้าคุณไม่รังเกียจที่จะเซ็นชื่อด้วยคีย์ ssh" ssh เกี่ยวข้องกับการเซ็นชื่ออะไร?
ชั้นตำ

SSH ไม่มีส่วนเกี่ยวข้องกับการลงนามในสัญญา พวกเขากำลังอ้างถึงการปิด GPG กระทำการลงนามและขึ้นอยู่กับการใช้คีย์ SSH เพื่อตรวจสอบเมื่อคุณผลักดันการกระทำของคุณไปยังเซิร์ฟเวอร์คอมไพล์ คุณสามารถผลักดัน (และเป็นเรื่องปกติมาก) เพื่อส่งการคอมมิทที่ไม่ได้ลงชื่อโดยใช้การพิสูจน์ตัวตน SSH
phouse512

4

ฉันต้องแก้ไข gpg.program ไปยังพา ธ สัมบูรณ์ไปยัง gpg:

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

ฉันใช้ Windows กับ cygwin


3
นี่คือทางออกสำหรับฉัน ฉันติดตั้ง gnupg โดยใช้ chocolatey แล้ว
Alex S

ขอบคุณทำงานให้ฉันด้วย ฉันทำไปแล้วchoco install gpg4win
Gokul NC

4

สารละลาย:

Issue: Disabled loopback pinentry mode

ในการแก้ปัญหาคุณต้องเปิดใช้งานโหมด pinback pin วนใน~ / .gnupg / gpg.conf :

cat <<'EOF' >> ~/.gnupg/gpg.conf

use-agent 
pinentry-mode loopback

EOF

และใน~ / .gnupg / gpg-agent.conf (สร้างไฟล์หากยังไม่มีอยู่):

cat <<'EOF' >> ~/.gnupg/gpg-agent.conf

allow-loopback-pinentry

EOF

จากนั้นรีสตาร์ทเอเจนต์ด้วยecho RELOADAGENT | gpg-connect-agentและคุณควรทำดี!

แหล่ง


1
ว้าวหลังจากใช้เวลาหลายชั่วโมงพยายามแก้ปัญหาที่เป็นไปได้ทั้งหมดนี้ก็ช่วยแก้ไขปัญหาของฉันได้ด้วยขอบคุณ!
Matt

ไม่เป็นไร ขอบคุณแหล่งที่มาจริง ฉันติดอยู่กับเรื่องนี้เช่นกัน
ราหุลธา

3

ข้อผิดพลาดนี้สามารถเกิดขึ้นได้เมื่อคีย์ GPG ของคุณหมดอายุ การสร้างคีย์ใหม่และการเพิ่มลงใน Git ควรแก้ไขปัญหานี้


3

ฉันประสบปัญหานี้หลังจากอัปเกรดเป็น gnupg 2.x มันจะเห็นได้ว่ามีการอ้างอิง gpg2 ปุ่มที่แตกต่างกัน: ฉันยังคงมีsigningkey = ABC98F11(การตั้งค่า gpg v1) ~/.gitconfigในของฉัน ตัวระบุคีย์สำหรับ gpg2 นั้นยาวกว่า ดูพวกเขาด้วยgpg --list-secret-keys


1

ฉันได้ทำgitกุญแจด้วย 3 ปุ่มแยกสำหรับcertify/ sign/ encryptและกุญแจที่แสดงว่าหมดอายุในอนาคต (หลังจากทำงานได้ดีสองสามวัน):

pub   rsa4096/4CD1E9DA 2017-04-26 [C] [expired: 2017-04-28]
      Key fingerprint = 4670 59C1 7592 08B8 7FA5  313B 2A42 B6A6 4CD1 E9DA
uid         [ expired] Stuart Cardall (GIT Development Keys) <xxxxxx>
sub   rsa4096/5195E715 2017-04-26 [E] [expired: 2019-04-26]
sub   rsa4096/DB74C297 2017-04-26 [S] [expired: 2019-04-26]
sub   rsa2048/A3913A3C 2017-04-28 [] [expired: never     ]

สร้างคีย์ใหม่โดยไม่ต้องเพิ่มคีย์ย่อยแยกต่างหากเพื่อแก้ปัญหา


1

อาจจะมีการตั้งค่า Git ของคุณเป็นชุดgpgsign = true ลองตั้งค่าเป็นเท็จถ้าคุณไม่ต้องการให้สัญญาของคุณ ไปที่โฟลเดอร์ที่เก็บของคุณและเปลี่ยนไฟล์

นาโน. git / config

จากนี้...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = true

สำหรับสิ่งนี้...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false

1

สำหรับฉันข้อผิดพลาดนี้เริ่มเกิดขึ้นกับgit tag -sDebian GNU / Linux เมื่อฉันเปลี่ยนจากpinentry-gnome3เป็นpinentry-curses(ใช้update-alternatives --config pinentry) เพื่อการเข้าถึงระยะไกลที่ง่ายขึ้น มันเกิดขึ้นกับgit tag -sไม่ใช่กับgpg(เช่นgpg --clearsignตัวเองตัวเอง )

การเปลี่ยนแปลงเพียงอย่างเดียวที่จำเป็นเพื่อให้มันทำงานได้อีกครั้งในกรณีนี้คือการเพิ่มลงexport GPG_TTY=$(tty)ในไฟล์เริ่มต้นเชลล์ของฉัน

แม้ว่าฉันจะไม่ได้รับข้อความแสดงข้อผิดพลาด“ ไม่เหมาะสม ioctl สำหรับอุปกรณ์” ที่กล่าวถึงเป็นตัวบ่งชี้สำหรับการแก้ไขนี้ในอีกคำตอบสำหรับคำถามนี้

หมายเหตุ: เนื่องจากสาเหตุของการเกิดข้อผิดพลาดนี้แตกต่างไปจากที่แนะนำไว้export GPG_TTY=$(tty)ก่อนหน้านี้ (โดยปกติจะเป็นคำใบ้ด้านข้าง) ในคำตอบอื่น ๆ สำหรับคำถามนี้ฉันตัดสินใจว่าคำถามนี้ต้องการคำตอบอื่นซึ่งexport GPG_TTY=$(tty)อาจเป็นตัวแก้ไขหลัก สิ่งเดียวที่จำเป็นในบางกรณี


ขอบคุณ! update-alternatives --config pinentryทำเพื่อฉัน ฉันเป็น SSH ลงในเดสก์ท็อปของฉันและpinentryตั้งค่าเป็น/usr/bin/pinentry-gnome3(ซึ่งควรมีทางเลือก TTY เมื่อ SSH ทำในหรือเมื่อเปลี่ยนเป็นคอนโซลเสมือน) แต่มันไม่ทำงาน การตั้งค่าเริ่มต้น/usr/bin/pinentry-ttyเป็นการหลอกลวงสำหรับฉัน ฉันอาจต้องตั้งค่ากลับเมื่อฉันกลับไปที่เดสก์ท็อปของฉัน แต่สำหรับตอนนี้ฉันดี export GPG_TTY=$(tty)ไม่เพียงพอ ฉันทำ แต่จำเป็นต้องสลับpinentryก่อนที่ฉันจะสามารถเซ็นสัญญาได้
Karl Wilbur

1

สิ่งที่แก้ไขได้สำหรับฉันคือทำให้แน่ใจว่าชื่อของคีย์ตรงกับชื่อผู้ใช้ git ของฉัน ฉันถือว่าอีเมลต้องตรงกันด้วย สิ่งนี้อาจเกี่ยวข้องกับฉันโดยใช้ GPG KeyChain บน Mac ของฉัน ไม่แน่ใจ.

ฉันคิดว่าฉันกำลังตั้งชื่อคีย์เมื่อฉันกรอกข้อมูลนี้ แต่ฉันเดาว่ามันกำลังขอชื่อของฉัน (ชื่อผู้ใช้ git)

แบบฟอร์ม GPG Keychain


มันน่าเสียดายที่คำตอบนี้อยู่ไกลเกินกว่าที่หลายคนจะไม่ได้มาที่นี่เพื่อค้นหาปัญหาของพวกเขา
MaciekS

1

ฉันมีข้อผิดพลาดเกี่ยวกับ macos - เพื่อลองและแก้ไขปัญหาฉันลองใช้รายการคีย์เพื่อดูว่าพวกเขาหมดอายุโดยใช้หรือไม่gpg2 --list-keys- ฉันตรวจสอบว่าคีย์นั้นยังไม่หมดอายุและมีการตั้งค่าคีย์ที่เหมาะสมในการตั้งค่าโดยใช้git config --global user.signingkeyฉันสอบว่าปุ่มได้ไม่หมดอายุและที่สำคัญที่เหมาะสมได้รับการตั้งค่าในการตั้งค่าของฉันโดยใช้

หลังจากที่ฉันเรียกใช้คำสั่งเหล่านั้นฉันก็สามารถทำคอมมิทได้อีกครั้งโดยไม่มีปัญหา ฉันไม่ได้เปลี่ยนไฟล์หรือปุ่มปรับแต่ง - ฉันไม่ได้สร้างอินสแตนซ์ Terminal ใหม่ ดูเหมือนว่า gpg2 จะอยู่ในสถานะแปลก ๆ บน mac ของฉัน



0

ข้อผิดพลาดเดียวกันยังสามารถเกิดขึ้นได้เมื่อคุณหมดอายุคีย์ในการกำหนดค่า git ของคุณ

โปรดตรวจสอบเนื้อหาของcat .git/configและมองหาsigningkeyคุณค่าและตรวจสอบว่าหมดอายุหรือไม่ ถ้าใช่อัพเดตด้วยตัวใหม่


0

หากคุณใช้สมาร์ทการ์ด / yubikeyเพื่อจัดเก็บคีย์ GPG ของคุณและคุณตั้งค่าsignkey git โดยคีย์ที่เก็บไว้ในการ์ด (และคำตอบทั้งหมดข้างต้นดูเหมือนจะไม่แก้ไขปัญหาของคุณ) PIN ที่ถูกบล็อกของคุณอาจเป็น สาเหตุของปัญหานี้

วิธีตรวจสอบ PIN ที่ถูกบล็อก:

gpg --card-status

หากเคาน์เตอร์นั้นคล้ายกับ

Reader ...........: Yubico YubiKey
PIN retry counter : 3 0 3

จากนั้น PIN ของคุณจะถูกบล็อก (หลังจากพยายาม 3 ครั้งไม่สำเร็จ)

วิธีปลดบล็อค PIN:

gpg --card-edit
gpg/card> admin
Admin commands are allowed

gpg/card> passwd
gpg: OpenPGP card no. … detected

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? 2
PIN unblocked and new PIN set.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? q

0

สำหรับฉันง่ายๆ brew unintstall gnupg && brew cask reinstall gpg-suiteแก้ปัญหา

มันถอนการติดตั้ง gpg (ในกรณีของฉัน) homebrew-istalled ด้วยตนเองและติดตั้ง GPG Suite ทั้งหมดอีกครั้ง


0

ในกรณีของฉันฉันมีการกำหนดค่า gpg แบบผสมและการกำหนดค่าแบบ smimesign ที่กำหนดในเอกสารการลงนามยอมรับที่นี่: https://help.github.com/th/github/authenticating-to-github/telling-git-about-your-signing- สำคัญ

หลังจากทำงานเป็นเวลาหลายชั่วโมงฉันพบว่าวิธีที่ดีที่สุดในการแก้ไขคือยกเลิกทุกอย่างที่เกี่ยวข้องกับ gpg และกำหนดค่า gpg ใหม่

ดังที่ได้กล่าวไว้ในคำตอบของ @Jason Thrasher ค้นหา git config ทั้งหมดที่เกี่ยวข้องกับ gpg โดยใช้:

git config -l | grep gpg

จากนั้นยกเลิกการตั้งค่าทุกอย่างที่เป็น golablly รวมถึงการใช้งานในเครื่อง:

git config --global --unset <config_name>
git config --local --unset <config_name>

จากนั้นกำหนดค่าใหม่ตามเอกสารทางการที่ระบุด้านบน หวังว่านี่จะช่วยได้


นอกจากนี้ฉันกำลังใช้ gpg2
Shubham Gupta

0

หากคุณเคยติดตั้ง pinentry และ gpg มาก่อนและมันก็หยุดทำงานโดยที่ไม่มีที่ไหนเลย:

ตรวจสอบว่า gpg ของคุณใช้งานได้หรือไม่:

echo "test" | gpg --clearsign

ถ้ามันบอกว่าgpg: signing failed: No pinentryเพียงแค่รีสตาร์ทไคลเอ็นต์ gpg daemon ซึ่งติดค้างเป็นครั้งคราว:

gpgconf --kill gpg-agent

ตอนนี้มันควรจะทำงาน:

echo "test" | gpg --clearsign

0

ในกรณีของฉันข้อผิดพลาดนี้เกิดขึ้นเมื่อทำงานgit commitบนtmuxหน้าต่างเล็ก ๆที่ไม่สามารถใส่ข้อความรหัสผ่านได้

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

test
gpg: signing failed: Screen or window too small
gpg: [stdin]: clear-sign failed: Screen or window too small

-6

นี่จะช่วยคุณกำจัดมัน

git config commit.gpgsign false


1
ฉันไม่เข้าใจการลงคะแนนเสียงมันแก้ไขปัญหาที่เสนอเช่นเสน่ห์สำหรับฉัน
Jms

2
คำสั่งนี้ควรหลีกเลี่ยง มันจะลบข้อกำหนดที่จะลงนามในคอมมิชชันคอมมิชชันไม่แก้ไขปัญหาของการรับรองความถูกต้องของบุคคลที่กำลังทำการคอมมิท
Kyle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.