วิธีสร้างคีย์ SSH สำหรับ GitHub

เผยแพร่แล้ว: 2022-02-05

Git และ GitHub เป็นเครื่องมือที่จำเป็นสำหรับนักพัฒนาทุกคน มีการใช้กันอย่างแพร่หลายในโครงการพัฒนาซอฟต์แวร์เกือบทุกประเภท

มีบริการโฮสติ้ง Git อื่น ๆ เช่น Gitlab และ Bitbucket แต่ GitHub เป็นตัวเลือกยอดนิยมสำหรับนักพัฒนา คุณยังสามารถแก้ไขโปรไฟล์ของคุณเพื่อให้ดูน่าสนใจยิ่งขึ้นสำหรับผู้สรรหาบุคลากร

คุณสามารถใช้ Git และ GitHub เพื่อจัดระเบียบโครงการ ทำงานร่วมกับนักพัฒนาคนอื่นๆ และที่ Kinsta ได้แน่นอน

แต่เนื่องจาก Git และ GitHub นั้นเกี่ยวข้องกันแต่เครื่องมือต่างกัน คุณจึงต้องอัปเดตเวิร์กโฟลว์ของคุณกับแต่ละรายการอย่างต่อเนื่อง

เราขอแนะนำให้ใช้คีย์ SSH สำหรับเครื่องแต่ละเครื่องของคุณ ดังนั้น ในบทช่วยสอนนี้ คุณจะได้เรียนรู้ว่ามันคืออะไร ข้อดีบางประการ และวิธีสร้างและกำหนดค่าคีย์ GitHub SSH

มาเริ่มกันเลย!

คีย์ SSH คืออะไร

พูดง่ายๆ คีย์ SSH เป็นข้อมูลประจำตัวที่ใช้สำหรับโปรโตคอล SSH (Secure Shell) เพื่อให้สามารถเข้าถึงคอมพิวเตอร์ระยะไกลได้อย่างปลอดภัยผ่านทางอินเทอร์เน็ต โดยปกติ การพิสูจน์ตัวตนนั้นจะเกิดขึ้นในสภาพแวดล้อมของบรรทัดคำสั่ง

โปรโตคอลนี้อิงตามสถาปัตยกรรมไคลเอ็นต์-เซิร์ฟเวอร์ ซึ่งหมายความว่าคุณในฐานะผู้ใช้ (หรือ "ไคลเอ็นต์") จำเป็นต้องใช้ซอฟต์แวร์พิเศษที่เรียกว่าไคลเอ็นต์ SSH เพื่อเข้าสู่ระบบเซิร์ฟเวอร์ระยะไกลและดำเนินการคำสั่ง นี่คือสิ่งที่คุณทำโดยพื้นฐานเมื่อตรวจสอบสิทธิ์ผ่านเทอร์มินัลไปยัง GitHub

เทอร์มินัลแสดงสองคำสั่ง: "git commit -am "เพิ่มความคิดเห็นในไฟล์ตัวอย่างการเขียนโปรแกรมแบบมีโครงสร้าง" และ "git push" พร้อมการตอบสนองความสำเร็จจากเซิร์ฟเวอร์ GitHub
กิทดัน.

แต่ SSH ไม่ได้ใช้สำหรับ GitHub เท่านั้น มีการใช้กันอย่างแพร่หลายโดยแพลตฟอร์มอื่น ๆ เช่น Kinsta, Google Cloud และ Amazon Web services เพื่อสร้างช่องทางที่ปลอดภัยในการเข้าถึงบริการของพวกเขา

ในตอนนี้ เกี่ยวกับการทำงานของคีย์ SSH จริงๆ คุณต้องเข้าใจความแตกต่างระหว่างคีย์สาธารณะและคีย์ส่วนตัว

กุญแจสาธารณะกับกุญแจส่วนตัว

เริ่มจากพื้นฐานกันก่อน

โปรโตคอล SSH ใช้เทคนิคการเข้ารหัสที่เรียกว่า การเข้ารหัสแบบอสมมาตร คำนี้อาจฟังดูซับซ้อนและแปลก แต่ไม่มีอะไรเพิ่มเติมจากความจริง

โดยพื้นฐานแล้ว การเข้ารหัสแบบอสมมาตรคือระบบที่ใช้คู่ของคีย์ ได้แก่ คีย์ สาธารณะ และคีย์ ส่วนตัว

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

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

วิธีนี้ช่วยให้คุณและเซิร์ฟเวอร์รักษาช่องทางการสื่อสารที่ปลอดภัยสำหรับการส่งข้อมูล

นี่คือสิ่งที่เกิดขึ้นในพื้นหลังเมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน SSH:

  1. ลูกค้าส่งกุญแจสาธารณะไปยังเซิร์ฟเวอร์
  2. เซิร์ฟเวอร์ขอให้ลูกค้าลงนามในข้อความสุ่มที่เข้ารหัสด้วยกุญแจสาธารณะโดยใช้รหัสส่วนตัว
  3. ลูกค้าลงนามในข้อความและส่งต่อผลลัพธ์ไปยังเซิร์ฟเวอร์
  4. มีการสร้างการเชื่อมต่อที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์

การรักษาคีย์ส่วนตัวของคุณให้ปลอดภัยเป็นสิ่งสำคัญและแชร์กับใครก็ได้ไม่ว่าในกรณีใดๆ สิ่งเหล่านี้เป็นกุญแจสำคัญของข้อมูลทั้งหมดที่ส่งถึงคุณ

การใช้คีย์ SSH กับ GitHub

ตั้งแต่วันที่ 13 สิงหาคม 2021 Github จะไม่ยอมรับการพิสูจน์ตัวตนด้วยรหัสผ่านสำหรับการเข้าถึงบรรทัดคำสั่งอีกต่อไป ซึ่งหมายความว่าตอนนี้คุณต้องตรวจสอบสิทธิ์ผ่านโทเค็นการเข้าถึงส่วนบุคคลหรือใช้คีย์ SSH (สะดวกกว่าเล็กน้อย)

นี่คือสิ่งที่จะเกิดขึ้นเมื่อคุณพยายามรับรองความถูกต้องด้วยรหัสผ่าน GitHub ของคุณผ่าน HTTP ในเทอร์มินัล:

 Username for 'https://github.com': yourusername Password for 'https://[email protected]': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

GitHub ต้องการรหัสสาธารณะของคุณเพื่ออนุญาตให้คุณแก้ไขที่เก็บของคุณผ่าน SSH

มาดูกันว่าคุณสามารถสร้างคีย์ SSH ในเครื่องได้อย่างไร

วิธีสร้างคีย์ SSH ในเครื่อง

เมื่อคุณเข้าใจเล็กน้อยเกี่ยวกับโปรโตคอล SSH และความแตกต่างระหว่างคีย์สาธารณะและส่วนตัวแล้ว ก็ถึงเวลาตั้งค่าช่อง SSH ที่ปลอดภัยระหว่างเครื่องและที่เก็บ GitHub ของคุณ

ก่อนที่เราจะดำเนินการต่อ คุณควรมีบัญชี GitHub และเทอร์มินัล/พรอมต์คำสั่งที่ติดตั้ง Git ในระบบของคุณ หากคุณกำลังใช้งาน Windows ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Git bash ซึ่งมีเครื่องมือทั้งหมดที่คุณต้องปฏิบัติตามพร้อมกับบทช่วยสอนนี้ในตัว

ไคลเอนต์ OpenSSH เป็นซอฟต์แวร์โอเพ่นซอร์สยอดนิยมที่ใช้เชื่อมต่อผ่าน SSH คุณไม่จำเป็นต้องกังวลเกี่ยวกับระบบปฏิบัติการของคุณ เนื่องจากระบบจะติดตั้งไว้ตามค่าเริ่มต้นบน Linux, macOS และ Windows 10

คุณต้องเปิดพรอมต์คำสั่งบน Windows หรือเทอร์มินัลบนระบบที่ใช้ Unix เพื่อสร้างคีย์ SSH ในเครื่อง โดยปกติ คุณสามารถทำได้โดยค้นหา "terminal", "cmd" หรือ "powershell" ในแผงแอปพลิเคชันของคุณ จากนั้นคลิกไอคอนที่ปรากฏขึ้น

ตัวค้นหาแอปพลิเคชันที่แสดงแอปพลิเคชันเทอร์มินัลต่างๆ รวมถึง "Terminal Emulator", "Alacritty" และ "Kitty"
การค้นหาแอปพลิเคชันเทอร์มินัล

หลังจากทำเช่นนี้ คุณควรจะมีหน้าต่างที่คล้ายกับภาพต่อไปนี้

แอปพลิเคชั่นเทอร์มินัลกึ่งโปร่งใสที่ทำงานบนเปลือกปลา
แอปพลิเคชั่นเทอร์มินัล

เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างคู่คีย์ SSH ในเครื่อง:

 ssh-keygen -t ed25519 -C "[email protected]"

ถึงเวลาบอกความลับกับคุณแล้ว: ไม่มีใครจำคำสั่งนี้ได้จริงๆ! นักพัฒนาส่วนใหญ่ต้องใช้ Google ทุกครั้งเพราะ:

  1. เป็นคำสั่งที่ยาวมาก โดยมีตัวเลขสุ่มที่ลืมไม่ลง
  2. เราใช้มันน้อยครั้ง ดังนั้นจึงไม่คุ้มที่จะใส่มันลงในหน่วยความจำเป็นส่วนใหญ่

อย่างไรก็ตาม สิ่งสำคัญคือต้องเข้าใจแต่ละคำสั่งที่เราแนะนำในเทอร์มินัลของเรา ดังนั้นเรามาดูกันว่าแต่ละส่วนของคำสั่งนี้หมายถึงอะไร

  • ssh-keygen: เครื่องมือบรรทัดคำสั่งที่ใช้สำหรับสร้างคีย์ SSH คู่ใหม่ คุณสามารถดูแฟล็กของมันได้ด้วย ssh-keygen help
  • -t ed25519: แฟล็ก -t ใช้เพื่อระบุอัลกอริทึมที่ใช้สร้างลายเซ็นดิจิทัลของคู่คีย์ หากระบบของคุณรองรับ ed25519 จะเป็นอัลกอริธึมที่ดีที่สุดที่คุณสามารถใช้สร้างคู่คีย์ SSH
  • -C “อีเมล”: แฟล็ก -c ใช้เพื่อแสดงความคิดเห็นที่กำหนดเองที่ส่วนท้ายของคีย์สาธารณะ ซึ่งมักจะเป็นอีเมลหรือการระบุตัวตนของผู้สร้างคู่คีย์

หลังจากที่คุณพิมพ์คำสั่งลงในเทอร์มินัลแล้ว คุณจะต้องป้อนไฟล์ที่คุณต้องการบันทึกคีย์ โดยค่าเริ่มต้น มันจะอยู่ในไดเร็กทอรีหลักของคุณในโฟลเดอร์ที่ซ่อนชื่อ “.ssh” แต่คุณสามารถเปลี่ยนเป็นอะไรก็ได้ที่คุณต้องการ

จากนั้นคุณจะถูกถามถึงข้อความรหัสผ่านเพื่อเพิ่มไปยังคู่คีย์ของคุณ วิธีนี้จะเพิ่มการรักษาความปลอดภัยอีกชั้นหนึ่ง หากอุปกรณ์ของคุณถูกบุกรุกเมื่อใดก็ตาม ไม่จำเป็นต้องเพิ่มข้อความรหัสผ่าน แต่แนะนำเสมอ

นี่คือลักษณะของกระบวนการทั้งหมด:

คำสั่ง ssh-keygen พร้อมข้อความต่างๆ รวมถึงไฟล์ที่คีย์จะถูกบันทึก "/home/daniel/.ssh/kinsta_keys" การป้อนข้อความรหัสผ่าน และผลลัพธ์ของลายนิ้วมือของคีย์
คำสั่ง ssh-keygen

อย่างที่คุณเห็น คำสั่งนี้สร้างไฟล์สองไฟล์ในไดเร็กทอรีที่คุณเลือก (โดยทั่วไปคือ ~/.ssh ): กุญแจสาธารณะที่มีนามสกุล . .pub และไฟล์ส่วนตัวที่ไม่มีส่วนขยาย

เราจะแสดงวิธีเพิ่มรหัสสาธารณะในบัญชี GitHub ของคุณในภายหลัง

เพิ่มคีย์ SSH ให้กับ ssh-agent

โปรแกรม ssh-agent ทำงานในเบื้องหลัง เก็บคีย์ส่วนตัวและข้อความรหัสผ่านของคุณอย่างปลอดภัย และช่วยให้พร้อมใช้งานโดย ssh เป็นยูทิลิตี้ที่ยอดเยี่ยมที่ช่วยให้คุณไม่ต้องพิมพ์ข้อความรหัสผ่านทุกครั้งที่คุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์

ด้วยเหตุนี้ คุณจะต้องเพิ่มคีย์ส่วนตัวใหม่ให้กับตัวแทนนี้ โดยใช้วิธีดังนี้:

  1. ตรวจสอบให้แน่ใจว่า ssh-agent ทำงานในพื้นหลัง
     eval `ssh-agent` # Agent pid 334065

    หากคุณได้รับข้อความในลักษณะนี้หากทุกอย่างเรียบร้อยดี หมายความว่า ssh-agent กำลังทำงานภายใต้รหัสกระบวนการเฉพาะ (PID)

  2. เพิ่มคีย์ส่วนตัว SSH ของคุณ (อันที่ไม่มีส่วนขยาย) ให้กับ ssh-agent
     ssh-add ~/.ssh/kinsta_keys

    แทนที่ kinsta_keys ด้วยชื่อคีย์ SSH ของคุณ หากนี่เป็นคีย์แรกที่คุณสร้างขึ้น ควรตั้งชื่อว่า “id_algorithm_used” เช่น id_ed25519

เพิ่มคีย์ SSH ไปยังบัญชี GitHub

ขั้นตอนสุดท้ายคือการเพิ่มกุญแจสาธารณะของคุณไปยังบัญชี GitHub ของคุณ เพียงทำตามคำแนะนำเหล่านี้:

  1. คัดลอกคีย์สาธารณะ SSH ของคุณไปยังคลิปบอร์ด คุณสามารถเปิดไฟล์ที่อยู่ในตำแหน่งโดยใช้โปรแกรมแก้ไขข้อความแล้วคัดลอก หรือใช้เทอร์มินัลเพื่อแสดงเนื้อหา
     cat ~/.ssh/kinsta_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. เข้าสู่ระบบ GitHub ] และไปที่ส่วนบนขวาของหน้า คลิกในรูปโปรไฟล์ของคุณ และเลือก การตั้งค่า

    แผงด้านขวาบนของ GitHub แสดงส่วนต่างๆ โดยมีลูกศรชี้ไปที่ส่วนการตั้งค่า
    การตั้งค่า GitHub

  3. จากนั้นในโปรไฟล์การตั้งค่าของคุณ ให้คลิก คีย์ SSH และ GPG

    แผงการตั้งค่าโปรไฟล์ที่แสดงตัวเลือกคีย์ SSH และ GPG
    คีย์ SSH และ GPG

  4. คลิกปุ่ม คีย์ SSH ใหม่

    ส่วนคีย์ SSH ที่มีลูกศรชี้ไปที่ปุ่มคีย์ SSH ใหม่
    ปุ่มคีย์ SSH ใหม่

  5. ตั้ง ชื่อ คีย์ SSH ใหม่ของคุณบน GitHub โดยปกติคืออุปกรณ์ที่คุณจะใช้คีย์นั้น แล้ววางคีย์ลงในพื้นที่ คีย์

    เพิ่มแบบฟอร์มคีย์ SSH ใหม่พร้อมช่อง "Title" และ "Key"
    เพิ่มแบบฟอร์มคีย์ SSH ใหม่

  6. เพิ่มคีย์ SSH ของคุณ

    เพิ่มปุ่มคีย์ SSH
    เพิ่มปุ่มคีย์ SSH

ทดสอบการเชื่อมต่อ SSH ด้วย Repo Push

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

แผนโฮสติ้งของ Kinsta ทั้งหมดได้รับการสนับสนุนตลอด 24 ชั่วโมงทุกวันจากนักพัฒนา WordPress และวิศวกรผู้มีประสบการณ์ของเรา แชทกับทีมเดียวกับที่คอยสนับสนุนลูกค้า Fortune 500 ของเรา ตรวจสอบแผนของเรา!

สำหรับตัวอย่างของเรา เราจะแก้ไขไซต์ HTML อย่างง่ายที่เราสร้างขึ้นในบทช่วยสอน Git สำหรับการพัฒนาเว็บ

ขั้นแรก เราจะต้องโคลนที่เก็บในเครื่องของเรา เราสามารถไปที่หน้า repo บน GitHub และคัดลอกที่อยู่ SSH ที่มีให้

หน้า GitHub แสดงคำสั่งโคลน SSH
คำสั่งโคลน SSH

จากนั้นโคลน repo โดยใช้เทอร์มินัล:

 git clone [email protected]:DaniDiazTech/HTML-site.git

ตอนนี้ มาเพิ่มแท็ก <h1> อย่างง่ายในไฟล์ index.html :

 ... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...
ไซต์ HTML อย่างง่ายที่มีชื่อ "A new title" และสี่รูปภาพของไอเท็มเทคโนโลยี
ไซต์ HTML อย่างง่าย

เราไม่ได้แตะต้อง JavaScript หรือ CSS เพื่อให้การแก้ไขนี้ง่ายขึ้น แต่ถ้าคุณมีทักษะในการใช้ JavaScript คุณอาจพบที่ที่ Kinsta ตรวจสอบทักษะการเขียนโค้ดที่คุณต้องการเพื่อเป็นส่วนหนึ่งของทีม Kinsta

หลังจากทำสิ่งนี้ ให้คอมมิตการเปลี่ยนแปลง:

 git commit -am "Added a simple title"

และผลักดันพวกเขาเข้าสู่ GitHub เหมือนกับที่คุณทำตามปกติ

 git push

หากทุกอย่างเป็นไปด้วยดี ยินดีด้วย! คุณเพิ่งตั้งค่าการเชื่อมต่อ SSH ระหว่างเครื่องของคุณกับ GitHub

จัดการคีย์ SSH หลายรายการสำหรับบัญชี GitHub ที่แตกต่างกัน

หากคุณมีบัญชี GitHub หลายบัญชี สมมติว่าหนึ่งบัญชีสำหรับโครงการส่วนตัวและอีกบัญชีหนึ่งสำหรับงานของคุณ การใช้ SSH สำหรับทั้งสองบัญชีนั้นทำได้ยาก ปกติคุณจะต้องใช้เครื่องแยกเพื่อรับรองความถูกต้องกับบัญชี GitHub ต่างๆ

แต่สามารถแก้ไขได้โดยง่ายโดยกำหนดค่าไฟล์กำหนดค่า SSH

เข้าเรื่องกันเลย

  1. สร้างคู่คีย์ SSH อื่นและเพิ่มไปยังบัญชี GitHub อื่นของคุณ จำชื่อไฟล์ที่คุณกำหนดคีย์ใหม่ให้
     ssh-keygen -t ed25519 -C "[email protected]"
  2. สร้างไฟล์กำหนดค่า SSH ไฟล์ปรับแต่งจะบอกโปรแกรม ssh ว่าควรทำงานอย่างไร โดยค่าเริ่มต้น ไฟล์กำหนดค่าอาจไม่มีอยู่ ดังนั้นให้สร้างไฟล์ดังกล่าวภายในโฟลเดอร์ .ssh/:
     touch ~/.ssh/config
  3. แก้ไขไฟล์กำหนดค่า SSH เปิดไฟล์ปรับแต่งและวางรหัสด้านล่าง:
     #Your day-to-day GitHub account Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # Work account Host github-work HostName github.com IdentityFile ~/.ssh/work_key_file IdentitiesOnly yes

ตอนนี้ ทุกครั้งที่คุณต้องตรวจสอบสิทธิ์ผ่าน SSH โดยใช้บัญชีที่ทำงานหรือบัญชีสำรอง คุณจะปรับเปลี่ยนที่อยู่ repo SSH เล็กน้อยจาก:

 [email protected]:workaccount/project.git

…ถึง:

 [email protected]:workaccount/project.git

สรุป

ขอแสดงความยินดี คุณได้เรียนรู้ความรู้เชิงปฏิบัติส่วนใหญ่ที่จำเป็นในการเชื่อมต่อกับ GitHub ผ่าน SSH!

บทช่วยสอนนี้กล่าวถึงความจำเป็นสำหรับโปรโตคอล SSH ความแตกต่างระหว่างคีย์สาธารณะและคีย์ส่วนตัว วิธีสร้างคีย์ เพิ่มลงใน GitHub และแม้แต่จัดการคีย์ SSH หลายรายการสำหรับบัญชี GitHub ต่างๆ โปรดจำไว้ว่า เว้นแต่ว่าคุณต้องการที่จะสูญเสียการเข้าถึงทุกอย่าง คีย์ส่วนตัวของคุณต้องอยู่ในลักษณะนั้น: ส่วนตัว

ด้วยความรู้นี้ ตอนนี้คุณก็พร้อมที่จะพัฒนาเวิร์กโฟลว์ที่ไร้ที่ติด้วย Git และ GitHub แล้ว เข้ารหัสต่อไป!