Cài đặt Git Server truy cập qua SSH trên CentOS/Ubuntu

Cài đặt Git Server truy cập qua SSH trên CentOS/UbuntuCuongquach.com | Một trong những bài học cơ bản đối với các bạn lập trình viên hoặc quản trị viên hỗ trợ về GIT (Source Version Control), đó là làm thế nào để cài đặt một Git Server chứa các Git Repository dành cho các mã nguồn dự án code. Từ đó ta có thể lưu trữ mã nguồn dự án, tích hợp Git Server với CI/CD hoặc chia sẻ Git Repository với người khác hoặc dùng trong nội bộ.

cai-dat-git-server-truy-cap-qua-ssh

Git là gì ?

Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS) ra đời vào năm 2005 và hiện được dùng rất phổ biến. So với các hệ thống quản lý phiên bản tập trung khi tất cả mã nguồn và lịch sử thay đổi chỉ được lưu một nơi là máy chủ thì trong hệ thống phân tán, các máy khách không chỉ “check out” phiên bản mới nhất của các tập tin mà là sao chép (mirror) toàn bộ kho mã nguồn (repository).

Như vậy, nếu như máy chủ ngừng hoạt động, thì bạn hoàn toàn có thể lấy kho chứa từ bất kỳ máy khách nào để sao chép ngược trở lại máy chủ để khôi phục lại toàn bộ hệ thống. Mỗi checkout thực sự là một bản sao đầy đủ của tất cả dữ liệu của kho chứa từ máy chủ.

mô hình tổ chức dữ liệu phân tán trên git
mô hình tổ chức dữ liệu phân tán trên git

Mô hình Git Server cơ bản truy cập bằng SSH

  • Như bạn đã biết thì Git Server Remote thường hỗ trợ 2 hình thức truy cập Git Repository là : SSHHTTP. Ở bài hướng dẫn này chúng ta sẽ tìm hiểu cách thức thiết lập hình thức truy cập SSH đến Git Repository.
  • Kế đến là về phân quyền đơn giản, ở bài lab này chúng ta sẽ chỉ sử dụng 1 user để các lập trình viên sử dụng cho việc kết nối SSH đến Git Server tương tác với Git Repository. Ở các bài viết khác ta sẽ sớm tìm hiểu về phân quyền các user khác nhau cho lập trình viên tương tác qua SSH.
git server truy cập qua ssh
git server truy cập qua ssh

1. Cài đặt Git

– Đầu tiên chúng ta cài chương trình Git trên CentOS/Ubuntu.

+ CentOS

# yum install git -y

+ Debian/Ubuntu

# apt-get install git

– Kiểm tra chương trình Git hoạt động ổn chưa.

# git --version

2. Tạo Git Repository

Bước 1: tạo user truy cập vào Repository trên Git Server
– Đầu tiên ở mô hình cơ bản, chúng ta tạo một user sử dụng chung cho dịch vụ Git Repository. Thông tin user này sẽ được các user đầu cuối như các lập trình viên sử dụng chung để kết nối đến Repository trên Git Server, thay vì sử dụng user riêng ở mô hình nâng cao.

# groupadd -r git
# useradd -m -g git git
# passwd git

Bước 2: thiết lập SSH key cho user “git
– Như đã nói về mô hình này, chúng ta sẽ sử dụng SSH làm giao thức kết nối đến Repository Git Server, nên chúng ta cần cấu hình chứng thực qua SSH Key. Chúng ta khai báo file ‘authorized_keys‘ cho user ‘git‘ để chứa các thông tin public key mà user đầu cuối sẽ sử dụng để chứng thực SSH Key khi tương tác với Git Remote.

# su git
# cd ~
# mkdir .ssh
# chmod 700 .ssh
# touch .ssh/authorized_keys
# chmod 600 .ssh/authorized_keys

– Ở phần này, các lập trình viên như UserA, UserB,… sẽ được yêu cầu đưa thông tin public key cho bạn và bạn sẽ đẩy các nội dung public key của các User vào file ‘authorized_keys‘ của user ‘git‘. (Nếu bạn chưa biết sử dụng SSH Private/Public Key thì có thể tìm hiểu trên mạng thêm).

# cat /tmp/id_rsa.userA.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair

# cat /tmp/id_rsa.userA.pub >> /home/git/.ssh/authorized_keys
# cat /tmp/id_rsa.cuongqc.pub >> /home/git/.ssh/authorized_keys
# cat /tmp/id_rsa.userC.pub >> /home/git/.ssh/authorized_keys

Bước 3: tạo shared repository trên server
– Giả sử mình quy hoạch một thư mục dành riêng cho Git Repository trên CentOS là :

/srv/gitrepo/

– Thì mình sẽ tạo thư mục riêng để chứa các dự án project trên Server Git.

# mkdir -p /srv/gitrepo/
# chown git:git -R /srv/gitrepo/

– Giờ chúng ta sẽ tạo một dự án project git repository mới hoàn toàn, chưa có dữ liệu gì,.. (bare repository) coi như là khai báo thông tin Repository gốc mới. Ví dụ: repository mới khai báo có tên là ‘cuongquach-demo.git‘.

# cd /srv/gitrepo/
# mkdir cuongquach-demo.git
# cd cuongquach-demo.git
# git init --bare
Initialized empty Git repository in /srv/gitrepo/cuongquach-demo.git/
# ls
branches  config  description  HEAD  hooks  info  objects  refs

– Cơ bản là bạn đã tạo xong một Repository mới trên Git Server rồi đó. Giờ chúng ta cần thêm 1 chút cấu hình an toàn về bảo mật cho user ‘git’.

Bước 4: giới hạn quyền shell cho user ‘git’ .

– Bạn cũng nên giới hạn môi trường shell an toàn mà user git được phép sử dụng. Tránh trường hợp các developer sử dụng public/private key ssh đến Git Server và có môi trường shell mặc định của Linux để phá hoại. Chính vì vậy chúng ta sẽ chỉ định ‘git-shell‘cho user git được đi kèm khi cài đặt Git.

# which git-shell
/usr/bin/git-shell
# echo '/usr/bin/git-shell' >> /etc/shells

– Thay đổi shell cho user ‘git’.

# chsh git -s $(which git-shell)
Changing shell for git.
Shell changed.

# grep "git" /etc/passwd
git:x:1000:987::/home/git:/usr/bin/git-shell

– Giờ thì user ‘git‘ chỉ có thể sử dụng kết nối SSH để push và pull Git Repository, không thể sử dụng shell để làm các tác vụ khác. Nếu bạn thử đăng nhập user Git qua SSH thì sẽ gặp thông báo lỗi như sau.

# ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.

3. Kết nối Git Repository

Giờ bạn sẽ thử kết nối Git Server với Repository ví dụ tên là ‘cuongquach-demo.git‘ mà mình đã tạo trước đó. Do bạn đã khai báo thông tin public key trên file ‘authorized_keys‘ rồi nên giờ bạn chỉ cần sử dụng file private key tương ứng public key đó để chứng thực SSH truy cập Git Server.

Giả sử máy chủ client của mình là Linux và mình tạo 1 thư mục chứa source code project Git. Đầu tiên cần khai báo config ở SSH Client sử dụng SSH Key dùng cho địa chỉ IP máy chủ Git Server, để thuận tiện kết nối.

# vi ~/.ssh/config
Host my_git_server
    Hostname 10.12.166.62
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa.cuongqc

Kế đến thử Clone Git Repository vừa tạo ở trên nào.

# mkdir /opt/myproject/
# cd /opt/myproject/
# git clone ssh://git@my_git_server/srv/gitrepo/cuongquach-demo.git/

Trong đó:

  • git : là user owner thư mục repository ta đã tạo.
  • my_git_server : là địa chỉ ip của Git Server (ip này là IP làm lab). Đã khai báo ở SSH Client..
  • /srv/gitrepo/cuongquach-demo.git/ : đường dẫn tuyệt đối thư mục chứa git repository project.

Giờ bạn thử tạo 1 số file rồi commit push dữ liệu code của bạn lên Git Server Repository thử nào.

# cd /opt/myproject/cuongquach-demo
# touch a b c d e f
# git add .
# git commit -m 'new'
# git commit -m 'new'
[master (root-commit) f769073] new
Committer: root <root@localhost.localdomain>

6 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
create mode 100644 b
create mode 100644 c
create mode 100644 d
create mode 100644 e
create mode 100644 f

# git push origin master

Nếu bạn lên server kiểm tra thì trong thư mục repository sẽ không thấy tập tin của bạn vừa push lên. Bạn có thể test thử bằng cách tạo một thư mục khác, sau đó clone lại repository  xuống máy tính client từ server sẽ thấy tập tin được kéo về.

Tổng kết

Vậy là ở bài hướng dẫn này bạn đã biết cách tự tạo một Git Server Repository riêng và có thể truy cập thông qua giao thức SSH rồi phải không nào ?! Cực kì đơn giản, còn lại là bạn test các tính năng Git với Git Server vừa tạo thôi. Chúc bạn thành công.

Nguồn: https://cuongquach.com/

Previous articleEbook CCNA Voice Study Guide (PDF)
Next articleCài đặt MongoDB 4 trên CentOS 7
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !