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:
% pbcopy < ~/.ssh/id_ed25519_new.pub
% 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