ฉันจะตั้งค่า SSH ได้อย่างไรฉันจึงไม่ต้องพิมพ์รหัสผ่านและไม่ต้องใช้กุญแจสาธารณะ?


9

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

RSAAuthentication no
PubkeyAuthentication no

ใน/etc/ssh/sshd_config. ฉันไม่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบบนเซิร์ฟเวอร์ดังนั้นฉันจึงไม่สามารถเปลี่ยนตัวเลือกการกำหนดค่าเซิร์ฟเวอร์เหล่านี้หรือตัวเลือกอื่น ๆ ได้ (แน่นอนว่าฉันสามารถควบคุมการกำหนดค่าไคลเอนต์ได้อย่างสมบูรณ์: OpenSSH 5.8 บน Linux)

ตัวเลือกของฉันคืออะไรและโดยเฉพาะอย่างยิ่งตัวเลือกที่ปลอดภัยที่สุดคืออะไรเพื่อหลีกเลี่ยงการพิมพ์รหัสผ่านทุกครั้งที่ฉันต้องการ SSH ลงในเซิร์ฟเวอร์นี้ ฉันรักษาความปลอดภัยของคอมพิวเตอร์ของตัวเองค่อนข้างดีดังนั้นเราจะถือว่าความเสี่ยงด้านความปลอดภัยในการจัดเก็บรหัสผ่านในไฟล์บนไคลเอนต์นั้นต่ำพอสมควรหากจำเป็นจริงๆ

วิธีการรับรองความถูกต้องอื่น ๆ ที่เซิร์ฟเวอร์สามารถยอมรับได้ก็คือ GSS API (ซึ่งฉันไม่รู้อะไรเลย), แป้นพิมพ์แบบโต้ตอบ (ซึ่งฉันไม่รู้ด้วย) และรหัสผ่าน ตัวเลือกการกำหนดค่าที่เกี่ยวข้องมีดังนี้:

#ChallengeResponseAuthentication yes

#KerberosAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

#UsePAM no

และนี่คือการ-vvติดตามdebug ( ):

debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information

debug1: Unspecified GSS failure.  Minor code may provide more information

debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug2: we did not send a packet, disable method
debug1: Next authentication method: password

เซิร์ฟเวอร์มี/etc/krb5.keytabหรือไม่ GSSAPI (Kerberos) สามารถตั้งค่าฝั่งไคลเอ็นต์ได้ง่าย ฉันต้องขอชื่อโฮสต์ของเซิร์ฟเวอร์ (นอกจากนี้ยังkeyboard-interactiveคล้ายกันมากpasswordยกเว้นไม่ จำกัด เพียงพรอมต์ "รหัสผ่าน:")
1686

@grawity ไม่มีแต่มันก็ไม่ได้/etc/krb5.keytab /etc/krb5/krb5.keytabฉันไม่สามารถเข้าถึงเนื้อหา ชื่อเซิร์ฟเวอร์คือsftp.pass.psu.edu(ฉันไม่คิดว่ามีอันตรายใด ๆ ในการให้ชื่อออก) ถ้ามันช่วยให้คุณอธิบายขั้นตอน
David Z

อ๊ะ passu ของ PSU เก่า ความทรงจำที่น่ารื่นรมย์เช่นนั้น ฉันมีความสุขมากกับการตรวจสอบรหัสผ่าน ทำไมคุณไม่ถามคนในการคำนวณในมหาวิทยาลัย (เป็น CAC เมื่อฉันไปที่นั่น) แทนที่จะไปหา 'เน็ต? ฉันหมายความว่าพวกเขามีกระจกเดเบียน พวกเขาไม่ได้เป็นผู้ดูแลระบบที่เป็น Windows เท่านั้นทั้งหมด
Broam

@Broam ฉันไม่สามารถจินตนาการได้ว่าฉันจะเป็นคนแรกที่ถามดังนั้นสันนิษฐานว่าพวกเขามีเหตุผลบางอย่างที่ทำให้มันเป็นอย่างนั้น ... ฉันคิดว่ามันจะไม่เจ็บที่จะลอง
David Z

คำตอบ:


3

ในกรณีนี้การเขียน (หรือการบันทึกที่ดีกว่า) สคริปต์คาดหวังจะเป็นหนึ่งในตัวเลือกของคุณ

แต่ละระบบจะแตกต่างกันดังนั้นจะไม่มีสคริปต์ แต่ด้วย autoexpect มันง่ายมากที่จะบันทึกสคริปต์เพื่อจุดประสงค์นี้


ไม่ปลอดภัยอย่างร้ายกาจ แต่มี upvote สำหรับการเป็นคำตอบที่ง่ายที่สุดและตรงที่สุด
Zac B

จุดดี. มันจะดีกว่าว่าสิ่งเหล่านี้จะทำหลังไฟร์วอลล์และในเครือข่ายส่วนตัว
johnshen64

8

จากข้อมูลที่รวบรวมมาเซิร์ฟเวอร์sftp.pass.psu.eduสนับสนุนการตรวจสอบสิทธิ์ Kerberos 5 (GSSAPI) และอยู่ในdce.psu.eduขอบเขต

Kerberos ไม่มากร่วมกันบนเครือข่ายที่มีหลายเซิร์ฟเวอร์และเวิร์กสเตชัน; สถาบันการศึกษาขนาดใหญ่หลายแห่งตั้งขึ้น หนึ่งข้อได้เปรียบเหนือการรับรองความถูกต้องของกุญแจสาธารณะคือการkinitให้ข้อมูลประจำตัวแก่เครื่องทั้งหมดใน Kerberos realm โดยอัตโนมัติโดยไม่ต้องคัดลอกกุญแจสาธารณะไปยังแต่ละเครื่อง อีกอย่างคือการสนับสนุนโปรโตคอล - ข้อมูลรับรอง Kerberos เดียวกันสามารถใช้ได้กับโปรโตคอลมากกว่า 30 รายการ (เมล, ระบบไฟล์, ฐานข้อมูล ... ) ไม่ใช่แค่ SSH

(เกี่ยวกับ "ผู้ดูแลระบบที่ใช้ Windows อย่าง clueless เท่านั้น": dce.psu.eduขอบเขตแท้จริงแล้วดูเหมือนจะใช้ Active Directory และโฮสต์โดยเซิร์ฟเวอร์ Windows)

ลองทำตามขั้นตอนเหล่านี้:

  1. เข้าสู่ระบบเพื่อ Kerberos ( kinitและklistเครื่องมืออาจอยู่ใน "krb5-user" หรือแพ็คเกจที่คล้ายกันหากไม่ได้รวมอยู่ในระบบ)

    kinit your_username @ dce.psu.edu
    

    หากไม่มีข้อผิดพลาดแสดงขึ้นการล็อกอินสำเร็จ klistควรแสดงรายการ " krbtgt/dce.psu.edu@..."

  2. ตอนนี้เชื่อมต่อกับเซิร์ฟเวอร์ SSH ด้วย-vvตัวเลือก; หากการพิสูจน์ตัวตนประสบความสำเร็จดี

    หากไม่เป็นเช่นนั้นคุณอาจต้องแก้ไข/etc/krb5.confไฟล์ ภายใต้[domain_realm]ส่วนเพิ่มต่อไปนี้:

    [domain_realm]
        .psu.edu = dce.psu.edu
    
  3. ด้วยการตั้งค่าเริ่มต้น Krb5 ตั๋วที่ได้รับใน # 1 ควรมีอายุ 10 ชั่วโมงและสามารถต่ออายุได้นานถึงหนึ่งสัปดาห์ อย่างไรก็ตามฉันไม่สามารถตรวจสอบการตั้งค่าได้

    หากคุณต้องการเก็บรหัสผ่านไว้ในไฟล์kinit your_principal < password.txtก็ควรใช้วิธีง่าย ๆแม้ว่าจะไม่น่าเชื่อถืออย่างสมบูรณ์

    ด้วยความktutilเป็นไปได้ที่จะทำให้"keytab"สำหรับใช้แทนรหัสผ่าน

    $ ktutil
    ktutil: addent -password -p your_principal -k 1 -e aes256-cts-hmac-sha1-96
    รหัสผ่านสำหรับyour_principal : *********
    ktutil: wkt keytab_file 
    ktutil:  CtrlD
    

    และเข้าสู่ระบบโดยใช้:

    $ kinit -kt keytab_file  your_principal
    

ดูเหมือนว่ามันจะใกล้เคียงกับอุดมคติของฉัน แต่ดูเหมือนจะไม่ทำงาน - ฉันสามารถเข้าสู่ระบบด้วย Kerberos ได้สำเร็จ (ไม่มีข้อความแสดงข้อผิดพลาด) แต่ฉันยังคงได้รับรหัสผ่าน ข้อความแสดงข้อผิดพลาดssh -vvคล้ายกับการติดตามที่ฉันโพสต์ยกเว้นฉันได้รับdebug1: Unspecified GSS failure. Minor code may provide more information\n Server not found in Kerberos databaseแทนที่จะพบสิ่งที่เกี่ยวกับไฟล์แคชข้อมูลรับรองไม่พบ
David Z

อาดูเหมือนว่า "clueless ใช้ Windows เพียงผู้ดูแลระบบ" ตั้งค่า keytab สำหรับแต่ชื่อที่แท้จริงของมันควรจะได้รับhost/sftp.pass.psu.edu host/lutz.cac.psu.eduคุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยเพิ่ม " 128.118.2.85 sftp.pass.psu.edu" ลงใน / etc / hosts ของคุณ แต่มันก็น่าเกลียดกว่า - ถ้าผู้ดูแลระบบทำการซ่อมเซิร์ฟเวอร์ ...
user1686

ใช่มันจะ ... ฉันจะถามพวกเขาเกี่ยวกับเรื่องนี้ แต่ตอนนี้หวังว่าการแก้ไขของคุณควรจะจัดการสิ่งต่าง ๆ ฉันจะลองวันพรุ่งนี้
David Z

@DavidZaslavsky: อาจมีประโยชน์ที่จะกล่าวถึงพวกเขาว่า MIT Krb5 v1.10 รองรับผู้ให้บริการโฮสต์หลายราย (เช่นทั้งคู่ host/lutz.cac.psu.eduและhost/sftp.pass.psu.edu) ในแท็บคีย์เดียว (รุ่นก่อนหน้าใช้เฉพาะอันแรกเท่านั้น)
user1686

ขออภัยฉันลืมที่จะกลับมาและให้ข้อเสนอแนะเกี่ยวกับเรื่องนี้ หลังจากการปรับเปลี่ยนเป็นข้อเสนอแนะที่ฉันได้รับ/etc/hosts debug1: Unspecified GSS failure. Minor code may provide more information Generic error (see e-text)ไม่มีสิ่งใดในเอาต์พุตที่เกี่ยวข้องกับข้อผิดพลาด
David Z

3

ฉันจะพิจารณาโซลูชันที่หลากหลายที่คุณป้อนรหัสผ่านเพียงครั้งเดียวและคอมพิวเตอร์รักษาซ็อกเก็ตไว้ที่เซิร์ฟเวอร์ SSH ระยะไกล คุณสามารถทำตามขั้นตอนเหล่านี้เพื่อตั้งค่าControlMasterด้วยเหตุผลนั้น


แม้ว่าการเชื่อมต่อหลักจะรีเซ็ตเมื่อฉันปิดไคลเอ็นต์ลง ดังนั้นนี่ไม่ใช่ทางออกที่ดี แต่จะเป็นการปรับปรุงเล็กน้อยในสถานการณ์ปัจจุบันของฉัน
David Z

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