วิธีการหลีกเลี่ยง ssh ขออนุญาต?


57

เราพยายามเพิ่มความเร็วในการติดตั้งโหนด oracle สำหรับการติดตั้ง RAC สิ่งนี้ต้องการให้เราได้รับการติดตั้งและกำหนดค่า ssh เพื่อไม่ให้พร้อมท์รหัสผ่าน

ปัญหาคือ: ในการใช้งานครั้งแรกเราจะได้รับแจ้ง

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

มีวิธีที่จะหลีกเลี่ยงปัญหานั้นหรือเราถึงกับต้องเชื่อมต่ออย่างน้อยหนึ่งครั้งบนเซิร์ฟเวอร์ทุกเครื่องจากเซิร์ฟเวอร์ทุกเครื่องด้วยตนเองหรือไม่?

คำตอบ:


90

ตั้งค่าStrictHostKeyChecking noใน/etc/ssh/ssh_configไฟล์ของคุณซึ่งจะเป็นตัวเลือกระดับโลกที่ผู้ใช้ทุกคนใช้บนเซิร์ฟเวอร์ หรือตั้งค่าใน~/.ssh/configไฟล์ของคุณซึ่งจะเป็นค่าเริ่มต้นสำหรับผู้ใช้ปัจจุบันเท่านั้น หรือคุณสามารถใช้มันในบรรทัดคำสั่ง:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

ต่อไปนี้เป็นคำอธิบายวิธีการทำงานของman ssh_config (หรือดูเวอร์ชันปัจจุบันเพิ่มเติม ):

StrictHostKeyChecking

      หากการตั้งค่าสถานะนี้เป็น“ ใช่” sshจะไม่เพิ่มโฮสต์คีย์ลงใน$HOME/.ssh/known_hostsไฟล์โดยอัตโนมัติและปฏิเสธที่จะเชื่อมต่อกับโฮสต์ที่มีการเปลี่ยนแปลงคีย์โฮสต์ สิ่งนี้ให้การป้องกันสูงสุดจากการโจมตีของโทรจันอย่างไรก็ตามอาจสร้างความรำคาญเมื่อ/etc/ssh/ssh_known_hostsไฟล์ถูกบำรุงรักษาไม่ดีหรือมีการเชื่อมต่อกับโฮสต์ใหม่บ่อยครั้ง ตัวเลือกนี้บังคับให้ผู้ใช้เพิ่มโฮสต์ใหม่ทั้งหมดด้วยตนเอง หากตั้งค่าสถานะนี้เป็น“ ไม่” sshจะเพิ่มคีย์โฮสต์ใหม่โดยอัตโนมัติไปยังไฟล์โฮสต์ที่ผู้ใช้รู้จัก หากการตั้งค่าสถานะนี้เป็น“ ถาม” โฮสต์คีย์ใหม่จะถูกเพิ่มลงในไฟล์โฮสต์ที่ผู้ใช้รู้จักหลังจากผู้ใช้ยืนยันว่าเป็นสิ่งที่พวกเขาต้องการทำจริงและ sshจะปฏิเสธที่จะเชื่อมต่อกับโฮสต์ที่มีการเปลี่ยนแปลงคีย์โฮสต์ . คีย์โฮสต์ของโฮสต์ที่รู้จักจะได้รับการตรวจสอบโดยอัตโนมัติในทุกกรณี อาร์กิวเมนต์ต้องเป็น "ใช่", "ไม่" หรือ "ถาม" ค่าเริ่มต้นคือ“ ถาม”


1
+1, ฉันใช้นี่สำหรับเซิร์ฟเวอร์ของฉันด้วย และเพื่อความชัดเจนข้อความในคำถามนั้นมาจากไคลเอนต์ ssh บนคอมพิวเตอร์ไคลเอนต์ที่เชื่อมต่อไม่ใช่จากเซิร์ฟเวอร์
Patkos Csaba

3
คำตอบนี้ดูเหมือนปัญหาความปลอดภัยในการทำ
SunSparc

25

ssh-keyscan - รวบรวมกุญแจสาธารณะ ssh

หากคุณทราบรายชื่อโฮสต์ที่คุณจะเชื่อมต่อแล้วคุณสามารถออก:

ssh-keyscan host1 host2 host3 host4

คุณสามารถให้-Hตัวเลือกเพื่อให้แฮชผลลัพธ์เช่นค่าเริ่มต้นของ ssh

นอกจากนี้คุณสามารถให้-t keytypeถูกkeyTypeคือdsa, rsaหรือecdsaถ้าคุณมีการตั้งค่าเป็นที่ประเภทของกุญแจสำคัญในการคว้าแทนการเริ่มต้น

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


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

4
ยืนยันกับtechrepublic.com/article/… . ssh-keyscan -H myhost >> ~/.ssh/known_hostsหรือสำหรับทั้งเซิร์ฟเวอร์/etc/ssh/ssh_known_hosts
cole

12

คุณสามารถเพิ่มลายนิ้วมือให้กับ known_hosts ของแต่ละเซิร์ฟเวอร์ สำหรับผู้ใช้คนเดียว:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts

3
นี่ไม่ใช่วิธีที่ถูกต้องอีกต่อไปแล้วตั้งแต่เมื่อมีการแนะนำการแฮ็ก
Deim0s

10

ละเว้นโฮสต์

ไม่สนใจ HostKeyChecking สำหรับสิ่งนี้ฉันใช้เช่น:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net

เพิ่มโฮสต์

เพิ่มลายนิ้วมือของโฮสต์ / เซิร์ฟเวอร์.ssh/known_hostsก่อนที่จะเชื่อมต่อครั้งแรกของคุณ นี่เป็นวิธีที่ปลอดภัยกว่า


สวัสดี ออราเคิลออกคำสั่ง ssh ดังนั้นฉันจึงไม่สามารถควบคุมการทำงานนี้ได้
Nicolas de Fontenay

upvoted คำตอบส่วนใหญ่ฉันเคยเห็นพลาดการกล่าวถึง dev deving ไฟล์โฮสต์ที่รู้จัก สิ่งนี้ทำให้คำสั่งใช้งานได้มากขึ้นและจะไม่ทำลายการกำหนดค่าใด ๆ ที่มีอยู่
อเล็กซ์

(2) แน่นอนว่าการเพิ่มลายนิ้วมือลงในไฟล์โฮสต์ที่รู้จักนั้นเป็นวิธีที่เหมาะสมที่สุด - แต่วิธีหนึ่งทำได้อย่างไร? (1) ทำไมมันจึงเป็นประโยชน์ต่อการตั้งค่าการใช้ไฟล์โฮสต์ที่รู้จักกัน  /dev/null? จะดีกว่าไหมถ้าทำssh -oStrictHostKeyChecking=no user@example.netครั้งเดียวเพื่อให้ได้ลายนิ้วมือของเซิร์ฟเวอร์ใน$HOME/.ssh/known_hostsไฟล์ดังนั้นการเชื่อมต่อที่ตามมาจะดำเนินต่อไปโดยไม่มีการร้องขอให้ยืนยัน?
G-Man

3

ดำเนินการตัวอย่างต่อไปนี้ก่อนที่จะลอง

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: ไม่เคร่งครัดสำหรับเซิร์ฟเวอร์ที่ใช้งานจริงระวัง ManInMiddle


0

ฉันชอบคำตอบของ Tim สำหรับสิ่งที่ไม่ชอบอย่างไรก็ตามถ้านี่เป็นโฮสต์ที่คุณตั้งใจจะเชื่อมต่อเป็นประจำฉันจะสร้างรายการใน ~ / .ssh / config ของคุณ (สร้างถ้าไม่มีไฟล์)

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.