Bài viết này hướng dẫn các bước cài đặt SSH (sử dụng định danh mặc định) trên Windows để quản lý kho mã nguồn Git với công cụ dòng lệnh GitBash. Để cài đặt Git các bạn vào link: http://how.vndemy.com/software/766-cai-dat-git/ và theo hướng dẫn.

Step 1. SSH là gì

Để sử dụng SSH với kho quản lý mã nguồn Bitbucket (hay Github), bạn cần tạo mã định danh SSH. Một mã định danh gồm 1 cặp khóa private key và public key. Private key thường đặt tại máy tính dev local  ~/.ssh, và khóa Public key  sẽ được upload lên tài khoản Bitbucket của bạn.

Sau đó là bạn có thể kết nối thành công tới các kho mã nguồn mà bạn sở hữu nó hoặc bạn có quyền. Bằng việc cài đặt SSH giữa máy local và Bitbucket server, hệ thống sẽ tự động được xác thực, bạn không cần phải nhập mật khẩu mỗi lần tương tác với các kho mã nguồn được cung cấp bới Bitbucket.

Có một vài khái niệm quan trọng ta cần quan tâm khi làm việc với SSH và Bitbucket.

  • Bạn không thể sử dụng lại khóa public key cho nhiều tài khoản. Nếu bạn có nhiều tài khoản Bitbucket, bạn cần tạo tương ứng các cặp khóa cho mỗi tài khoản.
  • Bạn có thể kết hợp nhiều cặp khóa cho một account Bitbucket. Tức là, bạn có thể tạo nhiều cặp khóa cho cùng 1 tài khoản, ví dụ, bạn có thể truy cập một kho dữ liệu từ 1 máy tính làm việc ở công ty hoặc từ máy tính cá nhân ở nhà. Lúc này, ta cần tạo 2 cặp khóa cho mỗi máy tính và cài đặt chúng vào kho mã nguồn.
  • RSA và DSA là hai thuật toán mã hóa. Bitbucket hỗ trợ cả hai. Song, bạn có thể dùng tùy theo phương pháp mà thân thiện với bạn.

Step 2. Kiểm tra đã tồn tại bộ khóa mã

SSH client được tích hợp sẵn với Git Bash shell. Theo các bước sau đây để kiểm tra cài đặt:

1. Double-click vào biểu tượng Git Bash để mở giao diện dòng lệnh (trên Windows có thể click chuột phải vào 1 thư mục, click chọn Git Bash)

2. Kiểm phiên bản SSH client đã cài đặt bằng lệnh:

$ ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1i 6 Aug 2014

3. Nếu ssh đã được cài đặt, thì chuyển bước sau. Nếu không bạn cần phải cài cho nó (bài này mặc định là đã cài thành công)

4. Xem nội dung của thư mục ~/.ssh

Nếu bạn chưa sử dụng SSH trên Git Bash thì sẽ thấy chưa có gì ở đó cả:

Vunb@VUNB-PC ~
$ ls -a ~/.ssh
ls: /c/Users/Vunb/.ssh: No such file or directory

Khác, bạn sẽ có 1 cặp khóa mặc định id_*:

Vunb@VUNB-PC ~
$ ls -a ~/.ssh
.    ..    id_rsa    id_rsa.pub  known_hosts

Nếu sử dụng luôn cặp khóa mặc định đã được gen sẵn này, hãy bỏ qua bước ngay sau đây và chuyển sang bước Step 4. Cấu hình SSH config file

Step 3. Cài đặt cặp khóa mặc định

Mặc định, tất cả các cặp khóa định danh sẽ được lưu tại thư mục c:/Users/<your_name>/.ssh. Các bước để sinh ra 1 bộ khóa để cài đặt bitbucket như sau:

1. Mở giao diện dòng lệnh Git Bash

2. Gõ lệnh: ssh-keygen

Dòng lệnh sẽ nhắc bạn nhập 1 tên file:

Vunb@VUNB-PC ~
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Vunb/.ssh/id_rsa):

3. Để mặc định và gõ enter thôi 😀 (hoặc bạn có thể nhập vào tên khác)

4. Nhập vào mật khẩu.

Chương trình sẽ tạo cho bạn 1 cặp khóa định danh mặc định. Kết quả có giao diện tương tự như dưới đây:

Vunb@VUNB-PC ~
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Vunb/.ssh/id_rsa):
Created directory '/c/Users/Vunb/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Vunb/.ssh/id_rsa.
Your public key has been saved in /c/Users/Vunb/.ssh/id_rsa.pub.
The key fingerprint is:
e7:94:d1:a3:02:ee:38:6e:a4:5e:26:a3:a9:f4:95:d4 Vunb@VUNB-PC

5. Kiểm tra bộ khóa được sinh ra bằng lệnh ls

$ ls ~/.ssh
id_rsa  id_rsa.pub

Vậy là ta đã sinh ra được 1 cặp khóa, đại diện cho khóa công khai public key là id_rsa.pub, khóa private key là id_rsa

Step 4. Cấu hình SSH config file

1. Mở (hoặc tạo mới) file ~/.ssh/config
2. Thêm toàn bộ nội dung file như sau đây:

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa

Dòng thứ 2 thụt vào 1 khoảng trắng. Là đường dẫn chỉ đến file private key mà ta đã tạo ở trên.

3. Lưu và đóng file lại
4. Khởi động lại GitBash

Step 5. Cài đặt public key cho tài khoản Bitbucket

1. Mở trình duyệt và đăng nhập tài khoản Bitbucket
2. Trên menu bên phải, click chọn Avatar > Manage Account
3. Click SSH keys: Trang sẽ hiển thị danh sách các khóa SSH bạn đã thêm từ các máy khác nhau.
4. Copy toàn bộ nội dung khóa công khai đã tạo ở trên: ~/.ssh/id_rsa.pub
5. Click chọn Add key, đặt tên và dán nội dung file id_rsa.pub vào ô tương ứng:

bitbucket-ssh-key

Click Add key, để thêm vào tài khoản của bạn.

6. Quay lại GitBash, kiểm tra máy tính đã kết nối đến bitbucket server thành công chưa.

ssh -T git@bitbucket.org

Và một dòng thông báo thành công tương tự như sau với khóa ta vừa tạo:

logged in as vunb.
You can use git or hg to connect to Bitbucket. Shell access is disabled.

7. Vấn đề bị từ chối truy cập

Trong trường hợp nhận được dòng thông báo Permission denied (publickey). có nghĩa rằng việc cài đặt của chúng ta chưa thành công hoặc cặp khóa mã chưa được nạp trong GitBash. Sử dụng lệnh sau kiểm tra private key đã được nạp hay chưa:

$ssh-add -l
2048 2e:ec:72:cc:e7:bf:93:eb:35:80:16:d5:aa:9b:1e:2f /c/Users/Vunb/.ssh/id_rsa (RSA)

Nếu dính lỗi này hãy thực hiện thêm bước Step 6, không thì chúng ta đã hoàn tất việc và thử một vài lệnh git/add/commit/push/pull để thao tác với kho mã nguồn trên Bitbucket.

Step 6. Nạp ssh key tự động

Chúng ta cần làm 1 việc cho thuận tiện khi làm việc với Git là nạp ssh key tự động mỗi khi chạy GitBash. Để làm vệc này ta tạo một file với tên ~/.bashrc với nội dung như sau:

1. Tạo file với nội dung sau:

SSH_ENV=$HOME/.ssh/environment
   
# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
   
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

2. Lưu và đóng file lại
3. Khởi động lại GitBash

Chương trình sẽ nhắc bạn nhập mật khẩu passphrase như sau:

Welcome to Git (version 1.9.4.msysgit.2)
Run 'git help git' to display the help index.
Run 'git help <command>' to display help for specific commands.
Enter passphrase for /c/Users/Vunb/.ssh/id_rsa:

4. Nhập mật khẩu của bạn vào
5. Thực hiện lệnh lại lệnh kiểm tra private key đã nạp thành công

$ssh-add -l
2048 2e:ec:72:cc:e7:bf:93:eb:35:80:16:d5:aa:9b:1e:2f /c/Users/Vunb/.ssh/id_rsa (RSA)

Chú ý 1: Trường hợp mục không nạp ssh-key tự động được, hãy thay đổi lại nội dung file .bashrc như sau và làm lại bước 6.2, 6.3:

agent_running() {
    [ "$SSH_AUTH_SOCK" ] && { ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]; }
}

env=~/.ssh/agent.env

if ! agent_running && [ -s "$env" ]; then
    . "$env" >/dev/null
fi

if ! agent_running; then
    ssh-agent >"$env"
    . "$env" >/dev/null
    ssh-add
fi

unset env

Chú ý 2: Nếu đã áp dụng đầy đủ các bước trên vẫn không được, hãy copy file .bashrc thành file với tên .profile cùng cấp thư mục ~

Vậy là hoàn tất. Chúc các bạn thành công !

Liên kết tham khảo

About The Author

  • Nguyễn Đình Khoa

    Ở chỗ này Step 6. Nạp ssh key tự động:
    tạo một file với tên ~/.bashrc là file tên bashrc hả bạn

    • tên file là có dấu chấm nữa: .bashrc
      hoặc bạn gõ luôn lệnh tạo file rỗng: touch ~/.bashrc