CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnCách thiết lập SSH keys trên Ubuntu 18.04

Cách thiết lập SSH keys trên Ubuntu 18.04

CyStack blog 8 phút để đọc
CyStack blog04/09/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 8 minutes

SSH (Secure Shell) là một giao thức mã hóa được sử dụng để quản trị và giao tiếp với server. Khi làm việc với Ubuntu server, phần lớn thời gian bạn sẽ thao tác trong phiên terminal được kết nối qua SSH.

Trong hướng dẫn này, chúng ta sẽ tập trung vào việc thiết lập SSH keys trên Ubuntu 18.04. SSH key mang lại cách đăng nhập vào server an toàn hơn và được khuyến nghị cho mọi người dùng.

Cách thiết lập SSH keys trên Ubuntu 18.04

Bước 1: Tạo cặp khóa RSA

Đầu tiên, hãy tạo một cặp SSH key trên máy client (thường là máy tính cá nhân):

ssh-keygen

Mặc định, ssh-keygen sẽ tạo ra cặp RSA key 2048-bit, đủ an toàn cho hầu hết các trường hợp. Bạn cũng có thể tạo khóa mạnh hơn với 4096-bit bằng flag -b 4096.

Sau khi chạy lệnh, bạn sẽ thấy thông báo:

Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Nhấn ENTER để lưu key vào thư mục .ssh/ trong home directory, hoặc chỉ định đường dẫn khác.

Nếu bạn đã tạo SSH key trước đó, hệ thống sẽ hỏi:

/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

Nếu bạn chọn ghi đè khóa trên ổ đĩa, bạn sẽ không thể xác thực bằng khóa trước được nữa. Do đó, hãy hết sức cẩn thận khi chọn yes, vì đây là một thao tác hủy không thể đảo ngược.

Tiếp theo, hệ thống sẽ yêu cầu bạn nhập passphrase bảo mật:

Output

Enter passphrase (empty for no passphrase):

Bạn có thể nhập một passphrase bảo mật. Điều này là rất cần thiết vì passphrase thêm một lớp bảo mật để ngăn chặn truy cập trái phép. Để tìm hiểu thêm về bảo mật, hãy tham khảo hướng dẫn Cấu hình xác thực bằng SSH Key trên máy chủ Linux.

Tổng hợp lại, lệnh ssh-keygen sẽ trả về kết quả như sau:

Output

Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

Bây giờ bạn đã có một khóa công khai (public key) và khóa riêng (private key) để xác thực. Bước tiếp theo là đưa khóa công khai lên máy chủ để bạn có thể sử dụng xác thực bằng SSH key khi đăng nhập.

Bước 2: Sao chép Public Key lên máy chủ Ubuntu

Cách nhanh nhất để sao chép public key lên máy chủ Ubuntu là sử dụng tiện ích ssh-copy-id. Do tính đơn giản, bạn nên sử dụng cách thức này nếu có sẵn. Nếu không có ssh-copy-id trên máy client, bạn có thể dùng một trong hai phương pháp thay thế (sao chép qua SSH dựa trên mật khẩu hoặc sao chép thủ công).

Sao chép Public Key bằng ssh-copy-id

Công cụ ssh-copy-id được cài sẵn trên nhiều hệ điều hành, nên có thể đã có trên hệ thống của bạn.

Lưu ý: Để phương pháp này hoạt động, bạn cần có quyền truy cập SSH bằng mật khẩu đến máy chủ.

Để dùng tiện ích này, bạn chỉ định host từ xa và tài khoản người dùng mà bạn có quyền truy cập SSH bằng mật khẩu. Đây sẽ là tài khoản nhận public key của bạn.

Cú pháp:

ssh-copy-id username@remote_host

Bạn có thể nhận thông báo:

Output

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Điều này nghĩa là máy tính của bạn chưa nhận diện host từ xa, thường xảy ra khi lần đầu kết nối đến host mới. Nhập “yes” và nhấn ENTER để tiếp tục.

Sau đó, tiện ích sẽ quét tài khoản cục bộ để tìm khóa id_rsa.pub mà bạn đã tạo trước đó. Khi tìm thấy, nó sẽ yêu cầu mật khẩu của tài khoản remote:

Output

/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@203.0.113.1's password:

Nhập mật khẩu (sẽ không hiển thị ký tự nào để đảm bảo bảo mật) rồi nhấn ENTER. Công cụ sẽ kết nối đến tài khoản remote bằng mật khẩu, sau đó sao chép nội dung của ~/.ssh/id_rsa.pub vào file authorized_keys trong thư mục ~/.ssh trên tài khoản remote.

Bạn sẽ nhận được thông báo:

Output

Number of key(s) added: 1

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

Tại thời điểm này, public key của bạn đã được tải lên tài khoản remote. Bạn có thể chuyển sang Bước 3.

Sao chép Public Key bằng SSH

Nếu không có ssh-copy-id nhưng có quyền truy cập SSH bằng mật khẩu, bạn có thể tải khóa lên bằng cách truyền nội dung khóa công khai qua kết nối SSH.

Đừng quên, điều này chỉ hoạt động nếu bạn có quyền truy cập SSH vào máy chủ dựa trên mật khẩu.

Bạn có thể thực hiện bằng cách sử dụng lệnh cat để đọc nội dung của khóa SSH công khai trên máy tính cục bộ và truyền nó qua kết nối SSH tới máy chủ từ xa.

Ở phía máy chủ, bạn phải đảm bảo là đã có sẵn thư mục ~/.ssh và có quyền truy cập chính xác dưới tài khoản mà bạn đang sử dụng.

Sau đó, bạn có thể ghi nội dung đã truyền vào một tệp có tên authorized_keys trong thư mục này. Sử dụng ký hiệu chuyển hướng >> để nối thêm nội dung thay vì ghi đè. Cách này cho phép bạn thêm khóa mới mà không làm mất các khóa đã thêm trước đó.

Lệnh đầy đủ hiển thị như sau:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Bạn có thể nhận được thông báo sau:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Điều này có nghĩa là máy tính cục bộ của bạn không nhận diện được máy chủ từ xa. Tình huống này sẽ xảy ra trong lần bạn kết nối tới một máy chủ mới. Gõ “yes” và nhấn ENTER để tiếp tục.

Sau đó, bạn sẽ được yêu cầu nhập mật khẩu của tài khoản người dùng từ xa:

Output
username@203.0.113.1's password:

Sau khi nhập mật khẩu, nội dung khóa id_rsa.pub của bạn sẽ được sao chép vào cuối tệp authorized_keys trong tài khoản người dùng từ xa. Nếu thành công, hãy tiếp tục sang Bước 3.

Sao chép Public Key thủ công

Nếu bạn không có quyền truy cập SSH dựa trên mật khẩu tới máy chủ, bạn sẽ phải hoàn tất quá trình này một cách thủ công.

Phần này mô tả cách thủ công để nối nội dung của tệp id_rsa.pub vào tệp ~/.ssh/authorized_keys trên máy từ xa.

Để hiển thị nội dung của id_rsa.pub, chạy lệnh sau trên máy tính cục bộ của bạn:

cat ~/.ssh/id_rsa.pub

Lệnh này sẽ trả về nội dung của khóa trong phần output:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Truy cập vào máy chủ từ xa bằng bất kỳ phương pháp nào bạn có.

Khi đã truy cập vào tài khoản trên máy chủ từ xa, bạn phải đảm bảo là đã có sẵn thư mục ~/.ssh. Lệnh sau sẽ tạo thư mục nếu cần, hoặc không làm gì nếu nó đã có sẵn:

mkdir -p ~/.ssh

Bây giờ bạn có thể tạo hoặc chỉnh sửa tệp authorized_keys trong thư mục này. Bạn có thể thêm nội dung của tệp id_rsa.pub vào cuối tệp authorized_keys, tạo mới nếu cần. Với lệnh này, thay thế public_key_string bằng output từ lệnh cat ~/.ssh/id_rsa.pub mà bạn đã thực hiện trên hệ thống cục bộ. Nó sẽ bắt đầu với chuỗi ssh-rsa AAAA...:

echo public_key_string >> ~/.ssh/authorized_keys

Cuối cùng, phải đảm bảo thư mục ~/.ssh và tệp authorized_keys có quyền truy cập phù hợp:

chmod -R go= ~/.ssh

Lệnh này sẽ đệ quy xóa tất cả quyền của “group” và “other” đối với thư mục ~/.ssh.

Nếu bạn đang sử dụng tài khoản root để thiết lập khóa cho một tài khoản người dùng, thì thư mục ~/.ssh phải thuộc về người dùng đó chứ không phải root. Trong hướng dẫn này, người dùng có tên là sammy, nhưng bạn nên thay bằng tên người dùng phù hợp trong lệnh sau:

chown -R sammy:sammy ~/.ssh

Bây giờ bạn có thể thử xác thực không cần mật khẩu với máy chủ Ubuntu của mình.

Bước 3: Xác thực vào máy chủ Ubuntu bằng SSH Key

Nếu bạn đã hoàn tất thành công một trong các quy trình ở Bước 2, bạn sẽ có thể đăng nhập vào máy chủ từ xa mà không cần mật khẩu của tài khoản từ xa.

Quá trình này giống nhau:

ssh username@remote_host

Nếu đây là lần đầu tiên bạn kết nối tới máy chủ này (trong trường hợp bạn đã sử dụng phương pháp thủ công), bạn có thể nhận được thông báo như sau:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Điều này có nghĩa là máy tính cục bộ của bạn không nhận diện được máy chủ từ xa. Gõ “yes” và nhấn ENTER để tiếp tục.

Nếu bạn không đặt passphrase cho private key của mình, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã đặt passphrase cho private key khi tạo khóa, bạn sẽ được yêu cầu nhập nó (lưu ý, các phím bạn gõ sẽ không hiển thị trong phiên terminal để bảo mật). Sau khi xác thực thành công, một phiên shell mới sẽ mở ra với tài khoản đã được cấu hình trên máy chủ Ubuntu.

Nếu quá trình xác thực bằng khóa thành công, bạn có thể tiếp tục tìm hiểu cách nâng cấp bảo mật hệ thống bằng cách vô hiệu hóa xác thực bằng mật khẩu.

Bước 4: Vô hiệu hóa xác thực bằng mật khẩu trên máy chủ

Nếu bạn đã có thể đăng nhập vào tài khoản bằng SSH mà không cần mật khẩu, nghĩa là bạn đã cấu hình thành công xác thực dựa trên SSH key cho tài khoản của mình. Tuy nhiên, cơ chế xác thực bằng mật khẩu vẫn còn hoạt động, đồng nghĩa với việc máy chủ của bạn vẫn bị lộ trước các đợt tấn công brute-force.

Trước khi hoàn tất các bước trong phần này, bạn phải hoàn thành cấu hình xác thực dựa trên SSH key cho tài khoản root trên máy chủ này, hoặc tốt hơn là bạn đã cấu hình xác thực dựa trên SSH key cho một tài khoản không phải root nhưng có quyền sudo trên máy chủ. Bước này sẽ khóa hoàn toàn chức năng đăng nhập bằng mật khẩu, do đó, bạn phải đảm bảo là mình vẫn có thể truy cập quản trị. Điều này cực kỳ quan trọng.

Khi đã xác nhận rằng tài khoản từ xa của bạn có quyền quản trị, hãy đăng nhập vào máy chủ từ xa bằng SSH key, với tư cách root hoặc tài khoản có quyền sudo. Sau đó, mở tệp cấu hình của SSH daemon:

sudo nano /etc/ssh/sshd_config

Trong tệp này, tìm một chỉ thị có tên PasswordAuthentication. Dòng này có thể đang bị chú thích bằng ký tự # ở đầu. Bỏ ký tự # để bỏ chú thích và đặt giá trị thành no. Điều này sẽ vô hiệu hóa khả năng đăng nhập qua SSH bằng mật khẩu tài khoản:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Lưu và đóng tệp khi hoàn tất bằng cách nhấn CTRL + X, sau đó YENTER để thoát nano. Để kích hoạt thay đổi, bạn cần khởi động lại dịch vụ sshd:

sudo systemctl restart ssh

Để đảm bảo an toàn, bạn hãy mở một cửa sổ terminal mới và kiểm tra xem dịch vụ SSH đang hoạt động chính xác trước khi đóng phiên hiện tại hay chưa:

ssh username@remote_host

Khi đã xác minh rằng dịch vụ SSH hoạt động bình thường, bạn có thể đóng tất cả các phiên máy chủ hiện tại.

SSH daemon trên máy chủ Ubuntu của bạn giờ đây chỉ phản hồi với xác thực dựa trên SSH key và xác thực bằng mật khẩu đã bị vô hiệu hóa.

Kết luận

Giờ đây bạn đã cấu hình xác thực dựa trên SSH key trên máy chủ, cho phép bạn đăng nhập mà không cần cung cấp mật khẩu tài khoản.

Nếu bạn muốn tìm hiểu thêm về cách làm việc với SSH, hãy tham khảo hướng dẫn Các kiến thức cơ bản về SSH (SSH Essentials Guide).

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất