ตั้งค่าการเข้าสู่ระบบแบบไม่ต้องใช้รหัสผ่านที่ปลอดภัยสำหรับเซิร์ฟเวอร์ Ubuntu ระยะไกลของคุณโดยใช้คีย์ SSH
SSH เป็นโปรโตคอลเครือข่ายไคลเอนต์ - เซิร์ฟเวอร์ที่ปลอดภัยซึ่งช่วยให้คอมพิวเตอร์ไคลเอนต์เชื่อมต่อและสื่อสารกับเซิร์ฟเวอร์ระยะไกล การเชื่อมต่อ SSH ช่วยให้มั่นใจได้ว่าคำสั่งที่พิมพ์ในเทอร์มินัลจะถูกส่งไปยังเซิร์ฟเวอร์ระยะไกลผ่านช่องทางที่เข้ารหัส
กลไกการตรวจสอบสิทธิ์มีสองประเภทที่ใช้ในการเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล การตรวจสอบโดยใช้รหัสผ่าน (มีแนวโน้มที่จะถูกโจมตีแบบ Brute-force) และการรับรองความถูกต้องตาม SSH Keys (ซึ่งมีความปลอดภัยมาก)
ในการรับรองความถูกต้องโดยใช้คีย์ SSH คู่คีย์จะถูกสร้างขึ้นบนคอมพิวเตอร์ไคลเอนต์ ซึ่งเรียกว่าคีย์สาธารณะและคีย์ส่วนตัว สำเนาของกุญแจสาธารณะนี้มีอยู่ในเซิร์ฟเวอร์ระยะไกล เมื่อไคลเอนต์ส่งคำขอเชื่อมต่อไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะสร้างสตริงแบบสุ่มและเข้ารหัสโดยใช้กุญแจสาธารณะ สตริงนี้สามารถถอดรหัสลับได้โดยใช้คีย์ส่วนตัวที่มีอยู่ในคอมพิวเตอร์ไคลเอนต์เท่านั้น วิธีนี้ช่วยให้แน่ใจว่าเซิร์ฟเวอร์สามารถเข้าถึงได้โดยไคลเอ็นต์ที่มีคีย์ส่วนตัวเท่านั้น
ในคู่มือนี้ เราจะมาดูวิธีตั้งค่า SSH Keys บนเซิร์ฟเวอร์ Ubuntu 20.04 LTS
ดูว่าคุณมีคีย์ SSH อยู่ในคอมพิวเตอร์หรือไม่
หากต้องการตรวจสอบว่ามีคู่คีย์ SSH อยู่แล้วในคอมพิวเตอร์ของคุณหรือไม่ ให้พิมพ์คำสั่งนี้ในเทอร์มินัลของคุณ
ls -l ~/.ssh/id_*.pub
หากคำสั่งข้างต้นส่งคืน ไม่พบไฟล์หรือโฟลเดอร์ที่คุณค้นหา
หรือ ไม่พบรายการที่ตรงกัน
หมายความว่าไม่มีคู่คีย์ SSH
หากคุณมีคู่คีย์ SSH อยู่แล้ว คุณสามารถใช้คู่คีย์เดียวกันเพื่อเข้าถึงเซิร์ฟเวอร์ระยะไกลสองเครื่อง หรือคุณสามารถสร้างคู่คีย์อื่นที่มีชื่อต่างกันก็ได้ ไปที่ขั้นตอนต่อไปและดูวิธีสร้างคีย์ SSH สำหรับทั้งสองกรณี
การสร้างคีย์ SSH บนคอมพิวเตอร์ไคลเอนต์
ในการสร้างคู่คีย์ SSH ใหม่บนคอมพิวเตอร์ของคุณ ให้พิมพ์คำสั่งดังที่แสดงด้านล่าง
ssh-keygen
โดยค่าเริ่มต้น คีย์ SSH จะเป็น 2048 บิต เพื่อความปลอดภัยที่ดีขึ้น หากคุณต้องการสร้างคีย์ SSH ด้วยบิตที่สูงกว่า ให้ใช้คำสั่งต่อไปนี้
ssh-keygen -b 4096
หากคำสั่งทำงานสำเร็จ ข้อความต่อไปนี้จะแจ้งบนหน้าจอของคุณ
สร้างคู่คีย์ rsa สาธารณะ / ส่วนตัว ป้อนไฟล์ที่จะบันทึกคีย์ (/home/harshit/.ssh/id_rsa):
ตอนนี้ หากคุณไม่มีคู่คีย์ SSH ที่มีอยู่ในคอมพิวเตอร์ของคุณ ให้กด เข้า
แต่ถ้าคุณมีคีย์ SSH อยู่แล้ว ให้บันทึกคีย์ด้วยชื่อไฟล์อื่นดังที่แสดงด้านล่าง
ป้อนไฟล์ที่จะบันทึกคีย์ (/home/your_name/.ssh/id_rsa): /home/your_name/.ssh/id_rsa_xxx
แทนที่ xxx
ต่อท้ายชื่อไฟล์ด้วยชื่อที่เหมาะสมดังรูปด้านล่างแล้วกด เข้า
.
ป้อนไฟล์ที่จะบันทึกคีย์ (/home/your_name/.ssh/id_rsa): /home/your_name/.ssh/id_rsa_client_1
ข้อความแจ้งถัดไปจะขอให้คุณป้อนข้อความรหัสผ่านที่มีความยาวตามอำเภอใจ ซึ่งจะรับรองความปลอดภัยสองระดับบนอุปกรณ์ของคุณ
ป้อนข้อความรหัสผ่าน (เว้นว่างไว้สำหรับไม่มีข้อความรหัสผ่าน): ป้อนข้อความรหัสผ่านเดิมอีกครั้ง:
การป้อนข้อความรหัสผ่านนี้จะช่วยให้มั่นใจได้ว่าแม้ว่าบุคคลจะเข้าถึงคีย์ส่วนตัวของคุณ เขาก็จะไม่สามารถเข้าถึงเซิร์ฟเวอร์ระยะไกลของคุณได้หากไม่มีข้อความรหัสผ่านนี้
เมื่อกระบวนการทั้งหมดเสร็จสมบูรณ์ ข้อความต่อไปนี้จะปรากฏขึ้นบนหน้าจอของคุณ
คีย์ SSH ได้ถูกสร้างขึ้นบนระบบของคุณแล้ว ตอนนี้ได้เวลาคัดลอกกุญแจสาธารณะบนเซิร์ฟเวอร์ระยะไกลแล้ว
การคัดลอกกุญแจสาธารณะไปยังเซิร์ฟเวอร์ Ubuntu ระยะไกล
วิธีที่ง่ายและรวดเร็วที่สุดในการคัดลอกกุญแจสาธารณะไปยังเซิร์ฟเวอร์ระยะไกลคือการใช้ ssh-copy-id
คุณประโยชน์. แต่ถ้ายูทิลิตี้นี้ไม่มีในเครื่องของคุณเนื่องจากเหตุผลบางประการ คุณสามารถใช้วิธีอื่นที่มีให้ในหัวข้อนี้
การใช้ยูทิลิตี้ ssh-copy-id
ดิ ssh-copy-id
โดยค่าเริ่มต้นยูทิลิตี้จะมีอยู่ในเครื่อง Ubuntu ของคุณ ซึ่งจะคัดลอกกุญแจสาธารณะจากอุปกรณ์ของคุณไปยังไดเร็กทอรีที่เหมาะสมของเครื่อง Ubuntu ระยะไกลของคุณ
ในการคัดลอกคีย์ ssh สาธารณะ เพียงพิมพ์คำสั่งในเทอร์มินัลของคุณ ดังที่แสดงด้านล่าง
ssh-copy-id username@hostname
แทนที่ ชื่อผู้ใช้
และ ชื่อโฮสต์
ในคำสั่งด้านบนด้วยชื่อผู้ใช้และชื่อโฮสต์ของเซิร์ฟเวอร์ของคุณ
ข้อความต่อไปนี้จะปรากฏบนเทอร์มินัลของคุณ หากคุณเชื่อมต่อกับโฮสต์ของคุณเป็นครั้งแรก พิมพ์ ใช่
แล้วกด เข้า
.
ไม่สามารถสร้างความถูกต้องของโฮสต์ '172.105.XX.XX (172.105.XX.XX)' ลายนิ้วมือของคีย์ ECDSA คือ xx:xx:xx:xx:77:fe:73:xx:xx:55:00:ad:d6:xx:xx:xx คุณแน่ใจหรือว่าต้องการเชื่อมต่อต่อ (ใช่/ไม่ใช่) ใช่
ตอนนี้ ssh-copy-id
ยูทิลิตี้จะสแกนหาไฟล์ที่มีชื่อ id_rsa.pub
ซึ่งมีคีย์ SSH สาธารณะ เมื่อการสแกนเสร็จสิ้น ระบบจะแจ้งให้คุณป้อนรหัสผ่านของเซิร์ฟเวอร์ระยะไกลดังที่แสดงด้านล่าง พิมพ์รหัสผ่านและกด เข้า
.
/usr/bin/ssh-copy-id: INFO: พยายามเข้าสู่ระบบด้วยคีย์ใหม่ เพื่อกรองข้อมูลที่ติดตั้งไว้แล้ว /usr/bin/ssh-copy-id: INFO: 1 คีย์ ) ยังคงต้องติดตั้งอยู่ -- หากคุณได้รับแจ้งในตอนนี้ ให้ติดตั้งรหัสผ่านของรหัส [email protected] ใหม่:
เมื่อเพิ่มคีย์แล้ว ข้อความต่อไปนี้จะปรากฏบนเทอร์มินัลของคุณเป็นเอาต์พุต
จำนวนคีย์ที่เพิ่ม: 1 ตอนนี้ ลองลงชื่อเข้าใช้เครื่องด้วย: "ssh '[email protected]'" และตรวจสอบให้แน่ใจว่าได้เพิ่มเฉพาะคีย์ที่คุณต้องการเท่านั้น
ในกรณีที่คุณมีคีย์ SSH หลายคีย์ในคอมพิวเตอร์ไคลเอนต์ของคุณ ให้คัดลอกคีย์สาธารณะที่เหมาะสมไปยังคอมพิวเตอร์ระยะไกลของคุณ ให้พิมพ์คำสั่งในรูปแบบที่แสดงด้านล่าง
ssh-copy-id -i id_rsa_xxx.pub username@host
💡 เคล็ดลับ
อย่าลืมใส่ .pub ต่อท้ายชื่อไฟล์ขณะพิมพ์ในเทอร์มินัล
การคัดลอกกุญแจสาธารณะโดยวิธีการวางท่อ
พิมพ์คำสั่งต่อไปนี้ในเทอร์มินัล if ssh-copy-id
ยูทิลิตี้ไม่สามารถใช้ได้ คำสั่งนี้อาจดูยาวกว่าเล็กน้อย แต่ใช้งานได้อย่างเหมาะสม
cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
แทนที่ remote_username
และ server_ip_address
ด้วยชื่อผู้ใช้และที่อยู่ IP ของคุณ
หากคุณมีคีย์ SSH หลายคีย์ในคอมพิวเตอร์ของคุณ ให้เปลี่ยนปุ่ม id_rsa.pub
ด้วยไฟล์คีย์ SSH สาธารณะที่คุณเลือก ตัวอย่างเช่น, id_rsa_client_1.pub
.
พิมพ์รหัสผ่านผู้ใช้ระยะไกลเมื่อได้รับพร้อมท์และกด เข้า
.
[email protected] รหัสผ่าน:
เมื่อคุณพิมพ์รหัสผ่าน id_rsa.pub
ไฟล์จะถูกคัดลอกไปที่ ได้รับอนุญาต_keys
ไฟล์ของเซิร์ฟเวอร์ระยะไกล
การคัดลอกกุญแจสาธารณะ
ใช้วิธีนี้เมื่อคุณไม่มีสิทธิ์เข้าถึงระบบรีโมตผ่านการพิสูจน์ตัวตนด้วยรหัสผ่าน
เปิด id_rsa.pub
ไฟล์โดยใช้ แมว
คำสั่งในเทอร์มินัล คุณยังสามารถเปิดได้จากโปรแกรมแก้ไขข้อความ โดยมีจุดประสงค์เพื่อคัดลอกเนื้อหาของไฟล์เท่านั้น
แมว ~/.ssh/id_rsa.pub
เนื้อหาของไฟล์จะมีลักษณะดังที่แสดงด้านล่าง
SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib VvJyZ + + dGO8zRNT64 SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6HY / 65 + qqmiuLyuIQXjDiiYTjHTx + + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z csqdvIDQfMuH your_name @ your_PC
ตอนนี้ เข้าสู่ระบบเซิร์ฟเวอร์ระยะไกลของคุณ และวางเนื้อหาที่คัดลอกโดยใช้คำสั่งที่แสดงด้านล่าง แทนที่ above_string
ด้วยเนื้อหาที่คัดลอกมา
echo above_string >> ~/.ssh/authorized_keys
การกำหนดค่าคีย์ SSH หลายรายการ (ไม่บังคับ)
ขั้นตอนนี้มีไว้สำหรับผู้ที่มีการตั้งค่าคีย์ SSH หลายรายการบนคอมพิวเตอร์ไคลเอนต์ของตน ข้ามส่วนนี้หากคุณมีการตั้งค่าคีย์ SSH เพียงรายการเดียว
ในการจัดการคีย์ SSH หลายรายการ ตอนนี้เราจะสร้าง a config
ไฟล์ภายใน .ssh
ไดเร็กทอรีโดยใช้คำสั่งที่แสดงด้านล่าง
cd ~/.ssh vim config
พิมพ์ ผม
เพื่อเข้าสู่โหมดคำสั่งและพิมพ์รายละเอียดของหลายโฮสต์ ดังตัวอย่างต่อไปนี้
โฮสต์เซิร์ฟเวอร์ระยะไกลอูบุนตู ชื่อโฮสต์ 172.105.XX.XX รูทผู้ใช้ IdentityFile ~/.ssh/id_rsa_client_1 โฮสต์เซิร์ฟเวอร์ระยะไกลอูบุนตู ชื่อโฮสต์ 172.106.XX.XX รูทผู้ใช้ IdentityFile ~/.ssh/id_rsa_client_2
ในทำนองเดียวกัน พิมพ์รายละเอียดของเซิร์ฟเวอร์ระยะไกลอื่นๆ และคีย์ของเซิร์ฟเวอร์เหล่านั้น เมื่อดำเนินการเสร็จสิ้น กด เอสค
และ :wq
เพื่อบันทึกและออก
ตอนนี้ กระบวนการที่ตามมาจะเหมือนกันสำหรับทั้งการมีคีย์ SSH เดียวหรือหลายรายการบนคอมพิวเตอร์ไคลเอนต์
เข้าสู่ระบบเซิร์ฟเวอร์ระยะไกลของคุณโดยใช้คีย์ SSH
เมื่อกระบวนการคัดลอกคีย์สาธารณะของคุณเสร็จสิ้น ให้เข้าสู่ระบบเซิร์ฟเวอร์ระยะไกลโดยพิมพ์คำสั่งดังที่แสดงด้านล่าง
ssh remote_username@server_ip_address
หากคุณระบุข้อความรหัสผ่านขณะสร้างคู่คีย์ คุณจะได้รับแจ้งให้ป้อนข้อความดังกล่าว เซสชันใหม่จะเปิดขึ้นหลังจากกระบวนการรับรองความถูกต้องเสร็จสิ้น
คุณได้กำหนดค่าคีย์ SSH ตามการรับรองความถูกต้องบนเซิร์ฟเวอร์ระยะไกลเรียบร้อยแล้ว แต่การพิสูจน์ตัวตนด้วยรหัสผ่านยังคงใช้งานอยู่บนเซิร์ฟเวอร์ของคุณ ซึ่งหมายความว่าเซิร์ฟเวอร์ที่อยู่ห่างไกลของคุณยังคงมีแนวโน้มที่จะถูกโจมตีแบบเดรัจฉาน
ดังนั้นตอนนี้ เราจะปิดการใช้งานกลไกการเข้าสู่ระบบโดยใช้รหัสผ่านทั้งหมดจากเซิร์ฟเวอร์ระยะไกลของเรา
ปิดการใช้งานกลไกการเข้าสู่ระบบโดยใช้รหัสผ่าน
ก่อนที่คุณจะทำการเปลี่ยนแปลงใดๆ ตรวจสอบให้แน่ใจว่าผู้ใช้รูทหรือผู้ใช้ที่เปิดใช้งาน sudo สำหรับบัญชีระยะไกลของคุณสามารถเข้าถึงเซิร์ฟเวอร์ของคุณโดยใช้ระบบการตรวจสอบสิทธิ์แบบใช้คีย์ SSH ขั้นตอนนี้จะล็อกหรือปิดใช้งานการเข้าสู่ระบบโดยใช้รหัสผ่านทั้งหมด ดังนั้นจึงเป็นเรื่องสำคัญที่สิทธิ์รูทของผู้ใช้อย่างน้อยหนึ่งสิทธิ์จะมีสิทธิ์เข้าถึงเซิร์ฟเวอร์ผ่านคีย์ SSH
เข้าสู่ระบบเซิร์ฟเวอร์ Ubuntu ระยะไกลของคุณและพิมพ์คำสั่งที่แสดงด้านล่าง
sudo vim /etc/ssh/sshd_config
- กด
เอสค
,/
และพิมพ์ 'PasswordAuthentication' และกดเข้าสู่
. - ตอนนี้กด
ผม
และเปลี่ยนค่าของ 'PasswordAuthentication yes' เป็น 'PasswordAuthentication no' - กด
เอสค
และทำซ้ำขั้นตอนข้างต้นเพื่อค้นหา 'ChallengeResponseAuthentication', 'UsePAM' และเปลี่ยนค่าเป็นไม่
เช่นกัน.
การตรวจสอบรหัสผ่านไม่มี ChallengeResponseAuthentication ไม่มี UsePAM no
เมื่อตั้งค่าทั้งหมดเป็น ไม่
, กด เอสค
, พิมพ์ :wq
และตี เข้าสู่
.
หากต้องการเปิดใช้งานการเปลี่ยนแปลงทั้งหมดให้รีสตาร์ท ssh
บริการโดยใช้คำสั่งด้านล่าง
sudo systemctl รีสตาร์ท ssh
ตอนนี้ให้เปิดหน้าต่างเทอร์มินัลใหม่บนคอมพิวเตอร์ของคุณและตรวจสอบว่าการรับรองความถูกต้องของคีย์ SSH ของคุณทำงานอย่างถูกต้องก่อนที่จะปิดเซสชันปัจจุบัน
เมื่อกระบวนการตรวจสอบเสร็จสิ้น ให้ปิดเซสชันที่ทำงานอยู่ทั้งหมด
ตอนนี้เราได้กำหนดค่าการรับรองความถูกต้องโดยใช้คีย์ SSH บนเซิร์ฟเวอร์ Ubuntu 20.04 ของเราเรียบร้อยแล้ว ตอนนี้ไม่มีใครสามารถเข้าสู่ระบบเซิร์ฟเวอร์ของคุณโดยใช้กลไกการเข้าสู่ระบบที่ใช้รหัสผ่าน