วิธีเพิ่มโฮสต์ที่รู้จัก SSH ใน bash script


13

ฉันกำลังสร้างสคริปต์ทุบตีเพื่อจัดเตรียมเซิร์ฟเวอร์ใหม่ที่ฉันสามารถปรับใช้เว็บแอปพลิเคชันให้ สิ่งหนึ่งที่ผมมักจะต้องทำคือการเป็น GitHub ssh git@github.comเป็นที่รู้จักกันโดยใช้โฮสต์ ฉันจะทำให้กระบวนการนี้เป็นแบบอัตโนมัติโดยใช้สคริปต์ทุบตีและทำแบบ idempotent ได้อย่างไร

คำตอบ:


17

วิธีง่าย ๆ ในการเดินทางคือทำสิ่งนี้

ssh-keyscan remote_server >>~/.ssh/known_hosts

ถ้ากล่องนี้เป็นแบรนด์ใหม่ที่คุณอาจต้องสร้าง~/.sshไดเรกทอรีก่อนที่คุณเรียกSSH-KeyScan

โปรดทราบว่า ssh-keyscan สามารถใช้ชื่อโฮสต์ได้ตามอำเภอใจ มันจะได้รับกุญแจทั้งหมดที่ทำได้


1
PS - สำหรับการเตรียมคุณควรใช้หุ่นเชิดแทนที่จะเป็นสคริปต์ทุบตี สำหรับหุ่นเชิดนี้สามารถจัดการได้อย่างง่ายดายด้วยทรัพยากรsshkey ดูคำถามนี้สำหรับวิธีการจัดการรู้จัก __hosts en-masse serverfault.com/a/416782/984
Zoredache

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

ใช้ทุบตี ฉันพบปัญหาในรุ่นต่าง ๆ เช่นหุ่นเชิดหรือสัตว์ต่าง ๆ ตลอดเวลา เรามักจะกลับไปทุบตี ... 3 บริษัท ที่ดำเนินการอยู่ตอนนี้และทุบตีนั้นน่าเชื่อถือสำหรับเราเสมอ
Ligemer

4

คุณพยายามรับรหัสใหม่โดยอัตโนมัติหรือไม่? ถ้าเป็นเช่นนั้นคุณสามารถใช้ -oStrictHostKeyChecking = no
การทำเช่นนี้เป็นความคิดที่เลวมากเพราะตอนนี้คุณเปิดกว้างสำหรับการโจมตีแบบคนกลาง

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

การตรวจสอบคีย์โฮสต์ที่เข้มงวดเป็นสิ่งที่ดี


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

2
จัดเตรียมเซิร์ฟเวอร์ใหม่ให้ ssh เข้าสู่ GitHub แบบที่คุณต้องการ ยอมรับรหัสโฮสต์เมื่อได้รับแจ้ง ออกจากระบบ. คัดลอก ~ / .ssh / known_hosts จากเซิร์ฟเวอร์ที่จัดเตรียมใหม่นั้นที่อื่น (github, เว็บเซิร์ฟเวอร์, ไม่สำคัญตราบใดที่คุณสามารถหาได้) ครั้งต่อไปที่คุณจัดเตรียมเซิร์ฟเวอร์ให้คัดลอกไฟล์นั้นกลับไปก่อนที่จะส่งไปยัง github คุณไม่จำเป็นต้องแก้ไขไฟล์
yoonix

ดีกว่าคำตอบของฉัน (ปลอดภัยกว่า) การปรับปรุงเพิ่มเติมเกี่ยวกับคำตอบของ yoonix คือการแยกวิเคราะห์ 'ssh-keyscan github.com' และเก็บคีย์ที่ส่งคืนไว้ใน ~ / .ssh / known_hosts เพื่อที่จะไม่คงที่ในไฟล์เพื่อให้คุณต้องอัปเดต
Sirex

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

1
เพื่อชี้แจงความคิดเห็นล่าสุดของฉัน (สายเกินไปที่จะแก้ไข): การหยิบกุญแจโฮสต์ใหม่ทุกครั้งที่คุณจัดเตรียมโฮสต์นั้นไม่แตกต่างจากการตั้งค่า StrictHostKeyChecking = no ด้วยสิ่งใดสิ่งหนึ่งเหล่านี้คุณจะเชื่อใจได้ว่าจะมีการส่งคีย์ใด ๆ หากคุณคิดว่าการโจมตี MITM ที่จะไม่น่าอ่านเหล่านี้ สองบทความ Github จะเป็นเป้าหมายที่ยิ่งใหญ่
yoonix

1

ฉันไม่แน่ใจว่าฉันเข้าใจคำถามนี้หรือไม่ แต่ฉันคิดว่าคุณต้องการละเว้นพรอมต์ known_host หรือหลีกเลี่ยงโดยสิ้นเชิงในกรณีนี้

ssh -o StrictHostKeyChecking = ไม่

หรือข้อเสนอแนะอื่น ๆ ที่: http://www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


ฉันต้องการวิธีที่ไม่โต้ตอบในการยอมรับคีย์โฮสต์ GitHub (เนื่องจากจะเกิดขึ้นในสคริปต์ทุบตี)
Andrew

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