วิธีเพิ่มคีย์ SSH บน Ubuntu 20.04

ตั้งค่าการเข้าสู่ระบบแบบไม่ต้องใช้รหัสผ่านที่ปลอดภัยสำหรับเซิร์ฟเวอร์ 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-keygen -b 4096 เมื่อการสร้างคีย์ SSH ของกระบวนการทั้งหมดเสร็จสมบูรณ์ ข้อความต่อไปนี้จะปรากฏขึ้นบนหน้าจอของคุณ

คีย์ 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 ของเราเรียบร้อยแล้ว ตอนนี้ไม่มีใครสามารถเข้าสู่ระบบเซิร์ฟเวอร์ของคุณโดยใช้กลไกการเข้าสู่ระบบที่ใช้รหัสผ่าน