ฉันจะหลีกเลี่ยงการตรวจสอบโฮสต์ของ SSH สำหรับโฮสต์ที่รู้จักได้อย่างไร


169

ฉันได้รับพรอมต์ต่อไปนี้ทุกครั้งที่ฉันพยายามเชื่อมต่อเซิร์ฟเวอร์โดยใช้ SSH ฉันพิมพ์ "ใช่" แต่มีวิธีที่จะหลีกเลี่ยงสิ่งนี้หรือไม่?

The authenticity of host '111.222.333.444 (111.222.333.444)' can't be established.
RSA key fingerprint is f3:cf:58:ae:71:0b:c8:04:6f:34:a3:b2:e4:1e:0c:8b.
Are you sure you want to continue connecting (yes/no)? 

7
/ dev / null มีอยู่สำหรับผู้ที่คิดว่าพวกเขามีภูมิคุ้มกันต่อมนุษย์ในการโจมตีตรงกลาง :)
Tim Post

1
ส่วนที่แย่ที่สุด: พิมพ์yเพื่อประหยัดเวลาและบ่น: Please type 'yes' or 'no': (hmph)
ADTC

คล้ายกับaskubuntu.com/questions/87449/…
MarkHu

คำตอบ:


234

ใช้-oตัวเลือก

ssh -o "StrictHostKeyChecking no" user@host

1
คุณอาจต้องการใช้ไฟล์ข้อมูลสำรองอื่นด้วยแฟล็ก '-i'
MUY เบลเยี่ยม

การใช้งานแบบไหนที่จะใช้ไฟล์ระบุตัวตนอื่น? ฉันหมายความว่าถ้าคุณกำลังเชื่อมต่อกับโฮสต์ที่ถูกบุกรุกสิ่งที่แตกต่างกันจะทำให้คุณรับรองความถูกต้อง - มันไม่เหมือนโฮสต์ที่ถูกบุกรุกสามารถขโมยกุญแจของคุณได้เช่นกัน
Dagelf

102

เพิ่มบรรทัดต่อไปนี้ที่จุดเริ่มต้นของ/etc/ssh/ssh_config...

Host 192.168.0.*
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

ตัวเลือก:

  • ซับเน็ตโฮสต์สามารถ*อนุญาตให้เข้าถึง IP ทั้งหมดได้ไม่ จำกัด
  • แก้ไข/etc/ssh/ssh_configสำหรับการกำหนดค่าทั่วโลกหรือ~/.ssh/configการกำหนดค่าเฉพาะผู้ใช้

ดูhttp://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html


2
สงสารฉันสามารถโหวตคุณครั้งเดียวเท่านั้น การตั้งค่า KnownHosts เป็น / dev / null เป็นอัจฉริยะ
J0hnG4lt

1
คนที่ฉลาดที่สุดของคุณ
Darth Egregious

30
ฮา! บอกภรรยาของฉัน
JimFred

30

คุณควรได้รับในครั้งแรกที่คุณเชื่อมต่อกับโฮสต์ใหม่ หลังจากที่คุณตอบสนองyesโฮสต์จะถูกเก็บไว้ใน~/.ssh/known_hostsและคุณจะไม่ได้รับแจ้งในครั้งต่อไปที่คุณเชื่อมต่อ

โปรดทราบว่าหาก~/.ssh/known_hostsไม่สามารถเขียนด้วยเหตุผลใด ๆ (เช่นปัญหาสิทธิ์) คุณจะได้รับแจ้งทุกครั้งที่คุณเชื่อมต่อ


6
คำถามคือมีอยู่แล้วเพื่อหลีกเลี่ยงพรอมต์?
shantanuo

ฉันลองเพิ่ม "CheckHostIP no" ในไฟล์ / etc / ssh / ssh_config แต่ดูเหมือนจะใช้งานไม่ได้เลย
shantanuo

2
sudo chown -R user: user .ssh; sudo chmod 700 .ssh; sudo chmod -R 600 .ssh /; ssh-keygen -R $ hostname และเชื่อมต่อใหม่ที่ควรนำปัญหาทั้งหมดออกไปและจะแจ้งเตือนอีกครั้งหาก ssk_Hostkey ถูก mucked ด้วย | เปลี่ยนไปหรือคุณตกเป็นเหยื่อของ MITM
linuxdev2013

1
มันบอกว่า "ทุกครั้ง" ดังนั้นคำตอบนี้มีความเหมาะสมสุด
tarikakyol

11

วิธีที่ดีที่สุด (เพราะไม่เสียสละความปลอดภัย) คือการเชื่อมต่อหนึ่งครั้งกับคอมพิวเตอร์ทุกเครื่องจากไคลเอนต์เดียว (คุณจะได้รับแจ้งทุกครั้งตอบว่าใช่เสมอ) ตามที่ระบุไว้ในคำตอบอื่น ๆ คีย์จะถูกเก็บไว้ใน ~ / .ssh / known_hosts จากนั้นคัดลอกไฟล์นี้ไปยังคอมพิวเตอร์ไคลเอนต์ทุกเครื่องที่คุณอาจต้องการเชื่อมต่อในภายหลัง (อาจเป็นสำหรับบัญชีผู้ใช้แต่ละบัญชีที่คุณใช้) จากนั้นบัญชีเหล่านี้ทั้งหมดจะ "รู้" คอมพิวเตอร์ดังนั้นจึงไม่มีพรอมต์

ข้อได้เปรียบเหนือการปิดใช้งานพรอมต์คือ SSH สามารถตรวจสอบว่ามีการโจมตี MITM หรือไม่


1
แม้ว่าถ้าคุณมักจะ ssh ผ่านการเชื่อมต่อไปข้างหน้าคุณจะต้องเพิ่มสิ่งนี้ไปยัง / etc / ssh / ssh_config: โฮสต์ 127.0.0.1 NoHostAuthenticationForLocalhost ใช่
Dagelf

1

หากคุณต้องการปิดการใช้งานการยืนยันแทนการตรวจสอบคุณสามารถใช้ตัวเลือก: "-o CheckHostIP = no"

ssh -i sergeys_rsa_key.pem -o CheckHostIP=no brin@8.8.8.8

OP ได้รับคำตอบเดียวกันและยอมรับแล้ว
Ayan

0

อาจเป็นเพราะเซิร์ฟเวอร์คีย์ ssh ของคุณมีการเปลี่ยนแปลงเนื่องจาก IP เซิร์ฟเวอร์หรือโดเมนเหมือนกัน แต่คีย์ ssh ไม่ตรงกัน

คุณต้องลบคีย์ที่เก็บไว้ใน/home/$user/.ssh/known_hostsเพื่อหลีกเลี่ยงข้อความนี้

ฉันแก้ไขการลบคีย์ทั้งหมดในไฟล์นั้นโทเค็นใหม่จึงถูกสร้างขึ้นสำหรับชื่อโดเมนนี้


1
การเปลี่ยนแปลงที่สำคัญผลิตข้อความที่น่าเกลียดมากกับกล่อง atsigns และWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! และIT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!ในตัวพิมพ์ใหญ่ทั้งหมด ข้อความในคำถามจะเกิดขึ้นก็ต่อเมื่อไม่มีรายการอยู่ในknown_hostsนั้น
dave_thompson_085

-1

ตรวจสอบการอนุญาตใน~/.ssh/known_hostsไฟล์ของคุณ ฉันไม่ถูกต้องเมื่อฉันพบปัญหานี้ ฉันแก้ไขด้วย:

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