เราได้ยกย่องคุณงามความดีของ SSH หลายต่อหลายครั้งทั้งในด้านความปลอดภัยและการเข้าถึงระยะไกล เรามาดูตัวเซิร์ฟเวอร์กันด้าน "การบำรุงรักษา" ที่สำคัญบางประการและนิสัยใจคอบางอย่างที่สามารถเพิ่มความปั่นป่วนให้กับการขับขี่ที่ราบรื่น
แม้ว่าเราจะเขียนคู่มือนี้โดยคำนึงถึง Linux แต่ก็สามารถใช้ได้กับ OpenSSH ใน Mac OS X และ Windows 7 ผ่าน Cygwin .
เหตุใดจึงปลอดภัย
เราได้พูดถึงหลายครั้งแล้วว่า SSH เป็นวิธีที่ยอดเยี่ยมในการเชื่อมต่อและอุโมงค์ข้อมูลจากจุดหนึ่งไปยังอีกจุดหนึ่งอย่างปลอดภัยได้อย่างไร เรามาดูคร่าวๆกันดีกว่าว่าสิ่งต่างๆทำงานอย่างไรเพื่อให้คุณเข้าใจได้ดีขึ้นว่าทำไมบางครั้งสิ่งต่างๆจึงแปลก
เมื่อเราตัดสินใจที่จะเริ่มการเชื่อมต่อกับคอมพิวเตอร์เครื่องอื่นเรามักจะใช้โปรโตคอลที่ใช้งานง่าย Telnet และ FTP เป็นสิ่งที่ดี เราส่งข้อมูลไปยังเซิร์ฟเวอร์ระยะไกลจากนั้นเราจะได้รับการยืนยันกลับเกี่ยวกับการเชื่อมต่อของเรา เพื่อสร้างความปลอดภัยบางประเภทโปรโตคอลเหล่านี้มักใช้การผสมชื่อผู้ใช้และรหัสผ่าน นั่นหมายความว่าปลอดภัยทั้งหมดใช่มั้ย? ไม่ถูกต้อง!
หากเราคิดว่ากระบวนการเชื่อมต่อของเราเป็นอีเมลการใช้ FTP และ Telnet และสิ่งที่คล้ายกันนั้นไม่เหมือนกับการใช้ซองจดหมายมาตรฐาน เหมือนใช้โปสการ์ดมากกว่า หากมีใครบางคนก้าวเข้ามาตรงกลางพวกเขาจะเห็นข้อมูลทั้งหมดรวมทั้งที่อยู่ของผู้ติดต่อและชื่อผู้ใช้และรหัสผ่านที่ส่งออกไป จากนั้นพวกเขาสามารถเปลี่ยนข้อความทำให้ข้อมูลเหมือนเดิมและแอบอ้างเป็นผู้สื่อข่าวคนหนึ่งหรือคนอื่น ๆ สิ่งนี้เรียกว่าการโจมตีแบบ "คนตรงกลาง" และไม่เพียง แต่ทำให้บัญชีของคุณเสียหายเท่านั้น แต่ยังทำให้เกิดคำถามในแต่ละข้อความที่ส่งและไฟล์ที่ได้รับอีกด้วย คุณไม่สามารถแน่ใจได้ว่าคุณกำลังคุยกับผู้ส่งอยู่หรือไม่และแม้ว่าคุณจะอยู่ แต่คุณก็ไม่สามารถมั่นใจได้ว่าไม่มีใครมองทุกอย่างจากระหว่างนั้น
ตอนนี้เรามาดูการเข้ารหัส SSL ซึ่งเป็นประเภทที่ทำให้ HTTP ปลอดภัยมากขึ้น ที่นี่เรามีที่ทำการไปรษณีย์ที่จัดการการติดต่อซึ่งจะตรวจสอบว่าผู้รับของคุณเป็นคนที่เขาอ้างว่าเป็นหรือไม่และมีกฎหมายป้องกันไม่ให้มีการตรวจสอบจดหมายของคุณ โดยรวมมีความปลอดภัยมากขึ้นและหน่วยงานกลาง - Verisign เป็นหนึ่งในตัวอย่าง HTTPS ของเรา - ตรวจสอบให้แน่ใจว่าบุคคลที่คุณส่งอีเมลไปชำระเงิน โดยไม่อนุญาตให้ใช้โปสการ์ด (ข้อมูลรับรองที่ไม่ได้เข้ารหัส) แทนที่จะมอบอำนาจให้ซองจดหมายจริง
สุดท้ายมาดู SSH กัน ที่นี่การตั้งค่าจะแตกต่างกันเล็กน้อย เราไม่มีตัวตรวจสอบสิทธิ์ส่วนกลางที่นี่ แต่สิ่งต่างๆยังคงปลอดภัย นั่นเป็นเพราะคุณกำลังส่งจดหมายถึงคนที่คุณรู้จักที่อยู่อยู่แล้วพูดโดยการแชทกับพวกเขาทางโทรศัพท์และคุณกำลังใช้วิธีคิดเลขแปลก ๆ ในการเซ็นซองจดหมาย คุณส่งมอบให้พี่ชายแฟนพ่อหรือลูกสาวของคุณเพื่อนำไปยังที่อยู่และเฉพาะในกรณีที่ผู้รับตรงตามหลักคณิตศาสตร์ที่คุณคิดว่าที่อยู่นั้นควรจะเป็น จากนั้นคุณจะได้รับจดหมายกลับมาและได้รับการปกป้องจากการสอดรู้สอดเห็นด้วยคณิตศาสตร์ที่ยอดเยี่ยมนี้ สุดท้ายคุณส่งข้อมูลประจำตัวของคุณในซองจดหมายที่มีอัลกอริธึมลับอีกซองหนึ่งไปยังปลายทาง หากคณิตศาสตร์ไม่ตรงกันเราสามารถสันนิษฐานได้ว่าผู้รับเดิมย้ายไปและเราจำเป็นต้องยืนยันที่อยู่อีกครั้ง
ด้วยคำอธิบายตราบเท่าที่เป็นอยู่เราคิดว่าเราจะตัดมันตรงนั้น หากคุณมีข้อมูลเชิงลึกมากขึ้นอย่าลังเลที่จะแชทในความคิดเห็นแน่นอน สำหรับตอนนี้เรามาดูคุณลักษณะที่เกี่ยวข้องมากที่สุดของ SSH นั่นคือการตรวจสอบสิทธิ์โฮสต์
โฮสต์คีย์
การตรวจสอบความถูกต้องของโฮสต์เป็นส่วนสำคัญที่บุคคลที่คุณไว้วางใจจะนำซองจดหมาย (ปิดผนึกด้วยคณิตศาสตร์วิเศษ) และยืนยันที่อยู่ผู้รับ มันเป็นคำอธิบายโดยละเอียดของที่อยู่และมันขึ้นอยู่กับคณิตศาสตร์ที่ซับซ้อนบางอย่างซึ่งเราจะข้ามไปเลย มีสองสิ่งสำคัญที่ต้องหลีกเลี่ยงสิ่งนี้:
- เนื่องจากไม่มีหน่วยงานกลางความปลอดภัยที่แท้จริงจึงอยู่ที่คีย์โฮสต์คีย์สาธารณะและคีย์ส่วนตัว (สองคีย์หลังนี้ได้รับการกำหนดค่าเมื่อคุณได้รับสิทธิ์เข้าถึงระบบ)
- โดยปกติเมื่อคุณเชื่อมต่อกับคอมพิวเตอร์เครื่องอื่นผ่าน SSH คีย์โฮสต์จะถูกเก็บไว้ สิ่งนี้ทำให้การดำเนินการในอนาคตเร็วขึ้น (หรือใช้คำละเอียดน้อยลง)
- หากคีย์โฮสต์มีการเปลี่ยนแปลงคุณมักจะได้รับการแจ้งเตือนและคุณควรระวัง!
เนื่องจากโฮสต์คีย์ถูกใช้ก่อนการพิสูจน์ตัวตนเพื่อสร้างข้อมูลประจำตัวของเซิร์ฟเวอร์ SSH คุณควรตรวจสอบคีย์ก่อนที่จะเชื่อมต่อ คุณจะเห็นกล่องโต้ตอบการยืนยันดังด้านล่าง
คุณไม่ควรกังวล แต่! บ่อยครั้งที่ความปลอดภัยเป็นปัญหาจะมีสถานที่พิเศษที่สามารถยืนยันรหัสโฮสต์ (ลายนิ้วมือ ECDSA ด้านบน) ได้ ในกิจการออนไลน์ทั้งหมดมักจะอยู่ในไซต์การเข้าสู่ระบบที่ปลอดภัยเท่านั้น คุณอาจต้อง (หรือเลือกที่จะ!) โทรหาแผนกไอทีของคุณเพื่อยืนยันรหัสนี้ทางโทรศัพท์ ฉันเคยได้ยินด้วยซ้ำว่ามีบางแห่งที่กุญแจอยู่บนป้ายงานของคุณหรือในรายการ "หมายเลขฉุกเฉิน" พิเศษ และหากคุณสามารถเข้าถึงเครื่องเป้าหมายได้คุณสามารถตรวจสอบตัวเองได้ด้วย!
ตรวจสอบรหัสโฮสต์ของระบบของคุณ
มีอัลกอริทึมการเข้ารหัส 4 ประเภทที่ใช้ในการสร้างคีย์ แต่ค่าเริ่มต้นของ OpenSSH เมื่อต้นปีนี้คือ ECDSA ( ด้วยเหตุผลที่ดี ). เราจะมุ่งเน้นไปที่สิ่งนั้นในวันนี้ นี่คือคำสั่งที่คุณสามารถเรียกใช้บนเซิร์ฟเวอร์ SSH ที่คุณเข้าถึงได้:
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key.pub -l
ผลลัพธ์ของคุณควรคืนค่าดังนี้:
256 ца: 62: еа: щц: еч: яй: 2е: аш: яч: 20: 11: дб: яц: 78: цз: чц/етц/сш/сш_хост_ецдса_кей.пуб
ตัวเลขแรกคือความยาวบิตของคีย์จากนั้นก็คือคีย์นั้นเองและในที่สุดคุณก็มีไฟล์ที่เก็บไว้เปรียบเทียบส่วนตรงกลางนั้นกับสิ่งที่คุณเห็นเมื่อคุณได้รับแจ้งให้ลงชื่อเข้าใช้จากระยะไกล มันควรจะตรงกันและคุณพร้อมแล้ว หากไม่เป็นเช่นนั้นก็อาจมีสิ่งอื่นเกิดขึ้น
คุณสามารถดูโฮสต์ทั้งหมดที่คุณเชื่อมต่อผ่าน SSH ได้โดยดูที่ไฟล์ known_hosts ของคุณ โดยปกติจะอยู่ที่:
~ / .ssh / known_hosts
คุณสามารถเปิดได้ในโปรแกรมแก้ไขข้อความใดก็ได้ หากคุณดูพยายามใส่ใจกับวิธีการจัดเก็บคีย์ ข้อมูลเหล่านี้จะถูกจัดเก็บโดยใช้ชื่อคอมพิวเตอร์โฮสต์ (หรือที่อยู่เว็บ) และที่อยู่ IP
การเปลี่ยนคีย์โฮสต์และปัญหา
มีสาเหตุสองสามประการที่ทำให้คีย์โฮสต์เปลี่ยนไปหรือไม่ตรงกับสิ่งที่บันทึกไว้ในไฟล์ known_hosts ของคุณ
- ระบบได้รับการติดตั้งใหม่ / กำหนดค่าใหม่
- คีย์โฮสต์ถูกเปลี่ยนด้วยตนเองเนื่องจากโปรโตคอลความปลอดภัย
- เซิร์ฟเวอร์ OpenSSH ได้รับการอัปเดตและใช้มาตรฐานที่แตกต่างกันเนื่องจากปัญหาด้านความปลอดภัย
- สัญญาเช่า IP หรือ DNS มีการเปลี่ยนแปลง ซึ่งมักหมายความว่าคุณกำลังพยายามเข้าถึงคอมพิวเตอร์เครื่องอื่น
- ระบบถูกบุกรุกไม่ทางใดก็ทางหนึ่งทำให้คีย์โฮสต์เปลี่ยนไป
เป็นไปได้มากว่าปัญหาคือ 1 ใน 3 ข้อแรกและคุณสามารถเพิกเฉยต่อการเปลี่ยนแปลงได้ หากสัญญาเช่า IP / DNS มีการเปลี่ยนแปลงอาจมีปัญหากับเซิร์ฟเวอร์และคุณอาจถูกส่งไปยังเครื่องอื่น หากคุณไม่แน่ใจว่าสาเหตุของการเปลี่ยนแปลงคืออะไรคุณควรคิดว่านี่เป็นข้อสุดท้ายในรายการ
OpenSSH จัดการโฮสต์ที่ไม่รู้จักอย่างไร
OpenSSH มีการตั้งค่าสำหรับวิธีจัดการโฮสต์ที่ไม่รู้จักซึ่งแสดงในตัวแปร“ StrictHostKeyChecking” (โดยไม่มีเครื่องหมายคำพูด)
ขึ้นอยู่กับการกำหนดค่าของคุณการเชื่อมต่อ SSH กับโฮสต์ที่ไม่รู้จัก (ซึ่งคีย์ยังไม่มีอยู่ในไฟล์ known_hosts ของคุณ) สามารถทำได้สามวิธี
- StrictHostKeyChecking ถูกตั้งค่าเป็น no; OpenSSH จะเชื่อมต่อกับเซิร์ฟเวอร์ SSH โดยอัตโนมัติโดยไม่คำนึงถึงสถานะคีย์โฮสต์ สิ่งนี้ไม่ปลอดภัยและไม่แนะนำยกเว้นในกรณีที่คุณกำลังเพิ่มโฮสต์จำนวนมากหลังจากติดตั้งระบบปฏิบัติการของคุณใหม่หลังจากนั้นคุณจะเปลี่ยนกลับ
- StrictHostKeyChecking ถูกตั้งค่าให้ถาม; OpenSSH จะแสดงคีย์โฮสต์ใหม่ให้คุณและขอการยืนยันก่อนเพิ่ม จะป้องกันไม่ให้การเชื่อมต่อไปยังคีย์โฮสต์ที่เปลี่ยนแปลง นี่คือค่าเริ่มต้น
- StrictHostKeyChecking ตั้งค่าเป็นใช่ ตรงกันข้ามกับ“ ไม่” สิ่งนี้จะป้องกันไม่ให้คุณเชื่อมต่อกับโฮสต์ใด ๆ ที่ยังไม่มีอยู่ในไฟล์ known_hosts ของคุณ
คุณสามารถเปลี่ยนตัวแปรนี้ได้อย่างง่ายดายบนบรรทัดคำสั่งโดยใช้กระบวนทัศน์ต่อไปนี้:
ssh -o 'StrictHostKeyChecking [option]' user @ host
แทนที่ [option] ด้วย“ ไม่”“ ถาม” หรือ“ ใช่” โปรดทราบว่ามีอัญประกาศตรงรอบตัวแปรนี้และการตั้งค่า แทนที่ user @ host ด้วยชื่อผู้ใช้และชื่อโฮสต์ของเซิร์ฟเวอร์ที่คุณกำลังเชื่อมต่อ ตัวอย่างเช่น:
ssh -o 'StrictHostKeyChecking ask' [email protected]
โฮสต์ที่ถูกบล็อกเนื่องจากมีการเปลี่ยนคีย์
หากคุณมีเซิร์ฟเวอร์ที่คุณกำลังพยายามเข้าถึงซึ่งมีการเปลี่ยนแปลงคีย์อยู่แล้วการกำหนดค่า OpenSSH เริ่มต้นจะป้องกันไม่ให้คุณเข้าถึงได้ คุณสามารถเปลี่ยนค่า StrictHostKeyChecking สำหรับโฮสต์นั้นได้ แต่จะไม่ปลอดภัยทั้งหมดอย่างละเอียดรอบคอบหรือไม่ แต่เราสามารถลบค่าที่ละเมิดออกจากไฟล์ known_hosts ของเราได้
นั่นเป็นสิ่งที่น่าเกลียดอย่างแน่นอนที่จะมีบนหน้าจอของคุณ โชคดีที่เหตุผลของเราคือระบบปฏิบัติการที่ติดตั้งใหม่ ดังนั้นเรามาขยายเส้นที่เราต้องการ
เราจะไปที่นั่น. ดูว่ามันอ้างอิงไฟล์ที่เราต้องการแก้ไขอย่างไร? มันให้เบอร์ไลน์เราด้วยซ้ำ! มาเปิดไฟล์นั้นใน Nano:
นี่คือคีย์ที่ไม่เหมาะสมของเราในบรรทัดที่ 1 สิ่งที่เราต้องทำคือกด Ctrl + K เพื่อตัดทั้งบรรทัด
ดีกว่ามาก! ตอนนี้เรากด Ctrl + O เพื่อเขียน (บันทึก) ไฟล์แล้วกด Ctrl + X เพื่อออก
ตอนนี้เราได้รับคำแนะนำที่ดีแทนซึ่งเราสามารถตอบกลับด้วยคำว่า“ ใช่”
การสร้างคีย์โฮสต์ใหม่
สำหรับบันทึกนี้ไม่มีเหตุผลมากเกินไปที่คุณจะเปลี่ยนรหัสโฮสต์ของคุณเลย แต่ถ้าคุณพบความต้องการคุณสามารถทำได้อย่างง่ายดาย
ขั้นแรกเปลี่ยนเป็นไดเร็กทอรีระบบที่เหมาะสม:
ซีดี / etc / ssh /
ซึ่งโดยปกติจะเป็นที่ที่คีย์โฮสต์ส่วนกลางแม้ว่าจะมีการวาง distros ไว้ที่อื่นก็ตาม หากมีข้อสงสัยโปรดตรวจสอบเอกสารของคุณ!
ต่อไปเราจะลบคีย์เก่าทั้งหมด
sudo rm / etc / ssh / ssh_host_ *
หรือคุณอาจต้องการย้ายไปยังไดเร็กทอรีสำรองที่ปลอดภัย แค่คิด!
จากนั้นเราสามารถบอกให้เซิร์ฟเวอร์ OpenSSH กำหนดค่าตัวเองใหม่ได้:
sudo dpkg- กำหนดค่า openssh-server ใหม่
คุณจะเห็นข้อความแจ้งขณะที่คอมพิวเตอร์ของคุณสร้างคีย์ใหม่ ตา - ดา!
ตอนนี้คุณรู้แล้วว่า SSH ทำงานได้ดีขึ้นเล็กน้อยคุณควรจะสามารถพาตัวเองออกจากจุดที่ยากลำบากได้ คำเตือน / ข้อผิดพลาด“ การระบุโฮสต์ระยะไกลมีการเปลี่ยนแปลง” เป็นสิ่งที่ทำให้ผู้ใช้จำนวนมากปิดแม้กระทั่งผู้ที่คุ้นเคยกับบรรทัดคำสั่ง
สำหรับคะแนนโบนัสคุณสามารถตรวจสอบ วิธีคัดลอกไฟล์จากระยะไกลผ่าน SSH โดยไม่ต้องป้อนรหัสผ่าน . คุณจะได้เรียนรู้เพิ่มเติมเล็กน้อยเกี่ยวกับอัลกอริทึมการเข้ารหัสประเภทอื่น ๆ และวิธีใช้ไฟล์คีย์เพื่อเพิ่มความปลอดภัย