อย่าเพิ่มโฮสต์คีย์ให้กับ known_hosts สำหรับ SSH


111

ฉันต้องการที่จะเชื่อมต่อไปยังโฮสต์ผ่าน SSH ~/.ssh/known_hostsแต่ฉันไม่ต้องการชื่อโฮสต์ที่จะเพิ่มของฉัน

ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


99
-o "UserKnownHostsFile /dev/null"

ควรทำงาน.


3
ทำงานตามที่คาดไว้ แต่จะรายงานเสมอ: "คำเตือน: เพิ่ม 'ชื่อโฮสต์, ip' (RSA) ลงในรายการโฮสต์ที่รู้จักอย่างถาวร" ฉันทำให้มันหายไปด้วย: 2> & 1 | grep -v "^Warning: Permanently added"
Guillaume Boudreau

3
เพิ่ม -o "LogLevel ข้อผิดพลาด" และมันจะไม่บ่นกับคำเตือนอีกต่อไป
John

1
หมายเหตุ: คำขอเพื่อระงับข้อความนั้น "คำเตือน: เพิ่ม 'ชื่อโฮสต์, ip' (RSA) ลงในรายการของโฮสต์ที่รู้จักอย่างถาวร" ได้รับการรายงานไปยังผู้ดูแลระบบbugzilla.mindrot.org/show_bug.cgi?id=2413
Ben Creasy

2
ท่อgrepจะรวม stdout และ stderr; สถานะการออกสามารถเปลี่ยนแปลงได้เช่นกัน ถ้าใช้มันจะดีกว่าที่จะใช้ทดแทนกระบวนการที่จะได้รับการกำจัดของข้อความ:bash ssh 2> >( egrep >&2 -v '^Warning: Permanently added') -o "UserKnownHostsFile /dev/null" [...]มันจะหลีกเลี่ยงไปป์และทำให้การเปลี่ยนแปลงที่สอดคล้องกันในการจัดการสถานะทางออก
Alex O

1
@John จะเป็นการดีกว่าถ้าใช้วิธีใดวิธีหนึ่งในความคิดเห็นเหล่านี้มิฉะนั้นคุณจะแนะนำข้อบกพร่องด้านความปลอดภัยเนื่องจากมีแนวโน้มที่จะซ่อนคำเตือนที่ไม่เกี่ยวข้องอื่น ๆ
Jon Bentley

97

หากคุณต้องการพฤติกรรมนี้เนื่องจากคุณทำงานกับเซิร์ฟเวอร์คลาวด์ (AWS EC2, Rackspace CloudServers เป็นต้น) หรือคุณเตรียมรูปภาพใหม่ใน Vagrant อย่างต่อเนื่องคุณอาจต้องการอัปเดต SSH ของคุณแทนการเพิ่มนามแฝงทุบตีหรือตัวเลือกอื่น ๆ ใน บรรทัดคำสั่ง.

ลองเพิ่มสิ่งที่ชอบ:

Host *.mydomain.com 
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  User foo
  LogLevel QUIET
  • ใช้เข้มงวดเท่า regex สำหรับโฮสต์ให้ปลอดภัยที่สุด
  • การตั้งค่า LogLevel เป็น QUIET จะทำให้คำเตือนที่ Guillaume กล่าวถึงไม่ให้ปรากฏ

คุณควรพยายามปิดการใช้งาน StrictHostKeyChecking ทั้งหมดดังนั้นคำตอบของ cclark จึงเป็นข้อตกลงที่ยอดเยี่ยมสำหรับการทำงานกับเซิร์ฟเวอร์คลาวด์
Alex Recarey

สิ่งนี้พิสูจน์ได้ว่ามีประโยชน์กับฉันมากเมื่อฉันใช้ Shipit (เครื่องมือปรับใช้ JavaScript) กับ Vagrant ฉันไม่สามารถรับพารามิเตอร์ที่ Shipit ส่งไปยัง SSH ได้อย่างง่ายดายดังนั้นสิ่งนี้จึงทำให้ฉันก้าวเท้าเลี่ยงเครื่องมือและบอกสิ่งที่ฉันทำและไม่ต้องการให้จดจำ
John Munsch

1
LogLevel คือสิ่งที่ฉันกำลังมองหา มันมีข้อได้เปรียบที่เพิ่มเข้ามาเมื่อไม่แสดง บริษัท ที่กำหนดค่าการแจ้งเตือนเมื่อเรียกใช้สคริปต์! (ตอนนี้ฉันกำลังทำงานโดยไม่มีข้อผิดพลาด loglevel)
Anshu Prateek

ฉันจะเพิ่มไฟล์นี้ในไฟล์อะไร
Wim Deblauwe

นี่คือไฟล์กำหนดค่า SSH ของคุณ ใน Linux หรือ macOS โดยทั่วไปไฟล์นั้นจะอยู่ในไดเรกทอรีชื่อ. ssh ภายในโฮมได
เร็กตอรี่

8

ฉันรู้สึกอยากเพิ่มโฮสต์คีย์ของคุณ known_hosts (ผู้ใช้บริการเหล่านี้อย่างน้อยฉลาดพอที่จะทำให้คีย์โฮสต์ของพวกเขาสอดคล้องกันระหว่างเครื่องที่ใช้ชื่อโฮสต์เดียวกัน) จากนั้นเปิด StrictHostKeyChecking ปิด CheckHostIP และ การเข้าสู่ระบบด้วย LogLevel ข้อผิดพลาดจะทำให้คุณได้รับประสบการณ์ที่ดีที่สุดโดยไม่ลดทอนความปลอดภัย (ตกลงโดยไม่มี CheckHostIP คุณจำเป็นต้องเชื่อถือ DNS ซึ่งเป็นช่องโหว่ขนาดใหญ่ที่ไม่มี DNSSEC หรือสิ่งที่คล้ายกัน แต่เราจะกวาดมันไปใต้พรมสักครู่)

ฉันใช้ไฟล์ known_hosts แบบอ่านอย่างเดียวดังนั้นฉันต้องทำอะไรบางอย่างหรือฉันได้รับคำเตือนไม่รู้จบเกี่ยวกับการไม่สามารถเพิ่มรายการใน known_hosts

สิ่งที่ฉันใช้:

Host github.com *.github.com
StrictHostKeyChecking yes
CheckHostIP no
LogLevel ERROR

ฉันต้องการให้บริการเหล่านี้เผยแพร่คีย์โฮสต์ SSH ของพวกเขาบนเว็บไซต์ของพวกเขาผ่าน HTTPS ดังนั้นฉันสามารถคัดลอกพวกเขาอย่างชัดเจนโดยไม่ต้องเชื่อมต่อก่อนและอาจเปิดเผยตัวเองกับการโจมตีของ MITM


7

สำหรับเซสชัน ssh เดียวให้ใช้สิ่งนี้

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host

4
สิ่งนี้จะไม่เพิ่มสิ่งใหม่ในคำตอบที่ยอมรับสำหรับคำถามที่มีอายุ 5 ปี
JakeGould

5

ฉันแนะนำ

LogLevel ERROR

เกิน

LogLevel QUIET

ดังนั้นคุณยังคงได้รับ "ไม่สามารถแก้ไขชื่อโฮสต์" และข้อผิดพลาดอื่น ๆ


คุณควรเชื่อถือการเชื่อมต่อ SSH ของคุณได้ ไม่เพียง แต่ทำให้มันเงียบเกี่ยวกับความเสี่ยงของคุณ
sylvainulg

3
ขึ้นอยู่กับว่า เรามีสภาพแวดล้อมการพัฒนาที่ถูกทำลายลงในแต่ละสัปดาห์และสร้างขึ้นมาใหม่ระเบียน A ของพวกเขายังคงเหมือนเดิม แต่รหัสโฮสต์จะถูกสร้างขึ้นทุกครั้งที่สร้างขึ้น เราไม่สามารถยืนยันคีย์โฮสต์ได้เนื่องจากระเบียน A เพิ่งกำหนดไว้ในฐานข้อมูลตามชื่อสภาพแวดล้อมและชื่อสภาพแวดล้อมสามารถถูกทำลายหรือสร้างขึ้นใหม่ได้ตลอดเวลาดังนั้นวิธีแก้ปัญหาข้างต้นจึงมีประโยชน์อย่างแท้จริง
Alex Berry

2

คุณได้ลองปิดการใช้งานStrictHostKeyChecking? คุณสามารถทำมันด้วยตัวเลือกหรือในแฟ้มการกำหนดค่า-o~/.ssh/config


ฉันใช้มันไปแล้ว แต่มันมีเอฟเฟกต์ที่แตกต่าง: มันลดความเข้มงวดในการตรวจสอบคีย์โฮสต์ คือเมื่อไม่ทราบโฮสต์มันยังคงเชื่อมต่อเมื่อคุณปิดใช้งานตัวเลือกนั้น ดังนั้นจึงยังคงบันทึกโฮสต์ แต่ฉันคิดว่าฉันได้พบทางออกที่ถูกต้องแล้ว (ดูคำตอบของฉัน)
อัลเบิร์ต

0

ฉันพบรายการ. ssh / config ต่อไปนี้มีประโยชน์ (LAN ที่มี DHCP และ DNS):

 CheckHostIP no

 Host *.*
 CheckHostIP yes

ผลลัพธ์คือชื่อเครื่องท้องถิ่น "zora" หรือ "goron" จะไม่ตรวจสอบกับที่อยู่ IP ที่กำหนดแบบไดนามิก แต่ www.mycompany.com หรือ node42.planetlab.com จะยังคงมีการยืนยัน IP แบบคงที่ของพวกเขา

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