BÀI VIẾT

Hướng dẫn cấu hình SSH Key trên Ubuntu 20.04

14.3K
author Tuấn Ngọc Nguyễn - 2022-03-02 15:26:31 (GMT+7)

Bạn không sử dụng Ubuntu 20.04?
Xem bài viết cho các distro khác

Giới thiệu

SSH (Secure Shell) là một giao thức giúp người dùng quản lý và giao tiếp với server. SSH Key được sinh ra để thay thế mật khẩu thông thường nhằm đảm bảo hơn về tính bảo mật. Nó bao gồm 2 key (Public keyPrivate key) được mã hoá.

Private key phải được đảm bảo giữ bí mật tuyệt đối. Bất kỳ người nào có key này đều có thể truy cập vào server. Ngược lại Public key được phép công khai nhằm mã hoá thông tin mà chỉ có thể giải mã bởi Private key.

Bài viết này sẽ hướng dẫn bạn cấu hình SSH Key trên Ubuntu 20.04.

Yêu cầu

  • Hệ thống chạy Ubuntu 20.04

Bước 1: Tạo SSH Key

Bước đầu tiên để cấu hình Xác thực bằng SSH Key bạn cần tạo một cặp SSH Key trên máy tính cục bộ của mình. Ở đây mình sẽ sử dụng ssh-keygen (có sẵn trong bộ OpenSSH suite). Trên terminal bạn nhập lệnh sau:

bash (non-root)
ssh-keygen 

Các tuỳ chọn:

  • -b "bits" : chỉ định số lượng bit trong khóa
  • -t “Type”: chỉ định loại khóa sẽ được tạo. Các giá trị thường được sử dụng là: - rsa cho khóa RSA, - dsa cho khóa DSA
  • -q: ssh-keygen chế độ yên tĩnh.

Bạn sẽ cần nhập nơi lưu trữ key, hãy đảm bảo rằng chỗ đó đủ bảo mật. Private key Sẽ được gọi là id_rsa còn Public key là id_rsa.pub, cả 2 được lưu vào thư mực ~/.ssh theo mặc định

Kết quả
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

Sau đó công cụ này sẽ hỏi bạn nhập mội pass phrase. Bạn có thể để trống nêu muốn nhưng mình khuyên bạn nên điền vào vì nó như lớp bảo mật thứ 2 vậy.

Kết quả
Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Lưu ý: Passphrase không có cách nào để phục hổi nên hãy lưu nó ở một nơi an toàn và dễ nhớ.

Vậy là hoàn thành việc tạo một cặp key SSH.

Kết quả
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2d7mbkG2eQPrIUUGQENbsufiBdKrIsjggZ7q1a/BXkA ubuntu@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|       o*.o.     |
|       . *  o    |
|     E. = .o     |
|.   .  . B  =    |
|o.   .  S ++ =   |
|=.o o .o +..* o  |
|.=...+... .oo+ . |
|. ....+    oo    |
|o.   o..   oo    |
+----[SHA256]-----+

Bước 2: Copy SSH Public Key cho Server của bạn

Có nhiều cách để tải Public Key lên server SSH, mỗi cách đều phụ thuộc vào công cụ mà bạn đang có. Các cách dưới đây đề cho về một kết quả như nhau. Mình sẽ trình bày cách dễ nhất trước sau đó cách cách sau sẽ yêu cầu thêm các tác vụ thủ công thêm. Bạn chỉ nên làm theo nếu như các cách trước không hoạt động.

1. Sử dụng ssh-copy-id

Cách đơn giản nhất chính là sử dụng công cụ ssh-copy-id được tích hợp và bộ công cụ OpenSSH. Để sử dụng, bạn cần chỉ ra server mình muốn copy và tài khoản, mật khẩu SSH. Ở đây, mình có:

  • username : username
  • Remote host: remote_host
  • Thư mục lưu key: $HOME/.ssh/id_rsa.pub
bash (non-root)
ssh-copy-id -i $HOME/.ssh/id_rsa.pub username@remote_host

Bạn có thể thêm tuỳ chọn -p "port" để chỉ định cổng port trong trường hợp SSH Server không chạy ở port 22.

Nếu đây là lần đầu bạn truy cập và Remote Host bạn sẽ có thông báo sau:

Kết quả
The authenticity of host '123.0.223.1 (123.0.223.1)' can't be established.
ECDSA key fingerprint is bf:fd:d4:f9:22:fe:73:84:e1:65:00:bd:d6:6d:6d:fe.
Are you sure you want to continue connecting (yes/no)? yes

Bạn chỉ cần nhập vào yes sau đó là phím <Enter> là được. Tiếp theo công cụ sẽ quét tìm id_rsa.pub mà ta đã tạo, khi tìm kiếm thành công nó sẽ yêu cầu bạn nhập mật khẩu của tài khoản SSH

Kết quả
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@123.0.223.1's password:

Vì lý do bảo mật nên khi nhập, mật khẩu sẽ bị ẩn đi. Sau khi hoàn thành bấm <Enter> và công cụ sẽ tự động kết nối tới tài khoản và copy Key public ~/.ssh/id_rsa.pub vào file trên server ~/.ssh/username/authorized_keys/. Bạn sẽ nhận được thông báo thành công như sau:

Kết quả
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@123.0.223.1'"
and check to make sure that only the key(s) you wanted were added.

2. Sử dụng SSH

Nếu như bạn không thể sử dụng ssh-copy-id thì ta có thể tải key bằng cách SSH thông thường. Chúng ta sử dụng kí hiệu >> để nối vào nội dung thay vì ghi đề lên toàn bộ. Điều này cho phép thêm key và không xoá đi các key đang có.

Kết quả
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Bạn cần phân quyền cho thư mục trên như sau :

  • .ssh: 700 (drwx------)

  • authorized_keys: 600(-rw-r--r--)

Nếu đây là lần đầu bạn truy cập và Remote Host bạn sẽ có thông báo sau:

Kết quả
The authenticity of host '123.0.223.1 (123.0.223.1)' can't be established.
ECDSA key fingerprint is bf:fd:d4:f9:22:fe:73:84:e1:65:00:bd:d6:6d:6d:fe.
Are you sure you want to continue connecting (yes/no)? yes

Bạn chỉ cần nhập vào yes sau đó là phím <ENTER> là được. Tiếp theo công cụ sẽ quét tìm id_rsa.pub mà ta đã tạo, khi tìm kiếm thành công nó sẽ yêu cầu bạn nhập mật khẩu của tài khoản SSH

Kết quả
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@123.0.223.1's password:

Vì lý do bảo mật nên khi nhập, mật khẩu sẽ bị ẩn đi. Sau khi hoàn thành bấm <Enter> và công cụ sẽ tự động kết nối tới tài khoản và copy key public ~/.ssh/id_rsa.pub vào file trên server ~/.ssh/username/authorized_keys/.

3. Copy thủ công

Nếu như cả 2 cách trên đều không khả dụng, thì cách thủ công này là lựa chọn tuyệt vời. Tuy vậy nó sẽ khá khó khăn cho người mới vì bạn sẽ phải làm mọi thứ.

Bạn cần mở xem nội dung của Public key tại id_rsa.pub.

bash (non-root)
cat ~/.ssh/id_rsa.pub
Kết quả
ssh-rsa AAAAKil3NzaC1yc2Egjdp3AQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZdsfshH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxgjdp3S+zVk5dsfsh85gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7JiOKil7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSggjdp3GwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAIdsfsho9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7JiOKiljdp3O4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSdsfsh7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1JiOKilqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWdsfsh4G2fJLRcGUr9q8/lERo9oxRm5JiOKilTCmj6kmiFqv+Ow9gI0x8GvaQ== username@remote_host

Tiếp theo, bạn cần truy cập vào server và tạo thư mực ~/.ssh nếu chưa có bằng cách:

bash (non-root)
mkdir -p ~/.ssh

Bây giờ, bạn sẽ cần copy toàn bộ nội dung của id_rsa.pub Vào file authorized_keys.

bash (non-root)
echo public_key >> ~/.ssh/authorized_keys

Bạn cần phân quyền cho thư mục trên như sau :

  • .ssh: 700 (drwx------)

  • authorized_keys: 600(-rw-r--r--)

Bước 3: Xác thực bằng SSH Key

Bạn đã hoàn thành việc thêm SSH Key và có thể đăng nhập vào server mà không cần mật khẩu. Để đăng nhập bạn nhập lệnh sau:

bash (non-root)
ssh username@remote_host

Nếu bạn sử dụng khoá khác thì có thể sử dụng tuỳ chọn -i đường_dẫn_tới_file để chỉ định file khoá để xác thực

Nếu đây là lần đầu bạn truy cập và Remote Host bạn sẽ có thông báo sau:

Kết quả
The authenticity of host '123.0.223.1 (123.0.223.1)' can't be established.
ECDSA key fingerprint is bf:fd:d4:f9:22:fe:73:84:e1:65:00:bd:d6:6d:6d:fe.
Are you sure you want to continue connecting (yes/no)? yes

Bạn chỉ cần nhập vào yes sau đó là phím <Enter> là được. Sau đó bạn sẽ tự động đăng nhập vào server (Nếu bạn có thêm passpharse thì hệ thống sẽ yêu cầu bạn nhập vào).

Bước 4: Tắt xác thực bằng mật khẩu trên Server

Đăng nhập bằng SSH key không yêu cầu mật khẩu của username vì thế bạn có thể tắt chức năng này đi bằng cách đăng nhập vào server và mở file cấu hình SSH

bash (non-root)
sudo nano /etc/ssh/sshd_config

Tìm tới mục PasswordAuthentication và để giá trị của nó thành no.

Thông tin: Mục này có thể đang ở chế độ `comment` với kí hiệu # ở trước. Bạn chỉ cần xoá kí hiệu đi để bỏ chế độ comment.

/etc/ssh/sshd_config
/etc/ssh/sshd_config

Lưu lại và khởi động lại service:

Lưu ý: Bạn cần giữ kết nối SSH hiện tại và mở thêm 1 kết nối SSH dự phòng trước khi restart service ssh tránh trường hợp cầu hình bị lỗi và không thể đăng nhập và server.

bash (non-root)
sudo systemctl restart ssh

Kết luận

Bây giờ bạn đã hoàn thành xác thực bằng SSH Key trên server của mình. Việc sử dụng SSH thay thế cho mật khẩu phổ thông ngày nay càng được ưa chuộng vì tính bảo mật của mình, mong qua bài hôm nay bạn đã hiểu hơn về SSH. Tạm biệt và hẹn gặp lại !


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Lệnh xác định vị trí của tệp hoặc thư mục trên Linux
Lệnh xác định vị trí của tệp hoặc thư mục trên Linux
Lệnh kiểm tra nhiều cổng port đang mở của một tên miền trên Linux
Lệnh kiểm tra nhiều cổng port đang mở của một tên miền trên Linux
Lệnh tạo một dãy số tăng dần trên Linux
Lệnh tạo một dãy số tăng dần trên Linux

Object Storage

Chuẩn S3, không giới hạn băng thông

Object Storage

Thuê Server Riêng

Chi phí thấp, cấu hình cao

Thuê Server Riêng
Thông tin tác giả
Bình luận

Tính năng đang được phát triển

Đang tải bình luận