เพิกเฉยไฟล์ `~ / .ssh / known_hosts` ของฉันชั่วคราว?


48

มีวิธีเพิกเฉยต่อ~/.ssh/known_hostsไฟล์ของฉันชั่วคราวหรือไม่?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

บันทึก:

.. โดยคำตอบไม่กี่ / ข้อคิดเห็น (s) ฉันรู้ว่าคำถามของฉันคือการทำให้เข้าใจผิดเล็กน้อยดังนั้นสั้นมันเป็นพฤติกรรมที่คาดหวัง) ดังนั้นจึงเป็นเรื่องปกติ (ในกรณีของฉัน)มีเหตุผลที่ถูกต้องอยู่เบื้องหลังว่าทำไมฉัน ต้องการเห็น "ไม่สนใจ")


9
คุณกำลังถามคำถามผิด คุณไม่ควร "เพิกเฉย" ปัญหา คุณควรเข้าใจว่าเกิดอะไรขึ้นและแก้ไขมัน
Michael Hampton

9
ฉันไม่สามารถพูดให้ผู้ใช้ได้ แต่ตัวอย่างหนึ่งอาจเป็นสถานการณ์ที่คุณกำลังพัฒนากระบวนการติดตั้งอัตโนมัติ (เช่น kickstart) ซึ่งขั้นตอนการวนซ้ำของคุณเกี่ยวข้องกับการสร้างการเชื่อมต่อการทดสอบการปรับเปลี่ยนกระบวนการสร้างและการสร้างใหม่จาก เกาซ้ำแล้วซ้ำอีก
Goladus

10
@MichaelHampton - ฉันได้รับสิ่งนี้ตลอดเวลาเนื่องจาก VMware และ VirtualBox รีไซเคิลที่อยู่ IP สำหรับผู้เข้าพัก สำหรับฉันมันเป็นคำถามที่ถูกต้อง :)

1
FWIW ฉันค้นหาคำตอบนี้อย่างต่อเนื่องเพราะฉันมีระบบใน LAN ของฉันที่ฉันใช้ dropbear (ด้วยรหัสโฮสต์ที่แตกต่างกัน) เพื่อป้อนรหัสผ่านการเข้ารหัสดิสก์ในระหว่างการเริ่มต้น
Zulan

1
@jww นี่เป็นคำถาม / คำตอบที่ผิดสำหรับสถานการณ์ของคุณ คุณควรกำหนดค่า SSH เพื่อเพิกเฉยที่อยู่ IP แต่ยังคงตรวจสอบรหัสโฮสต์ ดูตัวอย่างได้ที่นี่
Jon Bentley

คำตอบ:


56

คุณสามารถใช้ssh -o StrictHostKeyChecking=noเพื่อปิดการตรวจสอบในknown_hostsไม่ช้า แต่ฉันจะแนะนำเรื่องนี้ คุณควรตรวจสอบว่าทำไมคีย์โฮสต์ถึงมีการเปลี่ยนแปลง

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

Host <your problematic host>
  StrictHostKeyChecking no

นั่นเป็นพฤติกรรมที่คาดหวัง) ดังนั้นจึงเป็นเรื่องปกติ (ในกรณีของฉัน)
alexus

1
@alexus หากเป็น "คาดหวัง" คุณสามารถใช้ตัวเลือกนี้กับชื่อโฮสต์ / IP ที่คุณคาดว่าจะเกิดขึ้น
chrylis -on strike-

1
@alexus และจำไว้ว่าถ้าคุณทำเช่นนี้คุณจะสูญเสียการป้องกันทั้งหมดที่มีให้ คุณอาจใช้ telnet เหมือนกันเพราะมันจะไม่สำคัญสำหรับคนที่จะ MITM และจับการรับส่งข้อมูลทั้งหมดของคุณ
Michael Hampton

1
สิ่งนี้ใช้งานไม่ได้อีก (อย่างน้อยสำหรับ OpenSSH_5.3p1)
draeath

-o StrictHostKeyChecking=noลบความสามารถในการเข้าสู่ระบบด้วยรหัสผ่าน การขาดการตั้งค่าสถานะสำหรับสิ่งนี้ไม่ตรงกับหลักการ unix ในการอนุญาตให้ผู้ใช้บังคับพฤติกรรมหรือไม่ ฉันกำลังพยายามที่จะเข้าสู่ระบบในเครื่องท้องถิ่นด้วย IP ท้องถิ่น รหัสโฮสต์เปลี่ยนไปเพราะฉันฟอร์แมตเครื่องใหม่ ทุกอย่างที่นี่สมเหตุสมผลและไม่มีอะไรที่เสี่ยงต่อความปลอดภัยภายใต้สถานการณ์
Wowfunhappy

31

หากต้องการละเว้นไฟล์โฮสต์ที่รู้จักในสภาพแวดล้อม POSIX อย่างสมบูรณ์ให้ตั้งค่าGlobalKnownHostsFileและUserKnownHostsFileตัวเลือกเป็น/dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

การตั้งค่าStrictHostKeyChecking=noตัวเลือกจะช่วยให้คุณเชื่อมต่อ แต่ SSH จะยังคงแสดงคำเตือน :

ssh -o StrictHostKeyChecking=no user@host

ดังที่คนอื่น ๆ ได้สังเกตไว้มันน่าจะดีกว่าที่จะแก้ไขปัญหาพื้นฐาน คุณสามารถพิจารณาการรับรองความถูกต้องของใบรับรอง SSHเพื่อตรวจสอบโฮสต์ได้


2
นี่อาจเป็นคำตอบที่ดีกว่าคำตอบupvoted ที่สูงที่สุดในขณะนี้เพราะอนุญาตให้ใช้การรับรองความถูกต้องของรหัสผ่านซึ่งจะถูกปิดใช้งานเป็นอย่างอื่น (แน่นอนคุณควรเข้าใจสิ่งที่คุณกำลังทำอยู่ก่อนพิมพ์รหัสผ่าน ... )
VZ

ฉันสับสนเล็กน้อยที่นี่: คุณไม่ควรนอกจากนี้ยังใช้-o StrictHostKeyChecking=no ในการนอกเหนือไป-o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullตัวเลือก - สำหรับคำตอบสุดท้ายของการ?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Gabriel Staples

การเขียนที่เกี่ยวข้องฉันพบออนไลน์: shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples

5

หากคุณติดตั้งเซิร์ฟเวอร์ใหม่แล้วดังนั้น Identification จึงเปลี่ยนไปคุณควรลบบรรทัดที่ระบุ 155 ออก/Users/alexus/.ssh/known_hostsและไปข้างหน้า

หากคุณสลับระหว่างเครือข่ายส่วนตัวที่แตกต่างกันคุณควรใช้ชื่อโฮสต์เพื่อเชื่อมต่อแทนเนื่องจากไคลเอ็นต์ ssh จะบันทึกคีย์ต่าง ๆ ตามชื่อโฮสต์ด้วย เพิ่มสิ่งนี้ในของคุณ/etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

จากนั้นใช้ssh server1เมื่อเชื่อมต่อกับซับเน็ต 1 และssh server2เมื่อเชื่อมต่อกับซับเน็ต 2 วิธีนี้เซิร์ฟเวอร์ทั้งสองสามารถมีคีย์โฮสต์ที่แตกต่างกัน


ถ้าคุณสลับไปมาระหว่างสองเครือข่ายส่วนตัวและเชื่อมต่อกับ IP เดียวกันสองอัน
alexus

1
ฉันแก้ไขคำตอบของฉันแล้ว
etagenklo

2
@alexus คุณต้องใช้ IPv6 :) แต่นั่นจะเป็นข้อมูลที่มีประโยชน์ในคำถามเดิมของคุณ
Michael Hampton

2

-o StrictHostKeyChecking=no ใช้งานได้เฉพาะในกรณีที่โฮสต์ไม่ได้แสดงอยู่ในไฟล์รู้จัก _host

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

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"

2

บางคนบอกว่าไม่ถูกต้องคุณไม่ต้องทำอย่างนี้ แต่ฉันต้องการสิ่งนี้เพื่อทดสอบอุปกรณ์ฝังตัวสองสามครั้งซ้ำแล้วซ้ำอีก คุณต้องปิดการใช้งานStrictHostKeyChecking=noสิ่งนี้ถูกต้อง แต่ยังรีเซ็ตไฟล์โฮสต์ที่รู้จักให้/dev/nullเป็น นี่เป็นตัวอย่างที่ดีกับ autologin และpsบนอุปกรณ์ระยะไกล

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'

-2

ล็อกอินเข้าสู่เซิร์ฟเวอร์ทั้งหมดของคุณ (และหาก RedHat) rm -f /etc/ssh/ssh_host_*จากนั้นรีสตาร์ท SSHD

สิ่งนี้จะสร้างคีย์โฮสต์ SSH ใหม่ที่ไม่จำเป็นต้องเพิกเฉย

ฉันสามารถนึกถึงอินสแตนซ์เดียวที่คีย์ SSH ถูกโคลนบนเซิร์ฟเวอร์หลาย ๆ ตัวไม่เพียงต้องการ แต่ยังไม่ทิ้งคำเตือนใด ๆ ทวีคูณของหนึ่งระเบียน โฮสต์ทั้งหมดที่มีระเบียน A มีรหัสเดียวกัน


6
คำตอบนี้ไม่ถูกต้อง ลายนิ้วมือเป็นของลูกค้า
89c3b1b8-b1ae-11e6-b842-48d705
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.