# ความเป็นมา
ด้วยความที่บ.ตอนนี้จะย้าย repo จาก Bitbucket Server ไป Github (opens new window) เนื่องด้วยมันจะเลิกทำแล้ว (opens new window) ก็เลยต้องมานั่งเซ็ตอัพแอคกันใหม่
หลังจากที่เริ่มเซ็ตอัพใหม่ ตอนแรกก็คิดอยู่ว่าควรจะ add ตัว org เข้าแอคหลักดีไหม หรือว่าสร้างแอคของบ.แยกไปอีกอันดี ซึ่งท้ายสุดก็สร้างแอคใหม่ไป (เอาจริงๆเหมือน github มันจะไม่แนะนำ (opens new window)ให้สร้างหลายแอคอะนะ)
ทีนี้ปัญหามันมีอยู่ที่ว่า พอจะเพิ่มตัว ssh key ด้วยตัว key หลักของเครื่องเข้าไปในแอคใหม่นี้เข้าไปบน github ปุ๊บ มันดันเด้งเตือนขึ้นมาว่า key นี้ใช้ไปแล้ว ไม่ให้ใช้ซ้ำ
เอาละสิ แบบนี้ทำไงเนี่ย ก็เลยไปนั่งค้นผ่านๆอยู่พักนึง ก็ไปเจอ gui (opens new window)de (opens new window) แนะนำมา ว่าให้เซ็ต host แยกกับ key แยก ก็เลยลองมั่วๆตามดู
# Setup Notes
# Key Generation
ไม่มีอะไรพิเศษ gen key ใหม่ (opens new window) แล้วก็เพิ่มตัว key มันเข้าไปใน ssh-agent ตามปกติ
สมมติว่าชื่อ alph_ed25519
ก็เพิ่มไปด้วย
ssh-add ~/.ssh/alph_ed25519
หลังจากนั้นถ้าไปเช็คดูลิสต์ key ที่ใช้ด้วย ssh-add -l
มันก็จะโชว์ตัว key ใหม่นี้ขึ้นไปบน list
notes: ถ้าจะลบ key ออกก็ ssh-add -D
แต่มันจะลบทุกคีย์ออกเกลี้ยงลิสต์เลยนะ
# SSH Config - Attempt
ปัญหาหลักจริงๆมันอยู่ตรงที่ ssh config (~/.ssh/config
) เนี่ยแหละที่ตอนแรกเซ็ต + เพิ่มไปแล้วก็ยังใช้ไม่ได้
ด้านล่างนี่เป็นค่าของ ssh config ตอนแรกสุดที่ยังไม่ได้ไปแก้อะไร
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
แต่ด้วยความที่ยังไม่ค่อยเข้าใจ config ดีในตอนแรก ก็ลองเพิ่มไปเลียนแบบตาม gist ที่ไปเจอ
สมมติว่าตั้ง host เป็น github.com-alph
ก็ตั้งไปเป็น
Host github.com-alph
HostName github.com
User git
IdentityFile ~/.ssh/alph_ed25519
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
ซึ่งพอลองเช็ค ssh ไป github ดูด้วย ssh -T git@github.com-alph
แล้ว มันก็ยังขึ้นว่าเรา connect เข้าไปด้วย key หลักผ่านแอคหลักอยู่ดี
หลังจากค้นต่ออีกหน่อย ก็ไปเจอว่า ให้ใส่ !
ยกเว้น host ไปในตัว default ให้มันไปใช้ identity อื่นแทน ก็ลองปรับดู
Host github.com-alph
HostName github.com
User git
IdentityFile ~/.ssh/alph_ed25519
Host * !github.com-alph
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
แต่หลังจากเช็คต่ออีกทีก็ยังไม่ต่างเนี่ยสิ...
# SSH Config
ท้ายสุดแล้วหลังจากงมต่ออีกหน่อย ถึงได้เจอว่าต้องไปเพิ่ม IdentitiesOnly yes
ไปสำหรับตัว default การที่เพิ่ม config นี้ไปจะทำให้มันไม่พยายามยัดทุก key (IdentityFile
) ใน default (*
) เข้าไปทุกหนที่เราจะต่อ
เพราะด้วยเหตุนี้เอง เลยทำให้ตอนแรกสุด ต่อให้ host มันตรง มันเข้ามา default แล้วก็เจอยัด key แรกสุดไป ซึ่ง key นี้มันเชื่อมกับแอคหลักไปอยู่แล้ว ก็เลยผ่านเลยก่อนที่จะย้ายไปใช้ key อันใหม่
Host github.com-alph
HostName github.com
User git
IdentityFile ~/.ssh/alph_ed25519
Host * !github.com-alph
UseKeychain yes
AddKeysToAgent yes
IdentitiesOnly yes
IdentityFile ~/.ssh/id_ed25519
หลังจากเพิ่มเข้าไปตามด้านบน คราวนี้พอลองเทสต์เชื่อมดูก็ได้ถูกต้องละ
ซึ่งหลังจากปรับตรงนี้เสร็จแล้ว ที่เหลือก็แค่เวลาจะเพิ่ม remote แทนที่จะเพิ่มด้วย git@github.com:path/to/repo
ก็ให้เปลี่ยนเป็น git@<hostname>:path/to/repo
แทน อย่างเคสข้างบนนี้ที่ตั้งเป็น github.com-alph
ก็เปลี่ยนเป็น git@github.com-alph:path/to/repo
แทน เช่น
git clone git@github.com-alph:path/to/repo
git remote add origin git@github.com-alph:path/to/repo
ส่วนถ้าเกิดใช้เป็น github.com
เฉยๆตามเคย มันก็จะใช้ตัว key หลักของเราเหมือนเดิม
Tweet