ฉันจะบังคับ SSH ให้คีย์ RSA แทน ECDSA ได้อย่างไร


16

เมื่อเข้าใช้เซิร์ฟเวอร์เป็นครั้งแรกฉันจะบังคับ SSH ให้คีย์ RSA ให้ฉันได้อย่างไรและจัดเก็บโดยอัตโนมัติหากผู้ใช้อนุมัติ

ไม่นานมานี้ฉันกำลังมอบกุญแจ ECDSA ให้ฉัน เนื่องจากฉันรู้จักคีย์ RSA แล้วฉันต้องการดูคีย์ RSA ที่นำเสนอ ณ จุดนี้

ฉันเหนื่อย:

ssh -o RSAAuthentication=yes user@server

น่าเสียดายที่นี่ให้รหัส ECDSA และAre you sure you want to continue connecting (yes/no)?ข้อความถึงฉัน


ฉันมีสถานการณ์ที่คล้ายกัน เซิร์ฟเวอร์ A. ไคลเอนต์ B. บน B: ssh A จะถามคุณถึงกุญแจก่อน บน Cleint C: ssh A จะถามคุณก่อนสำหรับ passwrd หลังจากความพยายามที่ล้มเหลวในการให้ไคลเอนต์ C ใช้คีย์ ECDSA ฉันเห็นสิ่งนี้ในบันทึกของ A. ถ้าฉันโหลดคีย์ rsa บน C แล้ว ssh A จะเชื่อมต่ออย่างมีความสุข . ฉันจะป้องกัน C จากการใช้คีย์ ECDSA เป็นครั้งแรกได้อย่างไร
Kemin Zhou

คำตอบ:


14

โดยการลบอัลกอริทึม ECDSA ออกจากHostKeyAlgorithmsตัวแปรการกำหนดค่า

ssh -o HostKeyAlgorithms=ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss user@server

ผมเคยเอาออกเพียงแค่ทุกขั้นตอนวิธีการ ECDSA จากรายการเริ่มต้น

แน่นอนคุณสามารถใส่สิ่งนั้นลงในเครื่องของคุณได้.ssh/config:

Host: server
    HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss

สำหรับ OpenSSL, 1) ไม่มีโคลอนหลังจากโฮสต์และ 2) รายการเริ่มต้นดูเหมือนจะมีการเปลี่ยนแปลงตั้งแต่คุณโพสต์สิ่งนี้ ลองHostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-rsaแทน
ประสานงาน

6

อย่าใช้ RSA เนื่องจาก ECDSA เป็นค่าเริ่มต้นใหม่

บนเซิร์ฟเวอร์ทำสิ่งนี้: ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub และบันทึกหมายเลขนั้น

บนไคลเอนต์คุณสามารถ SSH ไปยังโฮสต์และถ้าและเมื่อคุณเห็นหมายเลขเดียวกันคุณสามารถตอบพร้อมรับคำAre you sure you want to continue connecting (yes/no)?ยืนยัน จากนั้นคีย์ ECDSA จะถูกบันทึกไว้ในไคลเอนต์เพื่อใช้ในอนาคต


3
ใช่ แต่ถ้าฉันมีแอปพลิเคชั่นเก่าที่ต้องการ RSA เพื่อรักษาความเข้ากันได้จนกว่าจะมีการตัดสินใจทางธุรกิจเพื่ออัปเดตเป็น ecdsa
กระตือรือร้น

@RobertSiemer เฉพาะผู้โพสต์คำถามดั้งเดิมเท่านั้นที่สามารถเปลี่ยนคำตอบที่ยอมรับได้ ฉันไม่สามารถทำได้
กระตือรือร้น

1
H2ONaCl: โปรดเปลี่ยนคำตอบที่คุณยอมรับ อันนี้ไม่ได้ทำในสิ่งที่คุณขอ @enthusiasticgeek ขอโทษมิกซ์
Robert Siemer

ค่าเริ่มต้น (อุทธรณ์ถึงอำนาจ) และใหม่ (อุทธรณ์ถึงความแปลกใหม่) ไม่ได้แปลว่าดีกว่า RSA ยังคงถือว่าแข็งแกร่ง ... เพียงเพิ่มบิตเป็น 4096 หากคุณต้องการความแข็งแกร่งมากขึ้น (2048 อาจจะล้าสมัยเร็ว ๆ นี้) และถ้าคุณต้องการ EC algo ที่ดีให้ใช้ ed25519 ECDSA ดูดเนื่องจากใช้เส้นโค้ง NIST อ่อนซึ่งอาจเป็นแบ็คดอร์ นี่เป็นปัญหาที่รู้จักกันดีมาระยะหนึ่งแล้ว ดังนั้นสำหรับการรองรับแบบดั้งเดิมให้เปิดใช้งาน RSA และอัลโกในอุดมคติใช้ ed25519 ... ปิดการใช้งาน DSA ซึ่งล้าสมัยมานาน (เหตุผลสำคัญคือขนาดคีย์ 1024 บิตที่กำหนดไว้) และปิดใช้งาน ECDSA ลอง ssh-audit เพิ่มเติม
ปีเตอร์

5

ใช่ตกลงเปลี่ยนเป็น ECDSA เร็ว ๆ นี้ แต่ในระหว่างนี้ลองทำดังนี้:

ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user@example.com

สิ่งนี้จะให้ "ตัวเลือกการกำหนดค่าไม่ดี: fingerprinthash" บนระบบของฉัน (OpenSSH_6.6.1p1)
Soren Bjornstad

1
@SorenBjornstad FingerprintHashตัวเลือกไม่จำเป็นเพียงแค่ปล่อยให้ส่วนนั้นหมด
ลูคัส


1

เพียงเพื่อปรับปรุงคำตอบของ tumbleweed ซึ่งมีลิงค์อยู่ในนั้นเพื่อค้นหารายการเก่าของอัลกอริทึม

ก่อนตัดสินใจในรายการของอัลกอริทึม ในการค้นหารายการเก่าให้ใช้ssh -vv:

ssh -vv somehost

และมองหา 2 บรรทัดเช่น "อัลกอริธึมของคีย์โฮสต์: ... " โดยที่แรกดูเหมือนจะเป็นข้อเสนอของเซิร์ฟเวอร์และที่สองเป็นของลูกค้า หรือหากต้องการเลือก 2 บรรทัดเหล่านี้โดยอัตโนมัติให้ลองใช้วิธีนี้ (และเพื่อออกจากการกด ctrl + d):

ssh -vv somehost 2>&1 | grep "host key algorithms:"

ตอนนี้กรองมันลง ... คุณควรลบ dss / dsa ทั้งหมดออกเนื่องจากล้าสมัยมานานและคุณต้องการลบ ecdsa (เช่นเดียวกับฉัน) ดังนั้นตัวอย่างเช่นถ้าคุณมี:

ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

คุณควรท้ายด้วย:

ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

ตอนนี้แก้ไขการกำหนดค่าของคุณ สำหรับการกำหนดค่าของคุณเอง:

vim ~/.ssh/config

สำหรับการกำหนดค่าทั้งระบบ:

sudo vim /etc/ssh/ssh_config

เพิ่มบรรทัดใหม่ทั้งในระดับโลก:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

หรือสำหรับโฮสต์ที่เฉพาะเจาะจง (ไม่เหมาะสำหรับการกำหนดค่าเซิร์ฟเวอร์แบบกว้าง):

Host somehost
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

แทนรายการที่ฉันป้อนให้วางรายการที่คุณได้รับจากssh -vvผลลัพธ์ไม่รวมส่วน "อัลกอริธึมของคีย์โฮสต์:"


0

บางจุดทำให้เกิดความสับสนว่าเป็นไปได้หรือไม่ที่จะลบอัลกอริธึมที่สำคัญออกจากค่าเริ่มต้นที่มีอยู่ - ปุ่มระดับสูงสุดคือคีย์ RSA-sha2 / 256/512 และ ed25519 ใหม่เพื่อความปลอดภัยที่ดีที่สุดโดยใช้ ssh-keygen -t ras -a -b 4096 -a 113 เพื่อเก็น เห็นได้ชัดว่าการสนับสนุนแบบดั้งเดิมอ่านข่าว ssh ว่า ssh1 จะหายไปโดยสิ้นเชิง - คีย์ 45 บิตและ 96 บิตสูงสุด - ดีเอสเอยังตัดค่าเสื่อมราคาเช่นกัน แก้ไขได้ที่ 128/1024 บิตสูงสุดพบว่าแฮ็ก (posses NSA ทำอย่างนั้นและทำให้ง่อย / แก้ตัวในขณะที่ debug code มีข้อสงสัยอย่างมากว่าตั้งชื่อมันว่า heartbleed) ดังนั้นค่าใช้จ่ายสูงที่จ่ายโครงสร้างโครงสร้างคีย์ RSA ที่ปลอดภัยจะต้องทำใหม่เพื่อรองรับและรักษามาตรฐานที่สูงขึ้นต่อไป ตั้งค่าคีย์ที่คุณต้องการใช้ตามที่อธิบายไว้ใน / etc / ssh / sshd_config ลองทำ 2 คีย์ auth 3 คีย์ทำงานด้วยเช่น: sshd_config "AuthenticationMethods publickey, publickey, publickey" - ตรวจสอบให้แน่ใจว่ารายชื่อ ssh -Q kex ตรงกับทั้งเซิร์ฟเวอร์ A และ B หรือเดสก์ท็อปเป็นตัวอย่างที่ต่างออกไปจากเอาท์พุต คีย์ ecdsa ที่ใหม่กว่าในการผลิตก็เป็นข้อแนะนำที่ไม่ควรใช้เช่นกัน หรือรับ - keyexchange ปฏิเสธข้อความยืนยันความปลอดภัยการเข้าถึงบางส่วน Infoz ที่ดีมากมายอดทนที่จะค้นหา


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

-5

หรือถ้าคุณยืนยันว่ามีวิธีการคีย์ RSA คุณสามารถพิมพ์ssh-keygen -t rsaบนเซิร์ฟเวอร์ที่คุณตั้งใจจะใช้ SSH

ควรสร้างคีย์สาธารณะและคีย์ส่วนตัวของ RSA ภายใต้ '~ / .ssh / id_rsa' ตอนนี้สิ่งที่คุณต้องทำคือการคัดลอกกุญแจสาธารณะภายใต้$HOME/.ssh/authorized_keysเครื่องทั้งหมดที่คุณต้องการ ssh ไปยังเครื่องที่คุณสร้างคีย์ RSA ของคุณ

จากนั้นนั่งลงและผ่อนคลาย!


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