Hí, nay mình sẽ chia sẻ về cách tạo/cài đặt và quản lý nhiều tài khoản Github với SSH key
Ngoài ra, mình sẽ chia sẻ một vài shorthand config trên máy tính để tối ưu việc quản lý, tiết kiệm thời gian khi mở các resources cần thiết lúc làm việc, etc...
1. Quản lý nhiều tài khoản github với SSH key
Trong một số trường hợp chúng ta muốn quản lý nhiều tài khoản Github
trên cùng một máy tính. Một ví dụ đơn giản là khách hàng muốn chúng ta sử dụng tài khoản Github
mà họ cung cấp và làm việc trên repository của họ. Sau đây mình sẽ hướng dẫn mọi người setup và quản lý SSH key nhé.
1.1 Tạo SSH Key
Mọi người có thể xem ở thiết bị hiện tại đang tồn tại những SSH key nào bằng command bên duới
bashls -al ~/.ssh
Bây giờ thử tạo ra một SSH key mới nhé.
ssh-keygen -t rsa -C "your-email@gmail.com" -f "path"
Đoạn mã trên đây sẽ tạo SSH keys, và lưu public key với tag your-email@gmail.com
tới vị trí ~/.ssh/path.pub
- Mọi người sẽ được yêu cầu nhập một passphrase để bảo vệ private key
- Mình thì không nhập, nên nhấn
Enter
tiếp nhé. - Sau khi tạo thành công sẽ hiển thị như hình bên dưới
Ban có thể kiểm tra xem cặp SSH keys đã được khởi tạo chưa bằng command:
// Show nội dung của public key.
cat ~/.ssh/path.pub
1.2 Thêm SSH Key vào tài khoản github
Để thêm SSH Key vào tài khoản github, thì thực hiện theo những bước sau:
- Copy nội dung của file ssh-key public vào clipboard bằng command:
+ MacOS: pbcopy < ~/.ssh/id_rsa.pub
+ Linux: xclip -sel clip < ~/.ssh/id_rsa.pub (Nếu chưa cài xclip thì chạy đoạn mã này để cài xclip: sudo apt-get install xclip)
- Đi đến Github.com
- Vào phần Settings, chọn mục
SSH and GPG keys
- Nhấn vào button
New SSH Key
- Paste nội dung của file ssh key public chúng ta vừa copy ở bước trên vào ô
'key'
- Sau đó nhấn nút
Add SSH key
là đã add file SSH vào github thành công
Đối với những tài khoản github khác, vẫn follow theo cách tương tự nhé!
1.3 Thêm SSH key vào ssh-agent
Để sử dụng được SSH key, chúng ta cần phải đăng ký với ssh-agent trên thiết bị chúng ta đang sử dụng. Lệnh eval "$(ssh-agent -s)"
khởi động ssh-agent. Sau đó, sử dụng ssh-add
để thêm các khóa riêng vào ssh-agent.
- Lệnh khởi động ssh agent:
eval "$(ssh-agent -s)
- Lệnh thêm private key vào ssh-agent
ssh-add ~/.ssh/path
Như vậy, chỉ với hai câu lệnh, ta đã thêm private key
vào ssh-agent
thành công!
1.4 Tạo SSH config file
-
Để phân biệt SSH key với các host khác nhau. chúng ta phải tạo file config để xác định SSH key nào dùng cho tài khoản, host nào.
-
SSH config tồn tại tại vị trí ~/.ssh/config. Edit file này hoặc chúng ta có thể tạo mới với đoạn mã dưới:
$ cd ~/.ssh/
$ touch config
$ code config
- Chỉnh sửa file config như sau:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/path
// ...
// Mọi người làm tương tự cho các ssh key khác nhé, mình ví dụ thêm một user ở // dưới
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/work
• Host: tương tự như ID để định danh các key.
• HostName: Domain để truy cập đến, mình dùng Github nên sẽ để địa chỉ domain của Github.
• IdentityFile: Định nghĩa các thuộc tính trên dành cho SSH key nào.
- Vậy config trên sẽ chỉ định ssh-agent để chọn SSH key nào cho tài khoản nào
- Sử dụng ssh-key
path
cho mọi Git có url dạng@github.com
- Sử dụng
work
cho mọi Git có url dạng@github.com-work
1.5 Cấu hình Git remote Url cho local repo
- Khi bạn đã có sẵn repositories được clone hoặc tạo sẵn trước đó. Bạn cần phải config lại user name và email Url sử dụng đoạn mã sau
git config user.name "Your User"
git config user.email "your-email@gmail.com"
// Mình sẽ hướng dẫn shorthand những command như này ở section dưới nhé!
- Thay đổi remote url tương ứng với config bạn đã định nghĩa ở trên, giả sử tại repository bạn clone từ tài khoản công việc về đang có remote origin với url là
git@github.com/repo_work.git
thì bạn cần chuyển thànhgit@github.com-work-user1/repo_work.git
sử dụng mã sau:
git remote set-url origin git@github.com-work-user1/repo_work.git
- Tương tự như các repositories khác thì cũng làm như vậy nhé!
1.6 Clone Repositories
- Khi bạn clone repositories, bạn lưu ý là cần thay đổi Url clone về tương ứng với Host config trong SSH config của bạn. VD như bạn cần clone repositories công việc với url như sau:
// từ =>
git clone git@github.com/repo_name.git
// Ta sẽ thay đổi thành
git clone git@github.com-work_user1:work_user1/repo_name.git
Về cơ bản, quản lý nhiều tài khoản githubs với SSH-keys chỉ đơn giản như thế thui :D
2. Shorthand Config
Hí, mình sẽ share thêm một tí về cách mình cấu hình, quản lý các tài nguyên, dự án trong quá trình làm việc hiện tại của mình.
Thường thì mình sẽ gom nhóm những file config shorthand này theo từng dự án.
Ví dụ hiện tại mình đang làm việc với 2 dự án là A và B, và với mỗi dự án chúng ta sẽ có rất nhiều tài nguyên như: source, backlog, board task management, github, các file tài liệu liên quan đến dự án, etc...
Và cứ mỗi lần chuyển qua lại giữa các dự án, thì chúng ta lại thao tác tay bằng cách open source dự án, open google chrome để mở các file tài liệu cần thiết, figma, github...
Khá mất thời gian cho mỗi lần thao tác tay nhỉ ?
Thế nên mình sẽ tạo ra những file bash giúp mình tự động hoá những thao tác tay
đó.
Các bước cần thưc hiện
-
Đầu tiên, mọi người cần một nơi để lưu trữ những file bash này, có thể là ở bất kỳ Folder nào trong máy tính hiện tại.
-
Tiếp theo, ta cần viết code cho những file bash này để tự động hoá những thao tác tay trên, mọi người có thể custom lại theo ý của mọi người nhé.
2.1 Tạo file cấu hình shorthand
1> Khởi tạo
- Tạo danh sách các giá trị tùy chọn:
- Định nghĩa một hàm
_your_project_name()
với các tùy chọn nhưopen-bl
,open-wsp
,open-gh
.... - Sử dụng
_describe 'values' opts
để tạo ra các tùy chọn hoàn chỉnh khi gõ command
_your_project_name() {
local -a opts
opts=(
open-bl
open-wsp
open-gh
...
)
_describe 'values' opts
}
2> Khai báo tên command
- Ta sử dụng
compdef
để liên kết hàm_your_project_name()
với lệnhyour_shorthand
, giúp tự động hoàn thành các tùy chọn khi gõ lệnhyour_shorthand
.
compdef _your_project_name your_shorthand;
3> Định nghĩa hàm main*
- Đầu tiên, ta cần khai báo
source dir
, nơi chứa các đường dẫn tới các nguồn code, tài nguyên của dự án hiện tại đang cấu hình.
declare -A source_dir=(
[source_1]=~/Workspace/.. => Chứa mã nguồn 1
[source_2]=~/Workspace/.. = Chứa mã nguồn 2
...
)
- Sử dụng câu lệnh
case
để xử lý các tùy chọn được truyền vào commandyour_shorthand
. - Ví dụ ở đây mình mong muốn, khi gõ command
your_shorthand open-source-1
thì nó sẽ tự động mở rasource 1
ở VSCODE, hoặc làyour_shorthand open-figma
thì nó sẽ tự động mởChrome
và hiển thị ra đúng fileFigma
với URL ta đã config sẵn. Tiện nhỉ ? - Mình sẽ để code mẫu ở dưới.
case $1 in
open-source-1)
code ${source_dir[source_1]}
;;
open-source-2)
code ${source_dir[source_2]}
;;
...
esac
4> Quản lý các đường dẫn đến tài nguyên
- Hiện tại, mình quản lý các đường dẫn đến những tài nguyên như
Github, Figma, Backlog ...
ở ngay trong file bash này, tuy nhiên mọi người có thể quản lý ở những location khác, tuỳ theo nhu cầu nhé.
BACKLOG="https://path-to-backlog"
GITHUB="https://github.com/..."
5> Định nghĩa hàm để mở resources bằng Google
- Dưới đây là hàm dùng để mở
Chrome
và đến các URL mà mọi người đã config.
function openUrl () {
url="${1}"
if command -v xdg-open > /dev/null; then
xdg-open "$url"
elif command -v open > /dev/null; then
open "$url"
else
fi
}
- Đấy là những bước cơ bản để mọi người tạo ra 1 file bash tuỳ theo ý mình, full code config mình sẽ để dưới đây:
_your_project_name() {
local -a opts
opts=(
open-bl
open-wsp
open-gh
...
)
_describe 'values' opts
}
compdef _your_project_name your_shorthand;
your_shorthand() {
declare -A source_dir=(
[source_1]=~/Workspace/.. => Chứa mã nguồn 1
[source_2]=~/Workspace/.. = Chứa mã nguồn 2
)
case $1 in
open-source-1)
code ${source_dir[source_1]}
;;
open-source-2)
code ${source_dir[source_2]}
;;
open-bl)
openUrl "$BACKLOG"
;;
open-gh)
openUrl "$GITHUB"
;;
*)
code ${source_dir[source_1]}
code ${source_dir[source_2]}
openUrl "$BACKLOG"
openUrl "$GITHUB"
;;
esac
}
BACKLOG="https://path-to-backlog"
GITHUB="https://github.com/..."
function openUrl () {
url="${1}"
if command -v xdg-open > /dev/null; then
xdg-open "$url"
elif command -v open > /dev/null; then
open "$url"
else
fi
- Như vậy là cơ bản đã cấu hình xong file shorthand, đối với những dự án khác, cũng sẽ làm theo cách tương tự nhé !
2.2 Import những file cấu hình này vào Zshrc
- Tiếp theo, mọi người cần import những file cấu hình này vào zshrc để có thể tương tác với những shorthand mọi người đã cấu hình
1> Khai báo đường dẫn
- Ta cần khai báo đường dẫn cho
zshrc
biết, ví dụ như những file bash mình đang quản lý ở folderWorkspace/ShellManagement
export WORKSPACE_SHELL_MANAGEMENT="$HOME/Workspace/ShellManagement"
2> Tải các tệp cấu hình
- Chạy command
source
để tải các tệp cấu hình shell và script tùy chỉnh mà mọi người đã tạo ở trên
source $ZSH/oh-my-zsh.sh
source $WORKSPACE_SHELL_MANAGEMENT/project1.sh
source $WORKSPACE_SHELL_MANAGEMENT/project2.sh
source $WORKSPACE_SHELL_MANAGEMENT/project3.sh
...
- Ngoài ra, mọi người có thể cấu hình shorthand cho các
tài khoản/email
ở file zshrc này
function gcfkz () {
git config --global user.name YourName
git config --global user.email "YourEmail@gmail.com"
}
...
3> Tải lại Zshrc
- Cuối cùng, ta chỉ cần nạp lại cho file zshrc mà vừa rồi ta đã cấu hình thêm vào.
source ~/.zshrc
2.3 Kết quả
-
Sau khi follow theo hết những bước trên, thì chúng ta cũng đã xong việc cấu hình shorthand cho các đường dẫn đến tài nguyên, source dự án, etc...
-
Mọi người có thể thử , để xem có open đúng source ở vị trí mà ta đã config không nhé
your_shorthand open-source-1
Tổng kết
Như vậy, bài viết trên mình đã tổng hợp lại hai kiến thức như sau:
- Quản lý nhiều tài khoản github với SSH keys
- Tối ưu hoá việc thực hiện bằng tay trong quá trình làm việc
Hi vọng những gì mình chia sẻ ở trên, sẽ giúp ích cho mọi người trong quá trình làm việc. Cảm ơn vì đã xem bài viết của mình nhé. Se yaaa !
Dev
SSH
ZSHRC
Git
Github