ฉันจะบันทึกคีย์ SSH ที่ป้องกันด้วยรหัสผ่านอย่างถาวรได้อย่างไร


9

ฉันใช้ตัวจัดการหน้าต่างที่น่าประทับใจ

ฉันจะเพิ่มรหัสส่วนตัวอย่างถาวรด้วยรหัสผ่านได้อย่างไร

แรงบันดาลใจจากคำตอบที่นี่ฉันได้เพิ่มคีย์ส่วนตัวใน ~ / .ssh / config

เนื้อหาของ ~ / .ssh / config:

IdentityFile 'private key full path'

สิทธิ์ของ ~ / .ssh / config: 0700

แต่มันไม่ได้ผลสำหรับฉัน

ถ้าฉันเพิ่มคีย์ด้วยตนเองในทุกเซสชันมันใช้งานได้ แต่ฉันกำลังมองหาวิธีที่หรูหรากว่า (ไม่ใช่ใน. bashrc)

แก้ไข :

  • ใช้รุ่นGnome classic (ไม่มีเอฟเฟกต์)

หลังจากเพิ่มคีย์ SSH ssh-copy-ifไปยังโฮสต์ระยะไกลฉันได้รับพรอมต์ต่อไปนี้ในเทอร์มินัล (เทอร์มินัล GNOME 3.0.1) เมื่อฉันลงชื่อเข้าใช้:

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • ใช้เครื่องมือจัดการหน้าต่างที่น่ากลัว v3.4.10 ฉันมีอยู่แล้วgnome-keyring-dameonดังนั้นฉันจึงฆ่า pid ตัวอื่นแล้วเรียกใช้gnome-keyring-daemon --start | grep SOCK(ฉันได้เพิ่มเข้าไปใน. profile) เอาต์พุต (grep):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

ฉันทำตามขั้นตอนเดียวกันแน่นอนและในทำนองเดียวกันฉันไม่ได้รับกล่องโต้ตอบ ssh-add GUI

แก้ไข 2 :

ฉันสร้างรหัสผ่านป้องกันใหม่จาก Ubuntu 11.10 บนเครื่องเสมือนและฉันยังคงไม่สามารถรับรหัสผ่านได้

แก้ไข 3 : ดูเหมือนว่าสิ่งนี้ไม่สามารถทำงานในตัวจัดการหน้าต่างที่ยอดเยี่ยม :( และอาจเป็นไปได้อื่น ๆ ..


1
จุดประสงค์ของการเพิ่มคีย์ SSH ที่ป้องกันด้วยรหัสผ่านคืออะไร มันทำลายวัตถุประสงค์ ...
MarkovCh1

3
@Syzygy คุณพิมพ์รหัสผ่านจากบริการและแอพที่แตกต่างกันเสมอหรือคุณใช้พวงกุญแจเพื่อปลดล็อครหัสผ่านของคุณด้วยรหัสผ่านเข้าสู่ระบบของคุณ?
pl1nk

มีความคิด / คำถามอื่น ๆ อีกมากมายไหม pl1nk ช่วงเวลาผ่อนผันค่าหัวจะหมดอายุเร็ว ๆ นี้ :-)
ish

@izx ฉันได้ตรวจสอบทุกสิ่งที่คุณพูดถึงและเป็นไปตามคาด ดังที่ฉันกล่าวถึงการอัปเดตของฉันฉันได้ใช้ Gnome ด้วย ฉันจะยื่นข้อบกพร่องหรือไม่?
pl1nk

คุณอาจพบปมบางอย่างที่นี่ ดูเหมือนว่าลำดับการเริ่มต้นของสิ่งสำคัญและสำหรับ gnome-keyring-daemon การไปยัง dbus นั้นมีความสำคัญเช่นกัน
John S Gruber

คำตอบ:


2

หากคุณกำลังใช้ Unity หรือผู้จัดการเซสชันที่เริ่ม gnome-keyring-daemon คุณสามารถใช้ Seahorse (รหัสผ่านและกุญแจ) เพื่อสร้างรหัสกำหนดกุญแจกำหนดรหัสผ่านและแจกจ่ายกุญแจสาธารณะให้กับ คอมพิวเตอร์ที่คุณจะใช้กับ ssh ไม่จำเป็นต้องใช้คำสั่งเทอร์มินัล

คุณสร้างรหัสผ่านโดย:

  1. เลือก File-> New และเลือก Secure Shell Key กดดำเนินการต่อ

  2. Create and set upพิมพ์ชื่อที่อธิบายและเลือก

  3. คุณจะได้รับแจ้งให้ป้อนคีย์วลีสองครั้ง (ครั้งที่สองเพื่อตรวจสอบว่าคุณไม่ได้ป้อนผิดในครั้งแรก

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

ตอนนี้My Personal Keysแท็บจะแสดงคีย์

สมมติว่า gnome-keyring-daemon เริ่มต้นอย่างถูกต้องเมื่อคุณลงชื่อเข้าใช้ Lightdm และอีกครั้งโดยตัวจัดการเซสชั่นของคุณเมื่อคุณใช้รหัสครั้งแรกกับ ssh คุณจะได้รับพร้อมท์สำหรับ keyphrase ในกล่องโต้ตอบนี้คุณสามารถระบุคีย์วลีได้เลือกตัวDetailsควบคุมและขอให้ปลดล็อคพวงกุญแจทุกครั้งที่คุณลงชื่อเข้าใช้ - ให้รหัสนี้โดยอัตโนมัติ กดOK

คุณอาจไม่ได้รับแจ้งด้วยวิธีนี้หากมีกุญแจอื่นสำหรับการเข้าสู่ระบบคอมพิวเตอร์ระยะไกล

หลังจากสิ่งนี้สำเร็จแท็บ Seahorse แรกPasswordsจะแสดงรายการ "ปลดล็อกรหัสผ่าน" สำหรับชื่อคีย์ คลิกที่สามเหลี่ยมข้างหน้า " รหัสผ่าน:เข้าสู่ระบบ" เพื่อดู


ดังนั้นฟังก์ชั่นนี้ไม่ทำงานกับ Awesome WM ฉันต้องการใช้ Awesome ต่อไปดังนั้นฉันจะใช้วิธีการแก้ปัญหาต่อไป
pl1nk

19

การทำให้คีย์ SSH ที่ป้องกันด้วยรหัสผ่านยังคงมีอยู่ตลอดเซสชันและทำการรีบูต

นี่อาจเป็นสิ่งที่คุณต้องการ: การป้อนข้อความรหัสผ่านที่สำคัญจะทำให้สามารถใช้ได้ตลอดเวลาที่คุณลงชื่อเข้าใช้ซึ่งจะใช้ได้กับผู้ใช้ส่วนใหญ่ที่ใช้เดสก์ท็อป Unity หรือ Gnome

  • เมื่อคุณเชื่อมต่อหลังจากเพิ่มกุญแจสาธารณะไปยังเซิร์ฟเวอร์ระยะไกลคุณจะได้รับกล่องโต้ตอบ GUI ssh-add:

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

  • ขยาย "รายละเอียด" โดยคลิกที่สามเหลี่ยมและคุณจะได้รับด้านล่าง ค่าเริ่มต้นคือ "ล็อคกุญแจเมื่อฉันออกจากระบบ" ซึ่งคุณจะต้องป้อนรหัสผ่านหนึ่งครั้งต่อเซสชัน:

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

  • เปลี่ยนเป็นปลดล็อคโดยอัตโนมัติ ... ทุกครั้งที่ฉันเข้าสู่ระบบซึ่งหมายความว่ามันจะทำงานทุกครั้งที่คุณเข้าสู่เซสชันของคุณ - มันเป็น "ควบคุม" โดยรหัสผ่านผู้ใช้ของคุณ มันจะคงอยู่ตลอดการเรียบเครื่อง

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

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


หากคุณใช้ AwesomeWM

ทดสอบกับการติดตั้งใหม่ของ AwesomeWM ในรหัสผู้ใช้ใหม่

  • โดยค่าเริ่มต้นAwesomeWMใช้ssh-agent:

    $ ส่งออก | grep SSH
    ประกาศ -x SSH_AGENT_PID = "5479"
    ประกาศ -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • เพื่อให้ขั้นตอนข้างต้นใช้งานได้คุณต้องใช้gnome-keyring-daemonเป็น SSH authentication daemon ไม่ใช่ ssh-agent เมื่อคุณเข้าสู่ระบบโดยใช้ lightdm, PAM เริ่มต้นgnome-keyring-daemonที่จะพยายามปลดล็อคกุญแจเข้าสู่ระบบด้วยรหัสผ่านปลดล็อคของคุณ แต่คุณต้องเพิ่มการกำหนดค่าของคุณเพื่อให้มันทำงานและใช้งานได้

  • เพิ่มรายการต่อไปนี้ในตอนท้ายของคุณ~/.xprofile:

      #! / bin / ทุบตี
      Eval $ (gnome-keyring-daemon - เริ่มต้น)
      ส่งออก SSH_AUTH_SOCK
      ส่งออก GNOME_KEYRING_PID
      ส่งออก GNOME_KEYRING_CONTROL
    

คำสั่งใน~/.xprofileไฟล์จะถูกดำเนินการโดย Xsession ก่อนที่จะเริ่มน่ากลัวจัดการหน้าต่างและจะผูกมันไปยังgnome-keyring-daemon --loginขั้นตอนการเริ่มต้นโดย PAM ผ่านตัวแปรสภาพแวดล้อมดังกล่าวข้างต้น

  • ออกจากระบบกลับสู่ lightdm และกลับเข้าสู่ระบบและตอนนี้เมื่อคุณทำssh user@hostคุณควรจะได้รับป๊อปอัปด้านบน - ใช้สิ่งเหล่านั้นเพื่อถอดรหัสคีย์ส่วนตัวของคุณใน ~ / .ssh / และบันทึกกุญแจส่วนตัวของคุณไปที่พวงกุญแจ gnome-keyring

วิธีแก้ปัญหาทั่วไปสำหรับระบบจัดการหน้าต่าง / เดสก์ท็อป

  • คือการใช้แทนgnome-keyring-daemon ssh-agentสำหรับสิ่งนี้คุณต้องทำงานgnome-keyring-daemon และเริ่มต้นใช้งานและทำสิ่งนี้หลังจากssh-agentเริ่มหรือไม่เริ่มssh-agentเลย

  • ssh(อันที่จริง ssh-add) ตัดสินใจว่าตัวแทนการตรวจสอบความถูกต้องที่จะเรียกขึ้นอยู่กับค่าของSSH_AUTH_SOCKตัวแปรสภาพแวดล้อมซึ่งสามารถตรวจสอบได้โดยการพิมพ์export | grep SOCK

  • นี่คือฟอร์มSSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130สำหรับssh-agent (ไม่ใช่สิ่งที่คุณต้องการที่จะสามารถบันทึกคีย์ของคุณ)

  • แต่ของฟอร์มSSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"สำหรับgnome-keyring-daemon (ซึ่งคุณต้องการ)

  • ดังนั้นให้ตรวจสอบค่าและตรวจสอบps aux | grep keyringว่าgnome-keyring-daemonนั้นกำลังทำงานอยู่และหากเป็นเช่นนั้นให้เริ่มต้นด้วยผลลัพธ์ของgnome-keyring-daemon --start

  • จากนั้นคุณสามารถตรวจสอบตัวตนที่บันทึกไว้ที่เกี่ยวข้องในคอนโซลโดยการพิมพ์ssh-add -l- ถ้ามันแสดง "no agent" คุณได้ทำผิดพลาดในการกำหนดค่า gnome-keyring-daemon


ฉันไม่ได้เห็นสิ่งนี้! ฉันสามารถใช้คำสั่งใดหรือดีกว่าว่าคำสั่งโต้ตอบนี้เรียก?
pl1nk

@izx เมื่อใช้สิ่งนี้จำเป็นต้องใช้ ssh-add หรือไม่
John S Gruber

@JohnSGruber ไม่ตราบใดที่ยังมีคีย์ส่วนตัวอยู่~/.sshคุณไม่จำเป็นต้องใช้ssh-add- กล่องโต้ตอบจะป๊อปอัปเมื่อใช้งานครั้งแรก โปรดทราบว่านี่ใช้งานได้เฉพาะใน Unity / Gnome - ฉันค้นพบในการแชทว่า OP กำลังใช้AwesomeWMซึ่งไม่สามารถใช้งานได้!
ish

1
@ pl1nk: โปรดดูโซลูชันที่อัปเดตสำหรับ AwesomeWM ในตอนท้ายของคำตอบ
ish

@izx - ขอบคุณสำหรับการสนับสนุนโดยรวมของคุณตรวจสอบคำถามที่อัปเดตของฉัน
pl1nk

2

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

  • สร้างคู่คีย์ส่วนตัว / สาธารณะด้วย ssh-keygen -t dsa
  • คัดลอกกุญแจสาธารณะไปยังเครื่องระยะไกลโดยปกติจะเป็น ~ / .ssh / authorized_keys (ใช้ssh-copy-idสำหรับสิ่งนี้)
  • เรียกใช้ssh-addก่อนที่จะลงชื่อเข้าใช้ระบบระยะไกลสิ่งนี้จะถามวลีรหัสผ่านของคุณและเก็บไว้
  • ลงชื่อเข้าใช้ระบบระยะไกลไม่จำเป็นต้องใช้รหัสผ่าน

ssh-agent อธิบายได้ดีบน. net เช่นที่นี่:

ข้อดีอีกอย่างของ ssh-agent คือถ้าคุณลงชื่อเข้าใช้ระบบระยะไกลด้วยssh -A user@domain.nameคุณสามารถเพิ่ม ssh จากคอมพิวเตอร์ domain.name ไปยังคอมพิวเตอร์เครื่องที่สามที่มีรหัสสาธารณะของคุณโดยไม่ต้องคัดลอกกุญแจส่วนตัวของคุณไปยังคอมพิวเตอร์ domain.name ทุกครั้ง เห็นคีย์ส่วนตัวของคุณมีเพียงความท้าทาย / การตอบสนองเพียงครั้งเดียว)


ฉันจะทำสิ่งนั้นได้อย่างไร ยังไม่ชัดเจนจากคำแนะนำที่คุณส่ง นอกจากนี้อูบุนตูนี้เกี่ยวข้องหรือไม่
pl1nk

ฉันได้แก้ไขโพสต์ของฉันพร้อมคำแนะนำโดยละเอียด
ฟลอยด์

วิธีการแก้ปัญหาของคุณเก็บรหัสผ่านต่อเซสชันนอกจากนี้ในกรณีของฉันดูเหมือนว่ามีความขัดแย้งกับคำพังเพยพวงกุญแจที่คุณเห็นในคำตอบของฉัน
pl1nk

@ pl1nk: ดังนั้นคุณต้องการรหัสผ่านที่จะจัดเก็บในเซสชันต่างๆ - เช่นมีการถามเพียงครั้งเดียวสำหรับการบู๊ตแต่ละครั้ง?
ish

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

-1

คุณสามารถใช้ได้

ssh-add 'filename or fullpath'

คุณจะถูกถามถึงข้อความรหัสผ่านหากรหัสของคุณมีอยู่

จากนั้นคุณสามารถเชื่อมต่อกับรหัสผ่านออก


1
อย่างที่ฉันพูดถึงคำถามของฉันฉันกำลังค้นหาวิธีที่สวยงามกว่า
pl1nk

-2

หากคุณต้องการทำงานกับกุญแจส่วนตัว:

ssh-keygen -t rsa -N ''

แล้ว:

คัดลอก.ssh/id_rsa.pubไปยังเครื่องปลายทาง.ssh/authorized_keysผ่านทาง scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

ทุกอย่างเสร็จเรียบร้อย.

เชื่อมต่อกับเครื่องระยะไกลโดยไม่ต้องใช้รหัสผ่าน:

ssh user@remote_machine

และเราไม่มีพรอมต์รหัสผ่าน


สิ่งนี้จะถามรหัสผ่านกุญแจทุกครั้ง
pl1nk

1
อาจเป็นเพราะเมื่อคุณรัน ssh-keygen -t rsa -N '' คุณจะต้องใส่รหัสผ่าน ดังนั้นเมื่อคุณเรียกใช้คำสั่งข้างต้นอย่าใส่รหัสผ่านเพียงกดปุ่ม "ENTER"
Octávio Filipe Gonçalves

ฉันต้องการรหัสผ่านด้วยรหัสผ่าน ฉันปรับปรุงคำถามของฉัน
pl1nk

1
ตกลงฉันไม่เข้าใจสาเหตุที่คุณต้องการทำด้วยรหัสผ่าน โดยปกติแล้วแนวคิดนี้ใช้เพื่อเชื่อมต่อกับเครื่องระยะไกลที่สามารถจดจำเครื่องไคลเอนต์ได้โดยไม่ต้องมีการตรวจสอบสิทธิ์ ดังนั้นหากไม่ต้องการให้สถานการณ์นี้คุณต้องทำคือดำเนินการเชื่อมต่อ ssh ปกติ ขวา?
Octávio Filipe Gonçalves

1
การบอกผู้คนให้คัดลอกกุญแจสาธารณะของพวกเขาบน Author_keys บนเครื่องระยะไกลนั้นเป็นเรื่องที่โหดร้าย ... ดีกว่ามากคือการใช้คำสั่ง ssh-copy-id user @ remotemachine ซึ่งจะเป็นการล็อครหัสผ่านครั้งแรกจากนั้น ผนวกไม่ได้เขียนทับรหัส
ฟลอยด์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.