Xơn Space

    My bullshit stories

    Back

    Quản lý nhiều tài khoản Github với SSH keys và custom alias zsh

    logo

    Hoàng Sơn

    published at:12/07/2024 at 10:46 AM- view

    thumbail

    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

    parsed-mdx-image

    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ành git@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-blopen-wspopen-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ệnh your_shorthand, giúp tự động hoàn thành các tùy chọn khi gõ lệnh your_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 command your_shorthand.
    • Ví dụ ở đây mình mong muốn, khi gõ command your_shorthand open-source-1 thì nó sẽ tự động mở ra source 1 ở VSCODE, hoặc là your_shorthand open-figma thì nó sẽ tự động mở Chrome và hiển thị ra đúng file Figma 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ý ở folder Workspace/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

    Categories:

    Dev

    logo

    Hoàng Sơn

    Cảm ơn bạn đã dành thời gian đọc qua bài viết trên của mình, nếu có bất kỳ câu hỏi gì, thì cứ nhắn tin cho mình nhé. Hi vọng mình đã giúp ích cho bạn 'một phần nào đấy'.

    Articles you might like

    There are 0 comments on this post

    Comment

    Your email address will not be published. Required fields are marked * are required.