Git บน Bitbucket: ถามรหัสผ่านเสมอแม้หลังจากอัปโหลดคีย์ SSH สาธารณะของฉันแล้ว


180

ฉันอัปโหลด~/.ssh/id_rsa.pubไปยังคีย์ SSH ของ Bitbucketตามที่อธิบายไว้แต่ Git ยังขอรหัสผ่านของฉันทุกครั้งที่ดำเนินการ (เช่นgit pull) ฉันพลาดอะไรไปหรือเปล่า?

มันเป็นพื้นที่เก็บข้อมูลส่วนตัว (ทางแยกของพื้นที่เก็บข้อมูลส่วนตัวของบุคคลอื่น) และฉันโคลนมันเช่นนี้:

git clone git@bitbucket.org:Nicolas_Raoul/therepo.git

นี่คือท้องถิ่นของฉัน.git/config:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

ในสภาพแวดล้อมเดียวกันกับคีย์สาธารณะเดียวกัน Git on Github ทำงานได้ดี
.sshคือrwx------, .ssh/id_rsaคือ-rw-------, .ssh/id_rsa.pubเป็น-rw-r--r--

คำตอบ:


265

คุณแน่ใจว่าคุณโคลนโดยใช้ URL ของ ssh หรือไม่

URL ของแหล่งกำเนิดบอกว่าurl = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.gitถ้าใช้ https มันจะถามรหัสผ่านโดยไม่คำนึงถึงคีย์ ssh ของคุณ

ดังนั้นสิ่งที่คุณต้องการทำคือ:

เปิดไฟล์กำหนดค่าของคุณใน repo ปัจจุบันของคุณ ..

vim .git/config

และเปลี่ยนบรรทัดด้วย url จาก

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git

ถึง

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@bitbucket.org:Nicolas_Raoul/therepo.git

62
คุณพูดถูกต้องขอบคุณ! ฉันอาจโคลนด้วย URL ที่ไม่ถูกต้อง ฉันแทนที่ URL .git/configด้วยgit@bitbucket.org:Nicolas_Raoul/therepo.gitและตอนนี้ก็ใช้งานได้!
Nicolas Raoul

8
และเพื่อเปลี่ยนรีโมตโดยใช้ git stackoverflow.com/questions/2432764/…
Alex Nolasco

3
มันเป็นบิตที่ได้แนะนำ URL ของ https เมื่อสร้างที่เก็บ! มาทำไม!
เดนิส Kniazhev

4
โปรดจำไว้ว่า bitbucket ของคุณเป็นแบบส่วนตัวหากคุณต้องการใช้โปรโตคอล git คุณต้องเพิ่มรหัส ssh ให้กับเว็บไซต์ของ BitBuket ในการตั้งค่าของคุณ
cevaris

7
ต้องเปลี่ยน URL เป็นssh://git@bitbucket.org/userName/repoName.git- โดยไม่มีssh://คำนำหน้ามันไม่ทำงาน
trygub

34

ตามที่อธิบายไว้ที่นี่หากคุณโคลนด้วยSSH url คุณไม่จำเป็นต้องป้อนชื่อผู้ใช้ / รหัสผ่านทุกครั้งที่คุณกด / ดึง ตรวจสอบคำตอบข้างต้นโดย @manojlds

แต่ถ้าคุณต้องการโคลนด้วยHTTPSและต้องการหลีกเลี่ยงการป้อนชื่อผู้ใช้ / รหัสผ่านในแต่ละครั้งคุณสามารถเก็บข้อมูลประจำตัวไว้ในแคชด้วยคำสั่งด้านล่าง:

git config --global credential.helper 'cache --timeout 3600'

ที่ 3600 (วินาที) หมายถึง 1 ชั่วโมงคุณสามารถเปลี่ยนได้ตามความต้องการของคุณ


@atilkan ในกรณีนั้นคุณสามารถให้ข้อมูลเครื่อง / OS และ git เวอร์ชั่นของคุณได้หรือไม่? และข้อความแสดงข้อผิดพลาดถ้ามีเมื่อคุณพยายามตั้งค่าแคช
Ajeet Shah

ฉันโคลนบิตที่เก็บของใครบางคนและนี่คือรีโมทของฉัน manecs-MBP:LocationTracker manec$ git remote -v origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (fetch) origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (push)
Banee Ishaque K

@AjeetShah ถ้าฉันใส่รหัสผ่านผิดล่ะ มันจะแคชรหัสผ่านผิดหรือเปล่า?
anaval

@anaval ทำไมคุณไม่ลองและหลังจากนั้นลองป้อนรหัสผ่านที่ถูกต้องหลังจากล้างหรือปิดใช้งานแคช แก้ไขคำตอบและแจ้งให้เราทราบว่าคุณทำอย่างไร :)
Ajeet Shah

19

มันตอบแล้วข้างต้น ฉันจะสรุปขั้นตอนในการตรวจสอบข้างต้น

ทำงานgit remote -vในโครงการ dir หากผลลัพธ์แสดง URL ระยะไกลที่เริ่มต้นด้วยhttps://abcคุณอาจต้องใช้รหัสผ่านชื่อผู้ใช้ทุกครั้ง

git remote set-url origin {ssh remote url address starts with mostly git@bitbucket.org:}ดังนั้นการเปลี่ยนแปลงระยะ URL ระยะไกล

ตอนนี้ทำงานgit remote -v เพื่อตรวจสอบ URL ระยะไกลที่มีการเปลี่ยนแปลง

อ้างอิง: https://help.github.com/articles/changing-a-remote-s-url/


16

สวัสดีชาว Google จากอนาคต

บน MacOS> = High Sierra คีย์ SSH จะไม่ถูกบันทึกไว้ในพวงกุญแจเพราะเหตุผล

การใช้ssh-add -Kชีวิตไม่ต้องรีสตาร์ทอีกต่อไปเช่นกัน

ที่นี่มี3 แนวทางแก้ปัญหา

ฉันใช้วิธีแรกสำเร็จแล้ว ฉันได้สร้างไฟล์ที่เรียกว่าconfigใน~/.ssh:

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

2
สิ่งนี้ต้องการความสนใจมากขึ้น! ฉันใช้เวลานานกำลังมองหาวิธีการแก้ปัญหาและเป็นคนแรกที่configไฟล์ใน/.sshงานสมบูรณ์แบบ!
Kitson

1
คำตอบนี้แก้ปัญหาของฉันใน MacOs: cd ~/.ssh+ ls+ nano config(ไฟล์ถูกสร้างขึ้นแล้ว) + เพิ่มรหัสในคำตอบของ Vaiden จากนั้นควบคุม X + Y เพื่อบันทึกไฟล์
Sébastien Gicquel

9

ในกรณีคำขอ HTTP เป็นไปได้และยังสามารถวางข้อมูลประจำตัว (ด้วยรหัสผ่าน) ลงใน url ได้โดยตรงและ:

http://username:password@bitbucket.org/...

วิธีนี้จะช่วยลดความเจ็บปวดเพื่อให้ข้อมูลประจำตัวของคุณอีกครั้ง แก้ไข. git / config ของคุณ (url) อย่างง่าย ๆ


10
แต่ไม่ปลอดภัย และไม่ทำงานหากรหัสผ่านมีตัวอักษรบางตัวเช่น$%
Gank

3
ทุกคนที่อ่านความคิดเห็นนี้โปรดจำไว้ว่าเพียงเพราะมันทำงานไม่ได้หมายความว่ามันขวา หากคุณคัดลอกรหัสผ่านที่ใดก็ตามอย่างถาวรแสดงว่าคุณทำผิด เช่นเดียวกันกับผู้ที่ตั้งค่าการอนุญาตของโฟลเดอร์เป็น777: หยุดคิดทำการค้นคว้าทำความเข้าใจแล้วทำอย่างถูกต้อง
dKen

9

ไม่มีคำตอบเหล่านี้ช่วยฉันได้เปิดออกปัญหาของฉันแตกต่างกันเล็กน้อย มันเป็น ssh ที่ขอรหัสผ่านของฉันทุกครั้งก่อนส่งรหัส ดังนั้นสิ่งที่ฉันต้องทำคือเชื่อมโยงรหัสผ่านของฉันกับคำสั่งนี้:

ssh-add -K ~/.ssh/id_rsa

จากนั้นจะแจ้งให้คุณใส่รหัสผ่านและเก็บไว้ นี่อาจเป็นวิธีการแก้ปัญหาที่คุณกำลังมองหาถ้าทุกครั้งที่คุณถามรหัสผ่าน

ป้อนวลีรหัสผ่านสำหรับคีย์ '/Users//.ssh/id_rsa':

ข้อมูลเพิ่มเติมที่นี่

หมายเหตุ: ฉันใช้สิ่งนี้กับเครื่อง Mac ของฉันได้สำเร็จ แต่เนื่องจาก @Rob Kwasowski ชี้ให้เห็นด้านล่างKตัวเลือกตัวพิมพ์ใหญ่จะไม่ซ้ำกับ mac หากไม่ได้ใช้ mac คุณจะต้องใช้ตัวพิมพ์เล็กk(ซึ่งอาจใช้ได้กับ mac ด้วย แต่ฉันยังไม่ได้ทดสอบ)


1
เยี่ยมมาก แต่มันควรเป็นตัวพิมพ์เล็กk:ssh-add -k ~/.ssh/id_rsa
Rob Kwasowski

กรุณาอธิบายเพิ่มเติมหน่อยได้ไหม?
stackPusher

ตามที่อธิบายไว้ที่นี่: ssh.com/ssh/addตัวเลือกบรรทัดคำสั่งจะเป็นตัวพิมพ์เล็กkไม่ใช่ตัวพิมพ์ใหญ่เนื่องจากตัวเลือกเหล่านั้นจะเล็กและใหญ่
Rob Kwasowski

ขวา แต่ตัวเลือกตัวพิมพ์ใหญ่ K จะเพิ่มคีย์ไปยังพวงกุญแจเช่นกันในขณะที่ตัวพิมพ์เล็ก k จะเพิ่มคีย์ไปยังเอเจนต์เท่านั้น ดังนั้นสิ่งที่ฉันถามคือ 'ทำไมคุณไม่ต้องการเพิ่มคีย์ในพวงกุญแจของคุณด้วย'
stackPusher

1
โปรดทราบถึงความแตกต่างของแพลตฟอร์ม-Kนั้นใช้เฉพาะกับ Mac: help.github.com/en/articles/error-ssh-add-illegal-option----k
Rob Kwasowski

5
  • ขั้นตอนที่ 1: ติดตั้ง git-credential-winstore
    https://confluence.atlassian.com/bitbucketserver/permanently-authenticating-with-git-repositories-776639846.html

  • ขั้นตอนที่ 2: การตั้งค่า git - ข้อมูลประจำตัวทั่วโลกแคช '- หมดเวลา 3600'
    ซึ่งจะเก็บรหัสผ่านของคุณเป็นเวลา 1 ชั่วโมง

  • ขั้นตอนที่ 3: เรียกใช้คำสั่ง git ที่จะแจ้งให้คุณใส่รหัสผ่านและข้อมูลประจำตัวจะแจ้งและเก็บรหัสผ่านของคุณ

ฉันคิดว่าStep 1มีไว้สำหรับWindowsและStep 2มีไว้สำหรับLinuxแต่คุณลืมมันพูดถึงมันอย่างถูกต้อง
Ajeet Shah

ฉันใช้ 3 ขั้นตอนเหล่านั้นบนกล่อง Windows ของฉันและใช้งานได้
webdev5

2
ในกรณีที่ผมอยากจะเพิ่มว่าบน Linux OS เราจำเป็นต้องใช้เพียงขั้นที่ 2 และขั้นที่ 3 สำหรับผลเช่นเดียวกัน :)
Ajeet ชาห์

4

ต่อไปนี้จะถือว่าการเข้าถึงบรรทัดคำสั่งผ่าน iTerm / Terminal ไปยัง bitbucket

สำหรับMacOS Sierra 10.12.5 ระบบของฉันพบปัญหาที่เทียบเท่า - ขอรหัสผ่าน SSH ของฉันในแต่ละการเชื่อมต่อไปยังบิตบูท

ปัญหาที่มีจะทำอย่างไรกับการปรับปรุง OpenSSH ใน MacOS 10.12.2 ซึ่งอธิบายไว้ที่นี่ในหมายเหตุทางเทคนิค TN2449

คุณอาจต้องการปรับแต่งโซลูชันของคุณ แต่สิ่งต่อไปนี้จะใช้ได้เมื่อเพิ่มลงในไฟล์ ~ / .ssh / config ของคุณ:

Host *
    UseKeychain yes

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ ssh configs ลองดูที่ man pages สำหรับ ssh_config:

% man ssh_config

อีกสิ่งหนึ่ง: มีการเขียนที่ดีเกี่ยวกับsuperuser ที่นี่ซึ่งกล่าวถึงปัญหานี้และวิธีแก้ปัญหาต่าง ๆ ขึ้นอยู่กับความต้องการและการตั้งค่าของคุณ


2

ฉันโคลนที่เก็บข้อมูลด้วย HTTPS URL แทนที่จะเป็น SSH URL ดังนั้นแม้หลังจากเพิ่มคีย์ SSH แล้วมันก็ขอให้ฉันใส่รหัสผ่านใน Bash Shell

ฉันเพียงแค่แก้ไข./.git/configไฟล์และเปลี่ยนค่าของurlตัวแปรโดยเพียงแค่เปลี่ยนhttps://ไปssh://

เช่น

[core]
        ...
        ...
        ...
[remote "origin"]
        url = https://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

เปลี่ยนไปเป็น:

[core]
        ...
        ...
        ...
[remote "origin"]
        url = ssh://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

1

คุณอาจต้องตรวจสอบไฟล์ประจำตัว SSH อีกครั้ง คุณอาจแนะนำให้ BitBucket ดูรหัสส่วนตัวที่แตกต่างกัน / ไม่ถูกต้องกับรหัสสาธารณะที่เทียบเท่าที่คุณบันทึกไว้ใน BitBucket

ตรวจสอบด้วยtail ~/.ssh/config- คุณจะเห็นสิ่งที่คล้ายกับ:

Host bitbucket.org
 HostName bitbucket.org
 IdentityFile ~/.ssh/personal-bitbucket-ssh-key

จำไว้ว่าการเพิ่มตัวตนเพิ่มเติม (เช่นที่ทำงานและที่บ้าน) สามารถทำได้ด้วยssh-addคำสั่งตัวอย่างเช่น:

ssh-keygen -t rsa -C "companyName" -f "companyName"
ssh-add ~/.ssh/companyName

เมื่อคุณได้รับการยืนยันว่าคีย์ส่วนตัวใดที่กำลังดูอยู่ในเครื่องคุณสามารถใช้หมายเลขสาธารณะของคุณในกรณีนี้:

cat ~/.ssh/personal-bitbucket-ssh-key.pub | pbcopy

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

หวังว่านี่จะช่วยให้ชัดเจนขึ้นสำหรับใครบางคน


0

กับฉันแม้ว่าฉันจะวิ่ง 'git clone ssh: //git@stash.xxx.com: 7999 / projName / projA.git' ฉันยังคงได้รับพร้อมท์ให้ใส่รหัสผ่านสำหรับ repo ใหม่ที่ฉันโคลนดังนั้นโดยการเปรียบเทียบ. git / config ไฟล์ไปยัง repos อื่น ๆ ที่ใช้งานได้มันกลายเป็น url ในส่วน [remote "origin"] ซึ่งถูกตั้งค่าเป็นพา ธ ssh ด้านบนสำหรับ repo ใหม่ แต่ถูกตั้งค่าเป็น https: xxx สำหรับอันที่ทำงาน .


0

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

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