คีย์ SSH - ยังคงขอรหัสผ่านและวลีรหัสผ่าน


495

ฉันค่อนข้าง 'ทน' กับ Github เสมอขอชื่อผู้ใช้และรหัสผ่านของฉันเมื่อฉันโคลนที่เก็บ ฉันต้องการข้ามขั้นตอนนี้เนื่องจากเป็นสิ่งที่น่ารำคาญในเวิร์กโฟลว์ของฉัน

ฉันลองตั้งค่าคีย์ SSH (ซึ่งฉันทำได้สำเร็จ) โดยใช้คำแนะนำนี้ https://help.github.com/articles/generating-ssh-keysและฉันประสบความสำเร็จ

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

ฉันไม่แน่ใจว่าจะถามอะไรฉันจะระบุเป้าหมายของฉัน

ฉันต้องการที่จะสามารถที่จะเก็บโคลนโดยไม่ต้องใส่ข้อมูล Github ของฉันตลอดเวลา

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

จากความรู้ของฉันนี่คือคำสั่งที่ทดสอบว่าสิ่งต่าง ๆ ทำงานถูกต้องหรือไม่นี่คือผลลัพธ์จากคอนโซลของฉัน:

~ $ ssh -T git@github.com
Saving password to keychain failed
Enter passphrase for key '/Users/MYNAME/.ssh/id_rsa':
Hi MYNAME! You've successfully authenticated, but GitHub does not provide shell access.

เมื่อฉันใส่รหัสผ่านควรจะล้มเหลวก่อน จากนั้นเมื่อฉันป้อนข้อความรหัสผ่านของฉันมันจะผ่าน


1
คุณใช้ระบบปฏิบัติการใด? Linux Desktop ที่ทันสมัยจะเสนอให้จัดเก็บวลีรหัสผ่านของคุณในตัวจัดการพวงกุญแจ เดียวกันใน Mac OS X ได้ใน Windows คุณสามารถใช้ซึ่งเป็นส่วนหนึ่งของpageant puttyในเป้าหมายเหล่านี้เหมือนกันทั้งหมด: คุณป้อนวลีรหัสผ่านเพียงครั้งเดียวหลังจากที่คุณเริ่มพีซีของคุณตัวแทนจัดการคีย์จะส่งผ่านไปยัง ssh ในการใช้งานต่อไปจนกว่าคุณจะรีบูต
Janos

การทำสำเนาGit

2
ฉันมาช้าไปงานเลี้ยงที่นี่ แต่บนแท็บ / ปุ่มโคลนนิ่งเล็ก ๆ ใน github มีลิงค์ที่ระบุว่า "ใช้ SSH" คุณต้องการทำเช่นนั้น มันเปลี่ยนลิงค์โคลนของคุณเป็น "git @ github: ชื่อผู้ใช้ / project.git" หากคุณเพิ่มคีย์ SSH ไปยัง github และให้มันทำงานบน ssh-agent ในเครื่องคุณควรกดได้โดยไม่ต้องใส่ชื่อผู้ใช้หรือรหัสผ่าน
ครัว Logan

คำตอบ:


201

หากคุณทำงานกับHTTPsURL มันจะถามชื่อผู้ใช้ / รหัสผ่านของคุณเสมอ

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

หากยังคงน่ารำคาญเกินไปให้ตั้งค่า ssh-key โดยไม่ต้องใส่ข้อความรหัสผ่าน


2
ขอบคุณสำหรับคำตอบ ฉันใช้ HTTPs เสมอ ฉันกำลังพยายามใช้การรับรองความถูกต้อง SSH และคิดว่าฉันตั้งค่า ssh-agent เป็นบางสิ่งบางอย่างนอก git ที่ฉันต้องการติดตั้งหรือไม่? ขอบคุณ
HelloWorld

1
@ R11G คุณไม่สามารถทำได้มิฉะนั้นรหัสผ่านจะไม่ปลอดภัย ... เพียงแค่สร้างใหม่
Simon Boudrias

50
ฉันแค่ต้องการทราบว่าข้อความรหัสผ่านจะใช้ในการเข้ารหัสคีย์ส่วนตัวของคุณดังนั้นหากคุณไม่ใช้ข้อความรหัสผ่านรหัสส่วนตัวของคุณจะถูกเข้ารหัสในเครื่องของคุณ มันเหมือนกับการทิ้งรหัสผ่านไว้ในไฟล์ข้อความที่วางอยู่บนคอมพิวเตอร์ของคุณ

2
ขำขัน repos HTTPS ของฉันไม่เคยถามรหัสผ่านและ repos SSH ของฉันทำเสมอ
อดัม

33
ดูเอกสาร github นี้เพื่อแปลง URL ของรีโมทจาก https เป็น ssh ในการตรวจสอบหาก URL ระยะไกลเป็น SSH หรือ https git remote -vใช้ วิธีเปลี่ยนจาก https เป็น ssh:git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
Manavalan Gajapathy

824

เพิ่มตัวตนโดยไม่มีพวงกุญแจ

อาจมีบางครั้งที่คุณไม่ต้องการเก็บข้อความรหัสผ่านในพวงกุญแจ แต่ไม่ต้องการป้อนข้อความรหัสผ่านซ้ำแล้วซ้ำอีก

คุณสามารถทำสิ่งนี้ได้:

ssh-add ~/.ssh/id_rsa 

สิ่งนี้จะถามคุณเกี่ยวกับวลีรหัสผ่านใส่มันและมันจะไม่ถามอีกจนกว่าคุณจะรีสตาร์ท

เพิ่มตัวตนโดยใช้พวงกุญแจ

@dennis ชี้ให้เห็นในความคิดเห็นเพื่อยืนยันข้อความรหัสผ่านผ่านการรีสตาร์ทโดยเก็บไว้ในพวงกุญแจของคุณคุณสามารถใช้-Kตัวเลือก ( -kสำหรับ Ubuntu) เมื่อเพิ่มเอกลักษณ์เช่นนี้:

ssh-add -K ~/.ssh/id_rsa

อีกครั้งสิ่งนี้จะขอให้คุณใส่รหัสผ่านป้อนรหัสผ่านและครั้งนี้จะไม่ขอข้อมูลประจำตัวนี้อีก


178
โปรดทราบว่าการดำเนินการนี้จะไม่คงอยู่ต่อไปเมื่อมีการรีสตาร์ท คุณสามารถใช้-Kตัวเลือกในการเก็บข้อความรหัสผ่านในพวงกุญแจของคุณเมื่อเพิ่มมันเช่นssh-add -K ~/.ssh/id_rsa
Dennis

29
ตัวพิมพ์เล็ก-kสำหรับฉัน ... (Linux Mint / Ubuntu 14.04 base) แต่ใช่! ในที่สุดเรียงนี้ ...
หลุยส์แมดดอกซ์

8
เพียงแค่เรียกใช้คำสั่ง "ssh-add" และป้อนรหัสผ่านหนึ่งครั้งบรรทัดคำสั่งจะไม่พร้อมท์ให้คุณใส่รหัสผ่านอีกครั้ง
AVINASH SHRIMALI

14
คุณไม่จำเป็นต้องมีข้อโต้แย้งใด ๆ เพิ่งทำงานssh-addจะเพิ่มโดยอัตโนมัติ~/.ssh/id_rsa(ในไฟล์อื่น ๆ ) และไม่มีเหตุผลที่จะส่งออกไป/dev/null; ดีกว่ามากที่จะเห็นรายงานสิ่งที่มันทำ
Ted Hopp

6
ความคิดใดที่ฉันได้รับ "ไม่สามารถเปิดการเชื่อมต่อกับตัวแทนการตรวจสอบความถูกต้องของคุณ"?
dokaspar

251

ใน Mac OSX คุณสามารถเพิ่มไพรเวตคีย์ของคุณเข้ากับ Keychain ได้โดยใช้คำสั่ง:

ssh-add -K /path/to/private_key

หากคีย์ส่วนตัวของคุณถูกเก็บไว้ที่ ~ / .ssh และมีชื่อว่า id_rsa:

ssh-add -K ~/.ssh/id_rsa

คุณจะได้รับแจ้งให้ใส่รหัสผ่านซึ่งจะถูกเก็บไว้ในพวงกุญแจของคุณ

แก้ไข - จัดการการรีสตาร์ท

เพื่อไม่ต้องกรอกรหัสผ่านของคุณแม้หลังจากรีสตาร์ทให้เพิ่มไฟล์ต่อไปนี้ในไฟล์การกำหนดค่า ssh ของคุณ (โดยทั่วไปจะอยู่ที่ ~ / .ssh / config)

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

7
ในกรณีของฉันมันยังคงพร้อมท์สำหรับข้อความรหัสผ่านหลังจากรีสตาร์ท (macOS Sierrra 10.12.2) ความคิดใด ๆ เกี่ยวกับวิธีการแก้ปัญหานี้?
inigo333

9
ไม่เป็นไรฉันเพิ่งพบปัญหา เป็นข้อบกพร่อง (คุณสมบัติ?) จาก Mac OS X 10.12 ซึ่ง ssh-agent ไม่ได้โหลดข้อความรหัสผ่านบนพวงกุญแจโดยอัตโนมัติระหว่างการเริ่มต้น github.com/lionheart/openradar-mirror/issues/15361
inigo333

2
@ inigo333 ที่น่าสนใจ ฉันเพิ่งปรับปรุงและสังเกตเห็นตัวเอง!
Groot

1
@Groot, BTW, เพิ่ม "Host * UseKeychain yes" เป็น "~ / .ssh / config" ตามที่แนะนำในคำตอบอื่น ๆ แก้ปัญหาได้
inigo333

1
นี่ควรเป็นคำตอบที่ยอมรับได้ ไฟล์ปรับแต่งพิเศษใน~/.ssh
Xavi

186

ฉันลองคำตอบทั้งหมดที่นี่และคำตอบเหล่านี้ไม่ทำงาน ! รหัสผ่านของฉันจะไม่คงอยู่ระหว่างเซสชัน / รีสตาร์ท Mac ของฉัน

สิ่งที่ฉันค้นพบจากการอ่านOpenRadar นี้และการสนทนา Twitter นี้คือApple ตั้งใจเปลี่ยนพฤติกรรมของ ssh-agent ใน macOS 10.12 Sierra เพื่อไม่ให้โหลดคีย์ SSH ก่อนหน้าโดยอัตโนมัติอีกต่อไป เพื่อรักษาพฤติกรรมเช่นเดียวกับ El Cap ฉันได้ทำสิ่งต่อไปนี้:

  1. ssh-add -K ~/.ssh/id_rsa
    หมายเหตุ: เปลี่ยนพา ธ ไปเป็นที่ตั้ง id_rsa ของคุณ
  2. ssh-add -A
  3. สร้าง (หรือแก้ไขหากมี) ~/.ssh/configไฟล์ต่อไปนี้:

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

และตอนนี้ฉันจำรหัสผ่านระหว่างการรีสตาร์ท Mac ของฉันได้เลย!


2
นี่อาจเป็นสิ่งที่มีประโยชน์ในการเพิ่มไปยังหน้าเอกสารคู่มือgithubหรือosx มีเวลาที่ยากที่สุดในการหาสาเหตุที่ทำให้ Mac ของฉันทำงานที่ 10.11 และที่อื่น ๆ ที่ทำงาน 10.12 ซึ่งมีพฤติกรรมแตกต่างกัน
Grr

5
ที่เกิดขึ้นกับผมหลังจากการปรับรุ่น OSX ขอบคุณ (ฉันคิดว่าssh-add -Aไม่จำเป็นถ้าคุณมีเพียงหนึ่งที่สำคัญที่~/.ssh/id_rsa)
Dorian

1
นี่เป็นคำตอบที่มีประโยชน์อย่างไม่น่าเชื่อ ขอบคุณคุณทำวันของฉัน
Jan Nash

2
เมื่อวันที่ตุลาคม 2017 คำตอบนี้เป็นสิ่งที่คุณกำลังมองหาหากคุณใช้ macOS 10.12 หรือสูงกว่า
brogrammer

3
และตอนนี้อยู่ในเอกสาร github: help.github.com/articles/ …
ทอดด์ราคา

35

คุณสามารถลบข้อความรหัสผ่านสำหรับคีย์ได้

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

หรือคุณสามารถเรียกใช้

$ ssh-keygen -p

คุณได้รับพรอมต์สำหรับ keyfile โดยค่าเริ่มต้นมัน~/.ssh/id_rsaจึงกด Enter

คุณจะได้รับแจ้งให้ป้อนวลีรหัสผ่านปัจจุบัน

จากนั้นจะมีข้อความแจ้งให้ใส่วลีรหัสผ่านใหม่กด Enter


นี่ควรจะสูงกว่าคำตอบที่เหมือนกันเกือบทั้งหมดในการเพิ่มข้อความรหัสผ่านในพวงกุญแจ ฉันต้องให้กุญแจสาธารณะของฉันแก่ผู้ดูแลระบบและใส่ข้อความรหัสผ่านซึ่งเป็นสิ่งที่สร้างความรำคาญให้พิมพ์ทุกครั้ง นี้เป็นทางออกที่สะอาดเมื่อคุณไม่ได้มีการควบคุมมากขึ้นกว่าเครื่องของคุณ ( -K, -k, -Aไม่ได้ทำงานสำหรับฉัน)
gwg

1
นี่เป็นสิ่งเดียวที่ทำงานให้ฉันในการรีสตาร์ททุกคำสั่ง ssh-add -K, -k ฯลฯ ไม่ได้ทำอะไรให้ฉันเลย
Amalgovinus

28

เพียงรันคำสั่งต่อไปนี้:

ssh-add -K

มันจะไม่ขอให้คุณใส่รหัสผ่านอีกครั้ง


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

8
จริงๆแล้วมันจะแก้ไขมันจนกว่าฉันจะรีสตาร์ท :(
machineghost

5
ในเชลล์ bash สำหรับ Windows แฟล็ก "-k" จะต้องเป็นตัวพิมพ์เล็ก เพียงแค่ FYI
เฟอร์กัส

27

ตรวจสอบให้แน่ใจว่าคุณกำลังใช้ ssh สำหรับที่เก็บของคุณด้วย

mahtab@mahtab-Lenovo-G50-70:~/my-projects/jenkins-cje-2017$ git remote -v origin git@github.com:eMahtab/jenkins-cje-2017.git (fetch) origin git@github.com:eMahtab/jenkins-cje-2017.git (push)

ป้อนคำอธิบายรูปภาพที่นี่

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

mahtab@mahtab-Lenovo-G50-70:~/my-projects/jenkins-cje-2017$ git remote -v origin https://github.com/eMahtab/jenkins-cje-2017.git (fetch) origin https://github.com/eMahtab/jenkins-cje-2017.git (push)


ใช่การแยกความแตกต่างระหว่างURL ระยะไกลทั้งสองประเภทมีประโยชน์สำหรับฉัน นี้ช่วยให้ฉันในแง่ของและgit pull git pushฉันเปลี่ยน URL จากประเภท HTTPS เป็นประเภท SSH และใช้งานได้ - git pullหยุดขอรหัสผ่าน
Michael R

1
การสลับสามารถทำได้ด้วยคำสั่งนี้:git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
กุยโด

17

ฉันต้องดำเนินการ:

eval `ssh-agent -s`
ssh-add

หมายเหตุ : คุณจะต้องทำสิ่งนี้อีกครั้งหลังจากรีสตาร์ททุกครั้ง หากคุณต้องการหลีกเลี่ยงมันให้ใส่มันในไฟล์ " .bashrc " ของคุณซึ่งอยู่ในC:\Users\<<USERNAME>>\.bashrcwindows มันอาจจะถูกซ่อนอยู่ดังนั้นตรวจสอบให้แน่ใจว่าคุณสามารถเห็นไฟล์ที่ซ่อนอยู่

วิธีการแก้ปัญหาที่พบที่นี่


15

หากคุณใช้ windows สิ่งนี้ใช้ได้สำหรับฉัน:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

มันจะถามวลีรหัสผ่านในคำสั่งที่สองและนั่นคือมัน


1
เมื่อคุณออกจากระบบและเชื่อมต่อใหม่คุณต้องป้อนรหัสผ่านใหม่ทุกครั้ง
trainoasis


11

คุณต้องใช้เอเจนต์ ssh
TL; DR : เปิดเทอร์มินัลแล้วลอง

ssh-add

ก่อนที่จะผลักดัน ป้อนข้อความรหัสผ่านของคุณเมื่อได้รับแจ้ง

ตรวจสอบคำตอบ StackExchange ดั้งเดิมที่นี่


6

ฉันเพิ่งอัพเกรดเป็น macOS Mojave และติดตั้งเครื่องมือบางอย่างผ่านทาง homebrew ซึ่งดูเหมือนจะสลับเวอร์ชั่นของ Apple สำหรับเวอร์ชั่นssh-addที่แตกต่างกัน รุ่นเริ่มต้นของฉันssh-add ไม่ได้มี-Kตัวเลือก สิ่งนี้นำไปสู่ข้อผิดพลาดต่อไปนี้:

# ssh-add: illegal option -- K

คุณสามารถดูเวอร์ชันของssh-addคุณได้ด้วยการเรียกใช้which ssh-addคุณมีโดยการทำงาน

(ของฉันถูกเก็บไว้ใน/usr/local/bin/ssh-add)

ในการแก้ไขปัญหานี้ฉันต้องชี้กุญแจไปที่เวอร์ชันของ Apple :

/usr/bin/ssh-add -K ~/.ssh/id_rsa

Git / GitHub ทำงานได้อย่างสมบูรณ์แบบหลังจากนั้น สำหรับข้อมูลเพิ่มเติมดู: ข้อผิดพลาด: ssh-add: ตัวเลือกที่ผิดกฎหมาย - K


มีปัญหาเดียวกันกับ iMac ของฉันกับ High Sierra 10.13.6 - มันใช้งานได้สำหรับฉัน ขอบคุณ!
emccracken

ฉันทำงานได้ดี & เริ่มสุ่มถามวลีรหัสผ่านอีกครั้ง - อาจเกิดขึ้นหลังจากการอัปเดตล่าสุด สิ่งนี้แก้ไขได้! ขอบคุณ
mc01

5

สำหรับ Mac OSX Sierra ฉันพบว่าการแก้ไขที่แนะนำในปัญหา github สำหรับ Open Radar ช่วยแก้ไขปัญหาของฉัน ดูเหมือนว่า Sierra เปลี่ยนพฤติกรรมเริ่มต้น (ฉันเริ่มมีปัญหานี้หลังจากอัพเกรด)

สิ่งนี้ฉันพบว่ามีประโยชน์เป็นพิเศษ: https://github.com/lionheart/openradar-mirror/issues/15361#issuecomment-249059061

ssh-add -A 

ส่งผลให้ตัวตนของฉันถูกเพิ่มไปยังตัวแทนหลังจากฉันวิ่ง

ssh-add -K {/path/to/key}

เพื่อสรุปใน OSX.12:

ssh-add -K {/path/to/key}
ssh-add -A 

ควรส่งผลให้:

Identity added: {/path/to/file} ({/path/to/file})

แก้ไข: ฉันสังเกตเห็นในครั้งต่อไปที่ฉันทำการรีบูทแบบเต็ม (หรือที่ตัวแทนหยุดและรีสตาร์ท) สิ่งนี้ไม่ทำงาน โซลูชันที่สมบูรณ์ยิ่งขึ้นคือสิ่งที่ @ChrisJF พูดถึงข้างต้น: การสร้าง~/.ssh/configไฟล์ นี่คือผลลัพธ์ของฉัน:

$ cat ~/.ssh/config
Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

คุณสามารถเพิ่มIdentityFileรายการได้มากเท่าที่คุณต้องการ แต่นี่เป็นการตั้งค่าเริ่มต้น นี่คือคำตอบ "แนวโน้ม" ที่ลิงค์ openradar ด้านบน ATM เช่นกัน


ตัวแก้ไขได้แก้ไขปัญหาของฉันแล้ว MacOS Mojave 10.14.3
Jose

4

ทำงานในLinuxMint / Ubuntu

ทำตามขั้นตอนต่อไปนี้

ขั้นตอนที่ 1:

ไปที่ไฟล์ => /.ssh/config

บันทึกบรรทัดด้านล่างลงในไฟล์

Host bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /home/apple/myssh-privatekey
    AddKeysToAgent yes

อย่าลืมเพิ่มบรรทัดนี้AddKeysToAgent ใช่

ขั้นตอนที่ 2:

เปิดเทอร์มินัลและเพิ่มชุดคีย์ให้กับssh-add

$ ssh-add -k /home/apple/myssh-privatekey

ให้ข้อความรหัสผ่าน


3

ฉันได้ตั้งข้อความรหัสผ่านไว้แล้ว แต่ด้วยเหตุผลบางอย่างมันจะไม่จดจำอีกต่อไป ดังนั้นฉันเพิ่งเพิ่มไฟล์ข้อมูลประจำตัวในพวงกุญแจของฉันอีกครั้งโดยใช้ssh-add -Kและมันหยุดถามรหัสผ่านของฉัน


นี่เป็นการโหลดคีย์เท่านั้นและไม่ใช่ใบรับรอง
numediaweb


2

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

ใช้สิ่งที่osxkeychain helperชอบ:

  1. ค้นหาว่าคุณติดตั้งไว้หรือไม่

    git credential-osxkeychain

  2. หากยังไม่ได้ติดตั้งคุณจะได้รับแจ้งให้ดาวน์โหลดเป็นส่วนหนึ่งของเครื่องมือ Xcode Command Line

  3. หากติดตั้งแล้วให้บอก Git ให้ใช้งานosxkeychain helperโดยใช้ค่ากำหนดส่วนกลางcredential.helper:

    git config --global credential.helper osxkeychain

ครั้งต่อไปที่คุณโคลน URL ของ HTTPS คุณจะได้รับแจ้งให้ใส่ชื่อผู้ใช้ / รหัสผ่านและให้สิทธิ์การเข้าถึงพวงกุญแจ OSX หลังจากคุณทำเช่นนี้เป็นครั้งแรกควรบันทึกในพวงกุญแจของคุณและคุณจะไม่ต้องพิมพ์อีกครั้ง


2

คำตอบนี้มีไว้สำหรับผู้ใช้ windows และยังมีความเกี่ยวข้องเท่ากันหากคุณมีปัญหาในการโคลนด้วย tfs, github หรือ gitlab บนระบบปฏิบัติการอื่น ๆ

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

มีสาเหตุหลายประการที่การพิสูจน์ตัวตนโดยใช้คีย์เริ่มต้นอาจล้มเหลว ต่อไปนี้เป็นกรณีที่พบบ่อยที่สุด:

ก) ssh-agent ไม่สามารถค้นหาไฟล์กุญแจส่วนตัวเริ่มต้นซึ่งเป็น id_rsaและไม่มีการระบุเส้นทางหลักอื่น ๆ อย่างชัดเจน

b) พับลิกคีย์ที่เก็บในเซิร์ฟเวอร์ไม่ถูกต้อง

ค) เส้นทางที่คุณพยายามโคลนไม่ถูกต้อง

ไม่ว่าในกรณีใดการแก้ไขปัญหาก่อนอื่นให้ดำเนินการคำสั่ง git clone ด้วยการบันทึก verbose ด้วยคำสั่ง:

GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone ssh://pathToYourRepo

คุณสามารถทำตามแต่ละขั้นตอนในบันทึกเพื่อรับสัญชาติญาณของปัญหาที่อาจเกิดขึ้น


การแก้ไขปัญหาในกรณีของ (a)

  • ตรวจสอบให้แน่ใจว่าคุณมีชื่อคีย์เริ่มต้น id_rsa ในไดเรกทอรี. ssh คุณอาจระบุชื่อคีย์ที่แตกต่างกันเมื่อสร้างคีย์ด้วยคำสั่ง ssh-keygen หรืออาจไม่มีคีย์ใด ๆ เลย)
  • ในกรณีที่คุณต้องการระบุคีย์อื่นสำหรับการตรวจสอบสิทธิ์ให้ใช้คำสั่งต่อไปนี้:

    ssh-agent bash -c 'ssh-add ~/.ssh/anotherKey; git clone ssh://pathToYourRepo'
    

การแก้ไขปัญหาในกรณีของ (b)

  • ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างสีขาวเพิ่มเติมเมื่อเก็บคีย์สาธารณะในเซิร์ฟเวอร์

การแก้ไขปัญหาในกรณีของ (c)

  • ตรวจสอบให้แน่ใจว่าคุณไม่ได้พยายามโคลนด้วยเส้นทาง https ของพื้นที่เก็บข้อมูล

1

หากคุณใช้ ssh url สำหรับ git เมื่อได้รับแจ้งให้ใส่รหัสผ่านสำหรับ ssh ให้ใส่ชื่อผู้ใช้เป็น " git " และรหัสผ่านเป็นรหัสผ่านเข้าสู่ระบบของระบบของคุณ


การเปลี่ยนประเภท URL ระยะไกลของที่เก็บจากHTTPSเพื่อSSHแก้ไขปัญหาของฉัน ขอบคุณ @MichaelR บทความของคุณมีประโยชน์จริงๆ แต่ฉันไม่ได้อ่านอะไรเลย: D
Geradlus_RU

1

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

หลังจากฉันสร้างรหัสและคัดลอกไปยังเซิร์ฟเวอร์:

ssh-keygen
ssh-copy-id -i ~/.ssh/12gpu_server.pub lerner@192.168.20.160

ฉันพบว่ามันใช้งานไม่ได้

จากนั้นฉันไปตรวจสอบ~/.ssh/configไฟล์ฉันเห็นสิ่งนี้ที่ด้านล่าง:

Host *
IdentitiesOnly yes

จากนั้นฉันจะเพิ่มสิ่งนี้ด้านบน:

Host 12gpu
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/12gpu_server

ssh 12gpuฉันเพียงแค่สามารถเข้าสู่ระบบโดยการป้อน

จากนั้นคุณสามารถเพิ่มหลายคีย์ ssh โดยใช้ชื่อที่คุณชื่นชอบและคุณจะต้องเพิ่มการตั้งค่าเช่นสี่บรรทัดด้านบนลงในไฟล์ปรับแต่ง

โฮสต์คือชื่อที่คุณต้องการป้อนเมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์ในภายหลัง ชื่อโฮสต์เป็น IP ของเซิร์ฟเวอร์หรือโดเมนเช่น github.com; ผู้ใช้คือชื่อผู้ใช้ที่คุณลงชื่อเข้าใช้เซิร์ฟเวอร์เช่นชื่อผู้ใช้หรือ git สำหรับ github หรือ gitlab; และIdentityFileเป็นไฟล์ที่คุณเก็บคีย์ที่คุณสร้างขึ้น


1

โดยทั่วไปนี่คือขั้นตอนเพื่อให้คุณทำการเชื่อมต่อระยะไกลไปยังเซิร์ฟเวอร์ของคุณโดยใช้ ssh โดยไม่ต้องใช้รหัสผ่าน:

  • สร้างคู่คีย์ส่วนตัวและสาธารณะ rsa

    $ ssh-keygen -t rsa -b 4096 -C "your comments"
    
  • คัดลอกกุญแจสาธารณะของคุณและเข้าสู่เซิร์ฟเวอร์ระยะไกลของคุณ

  • เพิ่มกุญแจสาธารณะของคุณไปที่. ssh / authorized_keys

  • หากคุณมีหลายคีย์ ssh ในคอมพิวเตอร์ของคุณคุณอาจต้องเพิ่มคีย์โดยใช้ ssh-add

    $ ssh-add /path/to/private/key

  • จากนั้นลอง ssh ไปยังเซิร์ฟเวอร์ของคุณ

    $ ssh username@your_ip_address

ที่มา: http://diary-of-programmer.blogspot.com/2018/08/tips-how-to-ssh-to-your-digitalocean.html



0

หากคุณใช้ Windows และ GITโดยไม่ใช้เครื่องมือของบุคคลที่สามและรหัสของคุณไม่ได้รับการรักษาความปลอดภัยด้วยรหัสผ่าน / วลีรหัสผ่านใช้สิ่งนี้:

  1. ต้องตั้งค่าตัวแปรสภาพแวดล้อมHOMEเป็นโปรไฟล์ผู้ใช้ของคุณ (เช่น C: \ Users \ แล็ปท็อป)
  2. ไปที่ C: \ Users \ Laptop \ .ssh \ folder และแก้ไขไฟล์ "config" (หรือสร้างไฟล์!) ตัวอย่าง: C: \ Users \ Laptop.ssh ​​\ config (หมายเหตุ: ไม่มีที่ท้าย!)
  3. เพิ่มโฮสต์ git-server ของคุณลงในไฟล์ "config" ดังนี้:

    #Example host entry
    Host myhostname.com
        HostName myhostname.com
        User git
        IdentityFile c:/users/laptop/.ssh/id_rsa.pub
        PasswordAuthentication no
        Port 422
    
  4. บันทึกไฟล์และโคลนที่เก็บดังนี้:

    git clone ssh: //myhostname.com/git-server/repos/picalc.git

คุณสามารถใช้พารามิเตอร์การกำหนดค่าเพิ่มเติมสำหรับรายการโฮสต์ไฟล์ "config" สามารถพบได้ในโฟลเดอร์การติดตั้ง git ในพื้นที่ของคุณเช่น " C: \ Program Files \ Git \ etc \ ssh \ ssh_config " ข้อความที่ตัดตอนมา:

# Host *
#   ForwardAgent no
#   ForwardX11 no
#   RhostsRSAAuthentication no
#   RSAAuthentication yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/identity
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519
#   Port 22
#   Protocol 2
#   Cipher 3des
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
#   ProxyCommand ssh -q -W %h:%p gateway.example.com
#   RekeyLimit 1G 1h

0

ปัญหาเดียวกันกับฉันและวิธีแก้ไขคือ:

ดูเอกสาร github นี้เพื่อแปลง URL ของรีโมทจาก https เป็น ssh ในการตรวจสอบว่า URL ของรีโมตเป็น ssh หรือ https ให้ใช้ git remote -v วิธีเปลี่ยนจาก https เป็น ssh: git รีโมต set-url กำเนิด git@github.com: USERNAME / REPOSITORY.git @jeeYem


0

Mobaxterme มีอินเทอร์เฟซ UI สำหรับมัน

setting > configuration > SSH > SSH Agent > [check] Use internal SSH agent "moboAgent" > add [your id_rsa and restart mobaxterme to set changes]


0

คีย์ SSH - ยังคงขอรหัสผ่านและวลีรหัสผ่าน

ถ้าใน Windows และใช้PuTTYเป็นตัวสร้างคีย์ SSHวิธีแก้ปัญหาที่ง่ายและรวดเร็วนี้กลับกลายเป็นว่าเป็นโซลูชันเดียวที่ทำงานได้สำหรับฉันโดยใช้บรรทัดคำสั่ง windows ธรรมดา:

  1. การติดตั้งฉาบของคุณควรมาพร้อมกับหลายปฏิบัติการอื่น ๆ ในกลุ่มpageant.exeและplink.exe
  2. เมื่อสร้างคีย์ SSH ด้วย PuttyGen คีย์จะถูกเก็บไว้กับ.ppkส่วนขยาย
  3. Run "full\path\to\your\pageant.exe" "full\path\to\your\key.ppk"( ต้องอ้างอิง) สิ่งนี้จะดำเนินการpageantบริการและลงทะเบียนรหัสของคุณ (หลังจากป้อนรหัสผ่าน)
  4. ตั้งค่าตัวแปรสภาพแวดล้อมGIT_SSH=full\path\to\plink.exe( ต้องไม่ยกมา) นี่จะเปลี่ยนเส้นทางคำสั่งที่เกี่ยวข้องกับการสื่อสารของ git ไปยังplinkที่จะใช้pageantบริการสำหรับการตรวจสอบความถูกต้องโดยไม่ต้องขอรหัสผ่านอีกครั้ง

ทำ!

หมายเหตุ 1: เอกสารนี้จะเตือนเกี่ยวกับคุณสมบัติบางอย่างเมื่อทำงานกับการGIT_SHHตั้งค่าตัวแปรสภาพแวดล้อม ฉันสามารถpush, pull, fetchที่มีจำนวนของพารามิเตอร์เพิ่มเติมคำสั่งใด ๆ และทุกอย่างทำงานได้ดีสำหรับฉัน (โดยไม่จำเป็นต้องเขียนสคริปต์พิเศษใด ๆ ที่เป็นปัญหานั้น)

Note2:เส้นทางสู่PuTTYการติดตั้งมักจะเป็นPATHดังนั้นอาจถูกละเว้น อย่างไรก็ตามฉันชอบระบุเส้นทางแบบเต็ม

ระบบอัตโนมัติ:

ไฟล์ชุดต่อไปนี้สามารถเรียกใช้ก่อนที่จะใช้ git จากบรรทัดคำสั่ง มันแสดงให้เห็นถึงการใช้งานการตั้งค่า:

git-init.bat
   @ECHO OFF
   :: Use start since the call is blocking
   START "%ProgramFiles%\PuTTY\pageant.exe" "%HOMEDRIVE%%HOMEPATH%\.ssh\id_ed00000.ppk"
   SET GIT_SSH=%ProgramFiles%\PuTTY\plink.exe

อย่างไรก็ตามฉันมีการGIT_SSHตั้งค่าตัวแปรSystemPropertiesAdvanced.exe > Environment variablesและpageant.exeเพิ่มเป็นRunคีย์รีจิสทรี (*)

(*) ขั้นตอนในการเพิ่มRunรีจิสตรีคีย์>

  1. วิ่ง regedit.exe
  2. นำทางไปยัง HKEY_CURRENT_USER > Software > Microsoft > Windows > CurrentVersion > Run
  3. ทำ (เมนู) Edit > New > String Value
  4. ป้อนชื่อโดยพลการ (แต่ไม่ซ้ำกัน)
  5. ทำ (เมนู) Edit > Modify...(หรือดับเบิลคลิก)
  6. ป้อนพา ธ ที่อยู่ในเครื่องหมายคำพูดไปที่pageant.exeและpublic keyเช่น"C:\Program Files\PuTTY\pageant.exe" "C:\Users\username\.ssh\id_ed00000.ppk"(โปรดสังเกตว่า%ProgramFiles%ตัวแปรอื่น ๆ ไม่ทำงานที่นี่ยกเว้นการเลือกExpandable string valueแทนที่String valueในขั้นตอนที่ 3)

0

ตามที่อธิบายไว้ในการโคลน repo Git จาก VSTS มากกว่า SSH ถามรหัสผ่าน! ไม่คาดฝัน

ปัญหาอาจเกิดจากการรับรองความถูกต้องของรหัสสาธารณะล้มเหลวดังนั้นจึงขอรหัสผ่านของบัญชี บริษัท ของฉัน

สิ่งนี้จะไม่เกิดขึ้นหากการพิสูจน์ตัวตนกุญแจสาธารณะสำเร็จ

ดังนั้นคุณอาจตรวจสอบ id_rsa.pub และสร้างใหม่


-1

ฉันคิดว่าคำตอบของ @sudo bangbang ควรเป็นที่ยอมรับ

เมื่อสร้างคีย์ ssh คุณเพียงกด "Enter" เพื่อข้ามการพิมพ์รหัสผ่านของคุณเมื่อมันพร้อมท์ให้คุณกำหนดรหัสผ่าน

นั่นหมายความว่าคุณไม่จำเป็นต้องใช้รหัสผ่านเมื่อใช้คีย์ ssh ดังนั้นโปรดจำไว้ว่าเมื่อสร้างคีย์ ssh อย่าป้อนรหัสผ่านเพียงกด 'Enter' เพื่อข้ามไป


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