Git clone บน SSH ทำยังไง ดีกว่า HTTPS ไหม ?

        Programmer หลายคนที่ใช้ Git เป็น version control คงจะคุ้นเคยกับการ clone source code จาก repository ไม่ว่าจะเป็น GitHub หรือ Gitlab หรือเจ้าอื่นๆ ก็มีวิธีเดียวกันคือ ใช้ URL ประมาณนี้ https://github.com/lordgift/test-project.git


 % git clone https://github.com/lordgift/test-project.git


        การ clone แบบนี้คือ ช่องทาง HTTPS ซึ่งไม่ว่าจะใช้ cli หรือ tool อื่น ก็จะต้องการให้เรา authentication ก่อนในครั้งแรกเสมอ เช่น การกรอก username, password หรือการใช้ single sign-on จากผู้ให้บริการต่างๆ


👇🏻👇🏻👇🏻👇🏻👇🏻


        เมื่อยุคสมัยเปลี่ยนไปเรื่องความปลอดภัย (Security) ก็มีความสำคัญมากขึ้น การใช้งานเพียง username, password ดูมีความเสี่ยงมากขึ้น คอนเซป 2 factors authentication (2FA) ก็เข้ามา ทำให้การแค่ clone ก็ดูยุ่งยากเพิ่มขึ้นมาอีก 



        การ clone ผ่าน SSH 

        คือท่าที่ผู้ให้บริการ git repository ต่างๆ เพิ่มความสะดวกให้เหล่า Programmer มากยิ่งขึ้น เพียงแต่ขั้นตอนของ "ครั้งแรก" ของ SSH ก็ดุยุ่งยากหน่อยๆ แต่ก็ทำเพียงครั้งเดียว


GitHub : clone via SSH


        ใครที่หลงมาทำโดยยังไม่ได้ทำตามสูตร ก็จะเป็นแบบนี้

 % git clone [email protected]:q-chang/buddy-ios.git
 Cloning into 'test-project'...
 [email protected]: Permission denied (publickey).
 fatal: Could not read from remote repository.
 Please make sure you have the correct access rights and the repository exists.


        การจะ clone ผ่าน SSH จำเป็นจะต้องสร้าง Private key 🔑, Public key 🗝 ซะก่อน ถ้าใช้ git tool ก็มักจะมีหน้าจอให้ทำได้ง่ายๆ เลย 


Generate & Add SSH Private Key 🔑 ท่าที่ 1 (GitKraken)

1. สร้าง Key 🔑🗝โดยกด Generate สีเขียว

2. Copy SSH Public Key 🗝 เก็บไว้ก่อน

GitKraken : Preferences -> SSH

3. เพิ่ม SSH Private Key 



Generate & Add SSH Private Key 🔑 ท่าที่ 2 (CLI)

1. สร้าง Key 🔑🗝 โดย CLI

 % ssh-keygen -t ed25519 -C "[email protected]"
 Enter file in which to save the key (/Users/mac/.ssh/id_ed25519): id_ed25519_new
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:


2. Copy SSH Public Key 🗝 เก็บไว้ก่อน 
 % pbcopy < ~/.ssh/id_ed25519_new.pub

3. เพิ่ม SSH Private Key 🔑 ไปที่ local machine
 % ssh-add --apple-use-keychain ./id_ed25519_new




Github : Add SSH Public Key 🗝

4. กด New SSH key

  • ตั้งชื่อตามความเหมาะสม
  • paste SSH Public Key 🗝 ที่เก็บไว้

GitHub : Settings -> SSH and GPG keys -> New SSH key

GitHub : Settings -> SSH and GPG keys

5. เท่านี้เราก็สามารถ clone ด้วย SSH URL ได้แล้ว


GitKraken : Clone


        ท่า CLI ก็ทำได้

 % git clone [email protected]:lordgift/test-project.git



-------------------------


        จบกับ "ครั้งแรก" เรียบร้อยครับ ซึ่งท่านี้จะไม่มีการหมดอายุตราบที่เราไม่ key ฝั่งใดฝั่งหนึ่งไม่หายไป จำไว้ว่าต้องมี Private key 🔑, Public key 🗝 คู่กันเสมอ ถ้าเราเปลี่ยนเครื่อง หรือเปลี่ยนอีเมลล์ หรือย้ายจาก GitHub ไปยัง GitLab ก็ต้องทำกระบวนการนี้ใหม่ครับ หรือถ้าใช้หลาย key (gen ตาม tool) ก็อาจะทำให้เราสับสนว่าใช้ตัวไหนอยู่ก็ได้ ถ้าจะให้ดี เราสามารถติ๊ก Use local SSH agent เพื่อใช้ key ตาม system หรือหากสบายใจจะ gen ใหม่เสมอ ก็ไม่ได้มีปัญหาอะไรในการใช้งานครับ


GitKraken : Preferences -> SSH



        กลับมาพูดถึงท่า HTTPS กันอีกหน่อย จริงๆ แล้วท่าที่ง่ายสำหรับการใช้ username, password ที่มี 2FA ก็คือ การ generate Personal Access Tokens เพื่อใช้แทน password ซึ่งมันก็อาจจะดูไม่ได้ยุ่งยาก เพิ่ม-ลบได้เหมือนกัน สุดท้ายก็คงจบที่ว่า แล้วแต่แต่ละท่านจะถนัดเลยครับผมมม




ref. Generating a new SSH key and adding it to the ssh-agent



Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Popular

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

เรื่องของ ++i กับ i++

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Java] Java Static Variable และ Static Method

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

พิมพ์ซองจากรายชื่อ excel ด้วยวิธี Mail Merge

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)