ฉันจะเพิ่มคีย์ส่วนตัว SSH ของฉันลงใน Keychain ได้อย่างถาวรได้อย่างไรจึงจะสามารถใช้งาน ssh ได้โดยอัตโนมัติ


419

ดูเหมือนว่าssh-add -K ~/.ssh/id_rsaจะโหลดกุญแจของคุณ แต่จะขอรหัสผ่านทุกครั้งที่คุณรีบูต

ฉันกำลังมองหาโซลูชันที่ไม่ต้องการให้ฉันป้อนรหัสผ่านกุญแจระหว่างการเข้าสู่ระบบอีกครั้ง


1
คุณช่วยพูดเพิ่มอีกนิดได้ไหมเมื่อรหัสผ่านแจ้งขึ้นมาให้คุณ ผมถามเพราะผมมี SSH-สำคัญสำหรับเซิร์ฟเวอร์ระยะไกลซึ่งผมมั่นใจคุณจะไม่เหมือนกันเป็นรหัสผ่านเข้าสู่ระบบ Mac หรืออะไรและฉันไม่ได้มีการใส่รหัสผ่านสำหรับ SSH-ที่สำคัญสำหรับปีที่ผ่านมา ฉันสามารถเปิดเทอร์มินัลพิมพ์ "ssh <server>" และฉันอยู่ที่นั่น ฉันคิดว่าฉันตั้งค่าคีย์นี้เป็นครั้งแรกภายใต้ OSX 10.5 id_dsa แต่ฉันไม่คิดว่ามันจะสำคัญ
Michael H.

id_rsaรหัสของฉันมีรหัสผ่าน
โซริน

ฉันยังมีปัญหาที่ฉันแก้ไขได้เมื่อนานมานี้ซึ่งฉันจำไม่ได้ว่าฉันทำอะไรไป แต่ฉันคิดว่าความคิดคือไม่ต้องวิ่งssh-addแต่วิ่งsshตรงๆ คุณควรจะมีหน้าต่างโผล่ขึ้นมาซึ่งจะเป็นวลีรหัสผ่านสำหรับกุญแจและมีช่องทำเครื่องหมายเพื่อให้คุณเก็บไว้ในพวงกุญแจของคุณ
Harald Hanche-Olsen

1
@ โซริน - ก็เช่นกัน! ฉันต้องป้อนมันครั้งหนึ่งนานมาแล้วและ Mac ได้บันทึกไว้ให้ฉันตั้งแต่นั้นเป็นต้นมา หวังว่าคำแนะนำของ Harald จะช่วยได้
Michael H.

คุณหมายถึงรหัสผ่าน Keychain (เช่นรหัสผ่านเข้าสู่ระบบของคุณ) หรือรหัสผ่านของคีย์หรือไม่ ถ้าเป็นหลังข้อความรหัสผ่านของคุณจะถูกเก็บไว้ใน Keychain อย่างแน่นอนหรือไม่ คุณสามารถตรวจสอบสิ่งนี้ได้ด้วยการเปิด Keychain Access และค้นหามันใน Keychain Keychain
Mathew Hall

คำตอบ:


687

บน OSX ssh-addไคลเอ็นต์เนทีฟมีอาร์กิวเมนต์พิเศษเพื่อบันทึกข้อความรหัสผ่านของไพรเวตคีย์ในพวงกุญแจ OSX ซึ่งหมายความว่าข้อมูลเข้าสู่ระบบปกติของคุณจะปลดล็อคเพื่อใช้กับ ssh บน OSX Sierra และใหม่กว่าคุณต้องกำหนดค่า SSH ให้ใช้พวงกุญแจทุกครั้ง (ดูขั้นตอนที่ 2 ด้านล่าง)

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

ขั้นตอนที่ 1 - เก็บกุญแจไว้ในพวงกุญแจ

ทำสิ่งนี้เพียงครั้งเดียว:

ssh-add -K ~/.ssh/[your-private-key]

ป้อนข้อความรหัสผ่านที่สำคัญและคุณจะไม่ถูกถามอีก

(หากคุณใช้ OSX เวอร์ชันพรีเซียร์คุณก็ทำเสร็จแล้วไม่จำเป็นต้องทำขั้นตอนที่ 2)

ขั้นตอนที่ 2 - กำหนดค่า SSH ให้ใช้พวงกุญแจเสมอ

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

การแก้ปัญหาค่อนข้างง่ายและมีการระบุไว้ในความคิดเห็นหัวข้อ GitHubนี้ นี่คือวิธีการตั้งค่า:

  1. ตรวจสอบให้แน่ใจว่าคุณได้ทำตามขั้นตอนที่ 1 ด้านบนเพื่อเก็บกุญแจไว้ในพวงกุญแจ

  2. หากคุณยังไม่ได้สร้าง~/.ssh/configไฟล์ ในคำอื่น ๆ ใน.sshไดเรกทอรีใน dir configบ้านของคุณให้ไฟล์ที่เรียกว่า

  3. ใน.ssh/configไฟล์นั้นเพิ่มบรรทัดต่อไปนี้:

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

    เปลี่ยน~/.ssh/id_rsaเป็นชื่อไฟล์จริงของคีย์ส่วนตัวของคุณ หากคุณมีคีย์ส่วนตัวอื่น ๆ ใน~.sshไดเรกทอรีให้เพิ่มIdentityFileบรรทัดสำหรับแต่ละคีย์ ตัวอย่างเช่นฉันมีหนึ่งบรรทัดเพิ่มเติมที่อ่านIdentityFile ~/.ssh/id_ed25519สำหรับคีย์ส่วนตัวที่สอง

    นี่UseKeychain yesคือส่วนสำคัญซึ่งจะบอกให้ SSH มองหาพวงกุญแจ OSX ของคุณเพื่อหาข้อความรหัสผ่านที่สำคัญ

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


2
เกือบจะได้ผลสำหรับฉันแล้ว พวงกุญแจ "เข้าสู่ระบบ" ของฉันปิดใช้งานการล็อกอัตโนมัติแล้วดังนั้นคำตอบของ Matthew Sanabria จึงไม่ได้ใช้ การใช้ssh-add -K ...เพิ่มคีย์ในเอเจนต์ ssh โดยไม่ต้องใส่รหัสผ่าน แต่ใช้กับเซสชันปัจจุบันเท่านั้น หลังจากรีบูตฉันต้องออกคำสั่งใหม่
Poulsbo

4
@Poulsbo & @Abram - ดูการอัปเดตของฉัน Sierra เปลี่ยนพฤติกรรมอัตโนมัติและตอนนี้คุณต้องเรียกใช้ssh-add -Aด้วยตนเองเพื่อโหลดพวงกุญแจที่บันทึกไว้ วิธีแก้ปัญหาที่เป็นไปได้บางอย่างอ้างถึงข้างต้น
trisweb

3
@trisweb ขอบคุณสำหรับเคล็ดลับ วิธีการแก้ปัญหาของ joshbuchea ในการปรับเปลี่ยน.ssh/configไฟล์ดูมีแนวโน้ม! ดูgithub.com/lionheart/openradar-mirror/issues/ …
Poulsbo

2
@ โซรินดูคำตอบที่อัพเดตแล้วและแจ้งให้เราทราบหากคุณมีข้อเสนอแนะใด ๆ ขอบคุณ!
trisweb

9
ใช้งานได้ดี! ในกรณีของฉันฉันจำเป็นต้องใช้การAตั้งค่าสถานะนอกเหนือจากการKเพิ่มกุญแจของฉันในพวงกุญแจและลงทะเบียนวลีรหัสผ่าน ( ssh-add -AK ~/.ssh/[your-private-key]) ขอบคุณ!
youssman

22

ฉันมีปัญหาที่คล้ายกันในการที่ฉันถูกถามทุกครั้งสำหรับวลีรหัสผ่านผับของฉัน

ตามคำแนะนำของผู้ใช้ "trisweb" ด้านบนฉันเปิดใช้ตัวเลือกเหล่านี้เป็น ~ / .ssh / config:

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

แต่มันก็ยังคงได้รับแจ้งทุกครั้งที่ฉันต้องการใช้ ssh

ในที่สุดฉันก็เปิด "ssh -v" และพบบรรทัดแก้ปัญหานี้:

debug1: key_load_private: ป้อนข้อความรหัสผ่านไม่ถูกต้องเพื่อถอดรหัสคีย์ส่วนตัว

ฉันเปิดพวงกุญแจของฉันใน "Keychain Access.app" พบคีย์ที่ชื่อ "SSH: /Users/username/.ssh/id_rsa" แล้วเปิดขึ้น

ฉันคลิก "แสดงรหัสผ่าน" เพื่อเปิดเผยรหัสผ่านและพบว่าข้อความรหัสผ่านในพวงกุญแจนั้นเป็นข้อความรหัสผ่านเก่า

ฉันอัพเดตข้อความรหัสผ่านใน Keychain Access และตอนนี้ทำงานได้โดยไม่ต้องใช้รหัสผ่าน

ฉันสามารถอัปเดตข้อความรหัสผ่านด้วยวลีนี้ได้ด้วย:

ssh-keygen -p -f ~ / .ssh / id_rsa


13

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

  1. เปลี่ยนการตั้งค่าสำหรับพวงกุญแจ "เข้าสู่ระบบ" ของคุณ สมมติว่าคีย์ ssh ของคุณถูกเก็บไว้ในพวงกุญแจ "เข้าสู่ระบบ"

    • เปิดการเข้าถึง Keychain
    • เน้นพวงกุญแจ "เข้าสู่ระบบ"
    • คลิกขวาหรือคลิกตัวเลือกพวงกุญแจ "เข้าสู่ระบบ"
    • ยกเลิกการทำเครื่องหมายที่ช่อง "ล็อคหลังจากไม่มีการใช้งาน X นาที" และช่องทำเครื่องหมาย "ล็อคเมื่อหลับ"
  2. สร้างคีย์ SSH อื่นโดยไม่ใช้ข้อความรหัสผ่าน

    • เปิด Terminal
    • ป้อนคำสั่ง: ssh-keygen -t rsa -b 4096 -C <comment> -f <.ssh/id_rsa>
    • -t สำหรับชนิด -b คือขนาดคีย์ -C คือข้อคิดเห็นไฟล์เอาต์พุต -f (ต้องสร้างไดเร็กทอรีก่อน)
    • อย่าตั้งข้อความรหัสผ่าน
    • นำเข้าคีย์ SSH ไปที่ "การเข้าสู่ระบบ" กับ ssh-add -K <path to ssh key>

คุณไม่ควรได้รับแจ้งให้ใส่รหัสผ่านพวงกุญแจอีกต่อไป


2
โปรดทราบว่าเมื่อเรียกใช้ssh-addจากภายใน SSH security unlock-keychainจะต้องเรียกก่อน นอกจากนี้ฉันไม่ต้องสร้างไดเรกทอรีสำหรับ-fพารามิเตอร์ น่าเสียดายที่ฉันยังต้องโทรsecurity unlocl-keychainในเซสชัน SSH เพื่อเข้าถึงพวงกุญแจการเข้าสู่ระบบซึ่งจะถามรหัสผ่านทุกครั้ง ...
Ohad Schneider

2
จุดรวมคือการมีวลีรหัสผ่านที่สำคัญ ฉันสงสัยว่าการสร้างคีย์ SSH ใหม่มีประโยชน์สำหรับคำถามนี้
สีเทา

7

นอกจากนี้ใน macOS Sierra และ HighSierra (ไม่ทราบเกี่ยวกับเวอร์ชั่นก่อนหน้า) การทำงานssh-add -Aจะทำให้เอเจนต์โหลดคีย์ทั้งหมดที่มีข้อความรหัสผ่านถูกเก็บไว้ใน Keychain ... มีประโยชน์มาก


7

สำหรับทุกที่ที่ไม่ได้ผลข้างต้นปัญหาของฉันดูเหมือนจะเป็นเพราะฉันทำซ้ำUseKeychain yes& AddKeysToAgent yesในทุกโปรไฟล์ / คีย์ลัด ssh ฉันอัปเดต~/.ssh/configไฟล์ของฉันเพื่อประกาศเพียงครั้งเดียวและตอนนี้พวกเขาทั้งหมดโหลดเข้าสู่ระบบโดยไม่ต้องใส่รหัสผ่านเมื่อเริ่มต้นเช่น:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar

-3

เพิ่มรหัสสาธารณะใน:

.ssh/known_hosts

รหัสสาธารณะมักจะเปิดอยู่:

/home/user/.ssh/id_rsa.pub

หวังว่าจะช่วย


8
ฉันคิดว่าหมายถึงauthorized_keys
Rene Larsen

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