ssh-add ไม่คงอยู่ระหว่างการรีบูต


150

ฉันเพิ่มคีย์ ssh ไปยังตัวแทนโดย:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

หลังจากรีบูตเอเจนต์ไม่ได้เพิ่มคีย์นี้อีกต่อไป:

$ ssh-add -l
The agent has no identities.

ทำไมสิ่งนี้ถึงเกิดขึ้น


ตอนนี้ฉันไม่มีเวลาตอบอย่างเต็มที่ แต่ gpg-agent ในโหมด ssh จะทำสิ่งที่คุณต้องการ ลองใช้แทนที่จะเป็นเอสเอส - เอเจนต์ดั้งเดิม ถ้าสิ่งนี้ช่วยให้ฉันสามารถลองและขยายมันเมื่อฉันได้เวลาในภายหลัง
Vality

@Vality: ฉันสงสัยว่า gpg-agent จะขัดขืนกับการรีบู๊ตอย่างต่อเนื่อง
Pavel Šimerda

@ PavelŠimerdaมันจะเข้ารหัสคีย์ส่วนตัวด้วยรหัสผ่านผู้ใช้จากนั้นนำไปใส่$HOME/.gnupg/private-keys-v1.dทันทีที่คุณเพิ่มด้วย ssh-add มันขัดขืนจริงๆ สมมติว่าคุณมีโฮมไดเร็กตอรี่ที่ไม่เปลี่ยนแปลง
Vality

@Vality: ไม่ควรถือว่าเป็นปัญหาด้านความปลอดภัยหรือไม่ คุณไม่สามารถใช้คีย์โดยไม่ต้องใช้ข้อความรหัสผ่านและสามารถทำได้โดยไม่ต้องใช้ตัวแทนหรือไม่
Pavel Šimerda

1
@ PavelŠimerdaไม่ใช่ปัญหาด้านความปลอดภัยเนื่องจากรหัสจะถูกเข้ารหัสด้วยรหัสผ่านของผู้ใช้ แต่ก็ยังต้องการรหัสผ่านที่พิมพ์ทุกครั้งที่ผู้ใช้ลงชื่อเข้าใช้เพื่อถอดรหัส การจัดเก็บคีย์ที่ไม่ได้เข้ารหัสหมายความว่าผู้ใช้ที่มีรูท (หรือขโมยที่นำฮาร์ดดิสก์ของคุณ) สามารถขโมยพวกเขาจากโฮมไดเร็กตอรี่ของคุณด้วย gnupg หากพวกเขาขโมยพวกเขาจะถูกเข้ารหัสด้วยรหัสผ่านของคุณ
Vality

คำตอบ:


174

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

ssh-agent เป็นโปรแกรมที่จะเก็บกุญแจส่วนตัวที่ใช้สำหรับการตรวจสอบกุญแจสาธารณะ (RSA, DSA, ECDSA) แนวคิดคือ ssh-agent เริ่มต้นขึ้นในตอนต้นของเซสชัน X หรือเซสชันล็อกอินและหน้าต่างหรือโปรแกรมอื่น ๆ ทั้งหมดเริ่มต้นเป็นไคลเอนต์ไปยังโปรแกรม ssh-agent ผ่านการใช้ตัวแปรสภาพแวดล้อมเอเจนต์สามารถหาตำแหน่งและใช้สำหรับการพิสูจน์ตัวตนโดยอัตโนมัติเมื่อล็อกอินเข้าสู่เครื่องอื่นโดยใช้ ssh (1)

เอเจนต์เริ่มต้นไม่มีคีย์ส่วนตัวใด ๆ มีการเพิ่มคีย์โดยใช้ ssh-add (1) เมื่อดำเนินการโดยไม่ขัดแย้งจุ๊เพิ่ม (1) เพิ่มไฟล์~/.ssh/id_rsa, ~/.ssh/id_dsa, และ~/.ssh/id_ecdsa ~/.ssh/identityหาก identity มีวลีรหัสผ่าน ssh-add (1) จะถามรหัสผ่านบนเทอร์มินัลว่ามีโปรแกรมหนึ่งหรือจากโปรแกรม X11 ขนาดเล็กหากทำงานภายใต้ X11 หากไม่ใช่กรณีเหล่านี้การตรวจสอบสิทธิ์จะล้มเหลว จากนั้นจะส่งข้อมูลประจำตัวไปยังตัวแทน ตัวตนหลายอย่างสามารถเก็บไว้ในตัวแทน ตัวแทนสามารถใช้ข้อมูลเหล่านี้ใด ๆ โดยอัตโนมัติ ssh-add -lแสดงตัวตนที่ตัวแทนปัจจุบันถืออยู่

macOS Sierra

เริ่มต้นด้วย macOS Sierra 10.12.2 , Apple ได้เพิ่มตัวเลือกการกำหนดค่า UseKeychain สำหรับการกำหนดค่า SSH คุณสามารถเปิดใช้งานคุณลักษณะนี้โดยการเพิ่มของคุณUseKeychain yes~/.ssh/config

Host *
  UseKeychain yes

พวงกุญแจ OSX

ฉันไม่ได้ใช้ OSX แต่พบคำถามและคำตอบนี้ใน SuperUser หัวข้อ: วิธีการใช้ Mac OS X Keychain กับกุญแจ SSH? .

ฉันเข้าใจว่าตั้งแต่ Mac OS X Leopard พวงกุญแจรองรับการเก็บคีย์ SSH ใครช่วยกรุณาอธิบายว่าคุณลักษณะนี้ควรจะทำงานอย่างไร

ดังนั้นจากเสียงคุณสามารถนำเข้าคีย์ SSH ของคุณไปยัง Keychain โดยใช้คำสั่งนี้:

$ ssh-add -K [path/to/private SSH key]

คีย์ของคุณควรคงอยู่ตั้งแต่การบูทถึงบูท

เมื่อใดก็ตามที่คุณรีบูตเครื่อง Mac คีย์ SSH ทั้งหมดในพวงกุญแจของคุณจะถูกโหลดโดยอัตโนมัติ คุณควรจะเห็นกุญแจในแอป Keychain Access และจากบรรทัดคำสั่งผ่าน:

  ssh-add -l

แหล่งที่มา: ผู้ใช้ขั้นสูง - วิธีใช้พวงกุญแจ Mac OS X ด้วยปุ่ม SSH ได้อย่างไร


จริงๆ? บน Linux ฉันไม่มีปัญหานี้ ฉันต้อง "ssh-add my_key" ทุกครั้งที่รีสตาร์ทคอมพิวเตอร์หรือไม่
アレックス

2
@ Alex ~/.ssh/id_rsaในฐานะที่เป็นคำตอบที่อธิบายตัวแทนเพิ่มโดยอัตโนมัติ ฉันเดาว่านี่เป็นที่ตั้งของ keyfile ของคุณบน linux เป็นไปได้ว่าคุณไม่ได้ใช้เอเจนต์คีย์ ssh มาตรฐาน มีคนอื่น ๆ เช่น gnome-keyring-daemon ซึ่งอาจมีพฤติกรรมที่แตกต่างกัน
Patrick

แต่สำหรับ Mac ชื่อ "id_rsa_mac" ฉันจะทำให้ตัวแทนเพิ่มโดยอัตโนมัติได้อย่างไร
アレックス

@ แพทริก: ฉันไม่แน่ใจว่าคลาสสิกssh-agentจะเพิ่มปุ่มใด ๆ โดยอัตโนมัติหรือไม่ ในความคิดของฉันมันเป็นssh-addที่อ่านสถานที่มาตรฐานหรือsshลูกค้าถ้าคุณไม่ได้ใช้ตัวแทน
Pavel Šimerda

5
sidenote ขนาดเล็กหากคำสั่ง ssh-add ของคุณไม่รู้จักแฟล็ก -K คุณอาจใช้เวอร์ชัน macports ของ ssh-add ... คุณสามารถข้ามรุ่น macports โดยระบุพา ธ แบบเต็มไปยังเวอร์ชัน OSX ของ ssh-add เช่นนี้:/usr/bin/ssh-add -K /path/to/private/key
ChrisR

20

ssh-agentเป็นบริการเซสชั่นที่เก็บกุญแจชั่วคราวสำหรับผู้ใช้

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

หากคุณไม่ได้ใช้ข้อความรหัสผ่านและคุณไม่ได้ใช้การส่งต่อตัวแทน (ซึ่งไม่ปลอดภัยสำหรับจุดประสงค์ส่วนใหญ่อยู่แล้ว) คุณไม่จำเป็นต้องใช้ตัวแทนเลย ไคลเอ็นต์ SSH ใด ๆ ควรสามารถอ่านคีย์จากดิสก์ไม่ว่าจะจากตำแหน่งมาตรฐานหรือจากที่ระบุไว้อย่างชัดเจน

ตำแหน่งมาตรฐานแสดงอยู่ในหน้าคู่มือssh(1):

ค่าเริ่มต้นคือ ~ / .ssh / identity สำหรับโปรโตคอลรุ่น 1 และ ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 และ ~ / .ssh / id_rsa สำหรับรุ่นโปรโตคอล 2

เมื่อใช้ตำแหน่งที่ไม่เป็นมาตรฐานคุณสามารถใช้-iสวิตช์เพื่อsshอธิบายในหน้าคู่มือเดียวกันหรือตัวเลือกที่เกี่ยวข้องในไคลเอนต์ SSH ที่คุณใช้


4
+1 สำหรับการสนับสนุนการไม่ใช้งานssh-agent
dg99

7

ในเซียร์รา :

ใช้UseKeychain (ฉันยังไม่ได้ลอง แต่ดูเหมือนว่าจะเป็นวิธีที่ถูกต้องที่สุด)

หรือ

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

หรือสร้างไฟล์ plist~/.bash_profileแทนผนวกกับ

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


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