ฉันสร้างคีย์ตามคำแนะนำในการสอน github ลงทะเบียนพวกเขาด้วย gitub และลองใช้ ssh-agent อย่างชัดเจน - แต่ git ยังคงถามรหัสผ่านของฉันทุกครั้งที่ฉันพยายามดึงหรือดัน
อะไรคือสาเหตุ?
ฉันสร้างคีย์ตามคำแนะนำในการสอน github ลงทะเบียนพวกเขาด้วย gitub และลองใช้ ssh-agent อย่างชัดเจน - แต่ git ยังคงถามรหัสผ่านของฉันทุกครั้งที่ฉันพยายามดึงหรือดัน
อะไรคือสาเหตุ?
คำตอบ:
เมื่อคุณเริ่มต้นตัวแทน SSH ด้วย:
eval $(ssh-agent)
คุณต้องเพิ่มรหัสส่วนตัวของคุณ:
ssh-add
สิ่งนี้จะถามวลีรหัสผ่านของคุณเพียงครั้งเดียวจากนั้นคุณควรได้รับอนุญาตให้กดหากคุณอัปโหลดรหัสสาธารณะไปที่ Github
หากต้องการบันทึกคีย์อย่างถาวรใน macOS:
ssh-add -K
วิธีนี้จะคงอยู่หลังจากที่คุณปิดและเปิดใหม่โดยเก็บไว้ในพวงกุญแจของผู้ใช้
git pull
งานพร้อมท์ขอรหัสผ่านอีกครั้ง
ssh-add -K
จะคงอยู่หลังจากที่คุณปิดและเปิดใหม่โดยเก็บไว้ในพวงกุญแจของผู้ใช้
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.
-K
เป็นแอปเปิ้ลที่เฉพาะเจาะจง ดูhelp.github.com/articles/…
สิ่งนี้เกิดขึ้นกับฉันหลังจากรีสตาร์ทตั้งแต่อัปเกรดจาก OS X El Capitan (10.11) ไปเป็น macOS Sierra (10.12) ssh-add
แก้ปัญหาการทำงานชั่วคราว แต่จะไม่คงอยู่ทั่วเริ่มต้นใหม่อีก
ทางออกถาวรคือแก้ไข (หรือสร้าง) ~/.ssh/config
และเปิดใช้งานUseKeychain
ตัวเลือก
Host *
UseKeychain yes
ที่เกี่ยวข้อง: macOS ถามคำถามรหัสผ่าน ssh ของฉันตั้งแต่ฉันอัพเดตเป็น Sierra
ssh-add -K /Users/***/.ssh/git/id_rsa
แต่มันก็ยังไม่ทำงานหลังจากที่รีสตาร์ทเทอร์มินัล ... ขอบคุณ
หากคุณได้ลองและคุณยังคงแจ้งให้ใส่รหัสผ่านแล้วลองใช้ssh-add
ssh-add -K
นี่เป็นการเพิ่มข้อความรหัสผ่านของคุณในพวงกุญแจของคุณ
อัปเดต: หากคุณใช้ macOS Sierra คุณอาจต้องทำขั้นตอนอื่นเนื่องจากข้างต้นอาจไม่ทำงานอีกต่อไป เพิ่มสิ่งต่อไปนี้ในของคุณ~/.ssh/config
:
Host *
UseKeychain yes
ฉันจะลองต่อไปนี้:
~/.bashrc
ไฟล์ของคุณ
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
zsh
สำหรับการอ้างอิงในอนาคตนี้ยังทำงานร่วมกับ เพียงเพิ่มไปที่.zshrc
id_rsa
ของคุณเรียกว่า หากคุณมีชื่อที่กำหนดเองคุณควรใช้เช่น /usr/bin/ssh-add ~/.ssh/custom_filename
สิ่งที่ใช้ได้ผลสำหรับฉันบน Windows คือ (ฉันมีรหัสโคลนจาก repo 1st):
eval $(ssh-agent)
ssh-add
git pull
ในเวลานั้นมันถามฉันหนึ่งครั้งสำหรับข้อความรหัสผ่านของฉัน
เครดิต: วิธีการแก้ปัญหาที่ถูกนำมาจาก /unix/12195/how-to-avoid-being-asked-passphrase-each-time-i-push-to-bitbucket
ลองเพิ่มใน~ / .ssh / config ของคุณ :
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
... สมมติว่าคีย์ส่วนตัวของคุณชื่อid_rsa
ฉันมีปัญหาที่คล้ายกัน แต่คำตอบอื่น ๆ ไม่ได้แก้ไขปัญหาของฉัน ฉันคิดว่าฉันจะดำเนินการต่อและโพสต์สิ่งนี้ในกรณีที่คนอื่นมีการตั้งค่าแบบเมา ๆ เช่นฉัน
ปรากฎว่าฉันมีปุ่มหลายปุ่มและ Git ใช้ผิดครั้งแรก มันจะทำให้ฉันใส่ข้อความรหัสผ่านของฉันและฉันจะป้อนมันแล้ว Git จะใช้คีย์อื่นที่ใช้งานได้ (ซึ่งฉันไม่จำเป็นต้องป้อนข้อความรหัสผ่าน)
ฉันเพิ่งลบรหัสที่ใช้เพื่อแจ้งรหัสผ่านให้ฉันและตอนนี้ก็ใช้งานได้!
ดูเหมือนว่าคุณอาจมีปัญหากับ SSH-Agent เอง ฉันจะลองแก้ไขปัญหาที่
1) คุณเพิ่ม SSH เพื่อเพิ่มรหัสของคุณใน SSH หรือไม่?
2) คุณกำลังปิดหน้าต่างเทอร์มินัลระหว่างการใช้งานหรือไม่เพราะถ้าคุณปิดหน้าต่างคุณจะต้องป้อนรหัสผ่านอีกครั้งเมื่อคุณเปิดอีกครั้ง
หากวิธีการข้างต้นไม่ได้ผลสำหรับฉันสิ่งหนึ่งที่ต้องตรวจสอบคือคุณมีรหัสสาธารณะจริง ๆ (โดยทั่วไปid_rsa.pub
) มันผิดปกติไม่ได้ แต่นั่นเป็นสาเหตุสำหรับฉัน
วิธีสร้างพับลิกคีย์ของคุณจากไพรเวตคีย์:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
ฉันลองใช้วิธีแก้ไขปัญหาต่าง ๆ แต่ไม่มีอะไรช่วย แต่ขั้นตอนนี้ ( สภาพแวดล้อม GitBash SSH ของฉันมักถามรหัสผ่านของฉันฉันจะทำอย่างไรดี ) จากตะเข็บ Bitbucket.com ทำงานได้ดี:
ความคิดคือ:
คุณสร้าง~/.bashrc
ไฟล์
เพิ่มสคริปต์ติดตาม:
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
เรียกใช้งาน Bash อีกครั้ง
อีกวิธีที่เป็นไปได้ที่ไม่ได้กล่าวถึงข้างต้นคือการตรวจสอบรีโมตของคุณด้วยคำสั่งต่อไปนี้:
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