Git ถามฉันเกี่ยวกับข้อความรหัสผ่านของคีย์ ssh


538

ฉันสร้างคีย์ตามคำแนะนำในการสอน github ลงทะเบียนพวกเขาด้วย gitub และลองใช้ ssh-agent อย่างชัดเจน - แต่ git ยังคงถามรหัสผ่านของฉันทุกครั้งที่ฉันพยายามดึงหรือดัน

อะไรคือสาเหตุ?


เกี่ยวข้อง: stackoverflow.com/questions/14762034/…
Jeff

คำตอบ:


1039

เมื่อคุณเริ่มต้นตัวแทน SSH ด้วย:

eval $(ssh-agent)
  1. คุณต้องเพิ่มรหัสส่วนตัวของคุณ:

    ssh-add
    

    สิ่งนี้จะถามวลีรหัสผ่านของคุณเพียงครั้งเดียวจากนั้นคุณควรได้รับอนุญาตให้กดหากคุณอัปโหลดรหัสสาธารณะไปที่ Github

  2. หากต้องการบันทึกคีย์อย่างถาวรใน macOS:

    ssh-add -K  
    

    วิธีนี้จะคงอยู่หลังจากที่คุณปิดและเปิดใหม่โดยเก็บไว้ในพวงกุญแจของผู้ใช้


16
ออกจากระบบเซิร์ฟเวอร์กลับไปใช้git pullงานพร้อมท์ขอรหัสผ่านอีกครั้ง
cyber8200

35
ssh-add -Kจะคงอยู่หลังจากที่คุณปิดและเปิดใหม่โดยเก็บไว้ในพวงกุญแจของผู้ใช้
Kirk

72
@ Kirk ssh-add -Kให้สิ่งต่อไปนี้:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
Sandeep C

13
ฉันยังคงได้รับพร้อมท์สำหรับวลีรหัสผ่านโดยไม่คำนึงถึง
IgorGanapolsky

21
-Kเป็นแอปเปิ้ลที่เฉพาะเจาะจง ดูhelp.github.com/articles/…
bkdir

238

สิ่งนี้เกิดขึ้นกับฉันหลังจากรีสตาร์ทตั้งแต่อัปเกรดจาก OS X El Capitan (10.11) ไปเป็น macOS Sierra (10.12) ssh-addแก้ปัญหาการทำงานชั่วคราว แต่จะไม่คงอยู่ทั่วเริ่มต้นใหม่อีก

ทางออกถาวรคือแก้ไข (หรือสร้าง) ~/.ssh/configและเปิดใช้งานUseKeychainตัวเลือก

Host *
    UseKeychain yes

ที่เกี่ยวข้อง: macOS ถามคำถามรหัสผ่าน ssh ของฉันตั้งแต่ฉันอัพเดตเป็น Sierra


1
ทำงานให้ฉันขอบคุณ ... ฉันทำไปแล้ว ... ssh-add -K /Users/***/.ssh/git/id_rsaแต่มันก็ยังไม่ทำงานหลังจากที่รีสตาร์ทเทอร์มินัล ... ขอบคุณ
nawlbergs

2
ต้องการที่จะเกิดขึ้นทำไม? อ่านหมายเหตุทางเทคนิคเกี่ยวกับ OpenSSH เปลี่ยนแปลงdeveloper.apple.com/library/content/technotes/tn2449/…
samwize

62

หากคุณได้ลองและคุณยังคงแจ้งให้ใส่รหัสผ่านแล้วลองใช้ssh-add ssh-add -Kนี่เป็นการเพิ่มข้อความรหัสผ่านของคุณในพวงกุญแจของคุณ

อัปเดต: หากคุณใช้ macOS Sierra คุณอาจต้องทำขั้นตอนอื่นเนื่องจากข้างต้นอาจไม่ทำงานอีกต่อไป เพิ่มสิ่งต่อไปนี้ในของคุณ~/.ssh/config:

Host *
  UseKeychain yes

2
ยังขอให้ฉันใส่ข้อความรหัสผ่าน
IgorGanapolsky

@IgorGanapolsky คุณใช้ macOS Sierra หรือเปล่า ถ้าเป็นเช่นนั้นตรวจสอบสิ่งที่ฉันเพิ่งเพิ่มไปยังคำตอบ ฉันหวังว่าจะช่วย
Darryl Young

2
ใช่ฉันอยู่ที่เซียร่า อย่างไรก็ตามนี่คือบรรทัดที่ใช้งานได้สำหรับฉันเช่นกัน: AddKeysToAgent ใช่
IgorGanapolsky

1
สิ่งนี้ยังทำงานกับ BitBucket Cloud ฉันมีปัญหาใน GitKraken และสิ่งนี้สามารถแก้ไขปัญหาของฉันได้
มาลาคี

54

ฉันจะลองต่อไปนี้:

  1. เริ่มGitBash
  2. แก้ไข~/.bashrcไฟล์ของคุณ
  3. เพิ่มบรรทัดต่อไปนี้ลงในไฟล์

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  1. บันทึกและปิดไฟล์
  2. ปิด GitBash
  3. เปิด GitBash อีกครั้ง
  4. ป้อนข้อความรหัสผ่านของคุณ

4
zshสำหรับการอ้างอิงในอนาคตนี้ยังทำงานร่วมกับ เพียงเพิ่มไปที่.zshrc
Arda

2
ผมเชื่อว่านี่จะถือว่า keyfile id_rsaของคุณเรียกว่า หากคุณมีชื่อที่กำหนดเองคุณควรใช้เช่น /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen

2
คุณช่วยอธิบายว่าเกิดอะไรขึ้นกับสคริปต์นี้
LeeR

2
@ ดูว่ามันเริ่มต้น ssh-agent หากยังไม่ได้ใช้งานซึ่งเป็นสิ่งที่ทำให้แน่ใจว่าจะไม่ขอให้คุณใส่รหัสผ่าน ssh ทุกครั้งที่กด (มากหรือน้อย)
Roland

นี่เป็นเพียงการเรียกใช้ ssh-agent และเพิ่มกุญแจในการเข้าสู่ระบบทุกครั้ง คุณยังต้องใส่รหัสผ่านทุกครั้งที่ลงชื่อเข้าใช้ ตัวอย่างเช่นถ้าคุณมีสคริปต์ ssh-ing และทำคำสั่ง GIT สิ่งนี้น่าเสียดายที่ไม่มีประโยชน์เลย
trainoasis

27

สิ่งที่ใช้ได้ผลสำหรับฉันบน Windows คือ (ฉันมีรหัสโคลนจาก repo 1st):

eval $(ssh-agent)
ssh-add 
git pull 

ในเวลานั้นมันถามฉันหนึ่งครั้งสำหรับข้อความรหัสผ่านของฉัน

เครดิต: วิธีการแก้ปัญหาที่ถูกนำมาจาก /unix/12195/how-to-avoid-being-asked-passphrase-each-time-i-push-to-bitbucket


27

ลองเพิ่มใน~ / .ssh / config ของคุณ :

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

... สมมติว่าคีย์ส่วนตัวของคุณชื่อid_rsa


11
UseKeychain ใช่ใช้ได้เฉพาะกับ mac
Oz123

3
@ Oz123 สิ่งที่เทียบเท่ากับ windows
IgorGanapolsky

@ Oz123 ฉันคิดว่าสิ่งที่เทียบเท่าบน Windows คือ AddKeysToAgent ใช่ตรวจสอบคำตอบนี้stackoverflow.com/questions/52423626/…
fedeteka

6

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

ปรากฎว่าฉันมีปุ่มหลายปุ่มและ Git ใช้ผิดครั้งแรก มันจะทำให้ฉันใส่ข้อความรหัสผ่านของฉันและฉันจะป้อนมันแล้ว Git จะใช้คีย์อื่นที่ใช้งานได้ (ซึ่งฉันไม่จำเป็นต้องป้อนข้อความรหัสผ่าน)

ฉันเพิ่งลบรหัสที่ใช้เพื่อแจ้งรหัสผ่านให้ฉันและตอนนี้ก็ใช้งานได้!


5

ดูเหมือนว่าคุณอาจมีปัญหากับ SSH-Agent เอง ฉันจะลองแก้ไขปัญหาที่

1) คุณเพิ่ม SSH เพื่อเพิ่มรหัสของคุณใน SSH หรือไม่?

2) คุณกำลังปิดหน้าต่างเทอร์มินัลระหว่างการใช้งานหรือไม่เพราะถ้าคุณปิดหน้าต่างคุณจะต้องป้อนรหัสผ่านอีกครั้งเมื่อคุณเปิดอีกครั้ง


2
ยินดีที่ได้เพิ่มข้อมูลเกี่ยวกับวิธีแก้ปัญหาแรกของ Jeff Welling
ranu

5

หากวิธีการข้างต้นไม่ได้ผลสำหรับฉันสิ่งหนึ่งที่ต้องตรวจสอบคือคุณมีรหัสสาธารณะจริง ๆ (โดยทั่วไปid_rsa.pub) มันผิดปกติไม่ได้ แต่นั่นเป็นสาเหตุสำหรับฉัน

วิธีสร้างพับลิกคีย์ของคุณจากไพรเวตคีย์:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

1

ฉันลองใช้วิธีแก้ไขปัญหาต่าง ๆ แต่ไม่มีอะไรช่วย แต่ขั้นตอนนี้ ( สภาพแวดล้อม GitBash SSH ของฉันมักถามรหัสผ่านของฉันฉันจะทำอย่างไรดี ) จากตะเข็บ Bitbucket.com ทำงานได้ดี:

ความคิดคือ:

  1. คุณสร้าง~/.bashrcไฟล์

  2. เพิ่มสคริปต์ติดตาม:

    SSH_ENV=$HOME/.ssh/environment
    
    # start the ssh-agent
        function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
        echo succeeded
        chmod 600 "${SSH_ENV}"
        . "${SSH_ENV}" > /dev/null
        /usr/bin/ssh-add
    }
    
    if [ -f "${SSH_ENV}" ]; then
         . "${SSH_ENV}" > /dev/null
         ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
            start_agent;
        }
    else
        start_agent;
    fi
    
  3. เรียกใช้งาน Bash อีกครั้ง


1

อีกวิธีที่เป็นไปได้ที่ไม่ได้กล่าวถึงข้างต้นคือการตรวจสอบรีโมตของคุณด้วยคำสั่งต่อไปนี้:

git remote -v

หากรีโมตไม่เริ่มต้นด้วย git แต่เริ่มต้นด้วย https คุณอาจต้องการเปลี่ยนเป็น git โดยทำตามตัวอย่างด้านล่าง

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.