Trang chủ / Chuyên đề / Cài đặt xác thực đăng nhập SSH Keys, không cần password trên Ubuntu 18.04
Thứ sáu, 27/04/2018 | 00:00 GMT+7

Cài đặt xác thực đăng nhập SSH Keys, không cần password trên Ubuntu 18.04

SSH, hay shell an toàn, là một giao thức được mã hóa dùng để quản trị và giao tiếp với các server. Khi làm việc với server Ubuntu, thường thì việc quản trị là thông qua kênh SSH.

Trong hướng dẫn này, ta sẽ tập trung vào việc cài đặt SSH key (khóa-SSH) để cài đặt Ubuntu 18.04 vanilla. SSH key (khóa-SSH) cung cấp cách đăng nhập dễ dàng, an toàn vào server và được khuyến khích cho tất cả user.

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

Bước đầu tiên là tạo một cặp khóa trên client (thường là máy tính của bạn):

  • ssh-keygen

Theo mặc định, ssh-keygen sẽ tạo một cặp khóa RSA 2048 bit, đủ an toàn cho hầu hết các trường hợp sử dụng (bạn có thể tùy chọn chuyển vào cờ -b 4096 để tạo khóa 4096 bit lớn hơn).

Sau khi nhập lệnh, bạn sẽ thấy kết quả sau:

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

Nhấn enter để lưu cặp khóa vào .ssh/ folder con trong folder chính của bạn hoặc đưa vào một đường dẫn thay thế nếu muốn.

Nếu trước đó bạn đã tạo cặp SSH key (khóa-SSH), bạn có thể thấy dấu nhắc sau:

Output
/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 đó nữa. Hãy rất cẩn thận khi chọn có, vì đây là một quá trình không phục hồi được.

Sau đó, bạn sẽ thấy dấu nhắc sau:

Output
Enter passphrase (empty for no passphrase):

Tại đây, bạn có thể tùy ý nhập passphrase (password bảo vệ) an toàn, rất được khuyến khích. Passphrase (password bảo vệ) thêm một lớp bảo mật bổ sung để ngăn user lạ đăng nhập. Để tìm hiểu thêm về bảo mật, hãy tham khảo hướng dẫn về Cách Cấu hình Xác thực Dựa trên SSH key (khóa-SSH) trên Server Linux .

Sau đó, bạn sẽ thấy kết quả 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=++.            |
+-----------------+

Đến đây bạn có một khóa public key và private key mà bạn có thể sử dụng để xác thực. Bước tiếp theo là đặt public key trên server để bạn có thể sử dụng xác thực dựa trên SSH key (khóa-SSH) để đăng nhập.

Bước 2 - Sao chép public key vào server Ubuntu

Cách nhanh nhất để sao chép public key của bạn vào server Ubuntu là sử dụng trình có tên ssh-copy-id . Nếu bạn không có ssh-copy-id trên client của bạn, bạn có thể sử dụng một trong hai phương pháp thay thế được cung cấp trong phần này (sao chép qua SSH dựa trên password hoặc sao chép khóa theo cách thủ công).

Sao chép public key bằng ssh-copy-id

Công cụ ssh-copy-id được bao gồm theo mặc định trong nhiều hệ điều hành, vì vậy bạn có thể có nó trên hệ thống local của bạn. Để phương pháp này hoạt động, bạn phải có quyền truy cập SSH dựa trên password vào server.

Để sử dụng, bạn chỉ cần chỉ định server từ xa mà bạn muốn kết nối và account user mà bạn có quyền truy cập SSH bằng password. Đây là account mà SSH key (khóa-SSH) công khai của bạn sẽ được sao chép.

Cú pháp là:

  • ssh-copy-id username@remote_host

Bạn có thể thấy 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 nghĩa là máy tính local của bạn không nhận ra server từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với server mới. Gõ “yes” và nhấn ENTER để tiếp tục.

Tiếp theo, tiện ích sẽ quét account local của bạn để tìm khóa id_rsa.pub mà ta đã tạo trước đó. Khi tìm thấy key, nó sẽ nhắc bạn nhập password của account user từ xa:

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 password (nhập của bạn sẽ không được hiển thị vì mục đích bảo mật) và nhấn ENTER . Tiện ích sẽ kết nối với account trên server từ xa bằng password bạn đã cung cấp. Sau đó, nó sẽ sao chép nội dung của khóa ~/.ssh/id_rsa.pub vào một file trong ~/.ssh trang chủ ~/.ssh của account từ xa có tên là authorized_keys .

Bạn sẽ thấy kết quả sau:

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.

Đến đây, khóa id_rsa.pub của bạn đã được tải lên account từ xa. Bạn có thể tiếp tục sang Bước 3 .

Sao chép public key bằng SSH

Nếu bạn không có ssh-copy-id , nhưng có quyền truy cập SSH dựa trên password vào account trên server, bạn có thể tải lên các khóa bằng phương pháp SSH thông thường.

Ta có thể thực hiện việc này bằng cách sử dụng lệnh cat để đọc nội dung của SSH key (khóa-SSH) công khai trên máy tính local và paste qua kênh SSH đến server từ xa.

Sau đó, ta có thể xuất nội dung mà ta đã đưa vào một file có tên gọi là authorized_keys trong folder. Ta sẽ sử dụng dấu >> để thêm vào (append) nội dung thay vì ghi đè lên. Điều này sẽ cho phép ta thêm các khóa mà không phải hủy các khóa đã thêm trước đó.

Lệnh đầy đủ trông như thế này:

  • 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ể thấy 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 nghĩa là máy tính local của bạn không nhận ra server từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với server mới. Gõ “yes” và nhấn ENTER để tiếp tục.

Sau đó, bạn sẽ cần nhập password account user từ xa:

Output
username@203.0.113.1's password:

Sau khi nhập password, nội dung của khóa id_rsa.pub của bạn sẽ được sao chép vào phần cuối của file authorized_keys id_rsa.pub account của user từ xa. Tiếp tục sang Bước 3 nếu việc này thành công.

Sao chép public key theo cách thủ công

Nếu bạn không có quyền truy cập SSH dựa trên password vào server, bạn sẽ phải hoàn tất quy trình trên theo cách thủ công.

Ta sẽ thêm thủ công nội dung file id_rsa.pub của bạn vào file ~/.ssh/authorized_keys trên máy tính từ xa của bạn.

Để hiển thị nội dung của khóa id_rsa.pub , hãy nhập mã này vào máy tính local của bạn:

  • cat ~/.ssh/id_rsa.pub

Bạn sẽ thấy nội dung của khóa, trông giống như sau:

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 server từ xa của bạn bằng cách nào bạn có.

Khi bạn có quyền truy cập vào account của bạn trên server từ xa, bạn nên đảm bảo ~/.ssh tồn tại. Lệnh này sẽ tạo folder nếu cần hoặc không làm gì nếu nó đã tồn tại:

  • mkdir -p ~/.ssh

Bây giờ, bạn có thể tạo hoặc sửa đổi các authorized_keys file trong folder này. Bạn có thể thêm nội dung của file id_rsa.pub của bạn vào cuối file authorized_keys , tạo nó nếu cần, sử dụng lệnh sau:

  • echo public_key_string >> ~/.ssh/authorized_keys

Trong lệnh trên, thay thế public_key_string bằng kết quả từ lệnh cat ~/.ssh/id_rsa.pub mà bạn đã thực thi trên hệ thống local của bạn. Nó phải bắt đầu bằng ssh-rsa AAAA...

Cuối cùng, ta sẽ đảm bảo các ~/.ssh folder và authorized_keys file có quyền thích hợp cài đặt:

  • chmod -R go= ~/.ssh

Thao tác này sẽ xóa tất cả các quyền “group” và "others" cho ~/.ssh/ .

Nếu bạn đang sử dụng account root để cài đặt khóa cho account user, thì điều quan trọng là ~/.ssh thuộc về user chứ không phải root :

  • chown -R sammy:sammy ~/.ssh

Trong hướng dẫn này, user có tên là sammy nhưng bạn nên thay thế tên user thích hợp vào lệnh trên.

Bây giờ ta có thể thử xác thực không cần password với server Ubuntu .

Bước 3 - Xác thực với server Ubuntu bằng SSH key (khóa-SSH)

Nếu bạn đã hoàn thành một trong các quy trình trên, bạn có thể đăng nhập vào server từ xa mà không cần password server.

Quy trình cơ bản giống nhau:

  • ssh username@remote_host

Nếu đây là lần đầu tiên bạn kết nối với server này (nếu bạn đã sử dụng phương pháp cuối cùng ở trên), bạn có thể thấy thông tin 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 nghĩa là máy tính local của bạn không nhận ra server từ xa. Lần đầu ta gõ “yes” và sau đó nhấn ENTER để tiếp tục.

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

Nếu xác thực dựa trên khóa thành công, ta tiếp tục bảo mật hơn nữa bằng cách tắt xác thực password.

Bước 4 - Tắt xác thực password trên server

Nếu bạn có thể đăng nhập vào account của bạn bằng SSH mà không cần password, bạn đã cấu hình thành công xác thực dựa trên SSH key (khóa-SSH) cho account. Tuy nhiên, cơ chế xác thực dựa trên password của bạn vẫn đang hoạt động, nghĩa là server vẫn bị tấn công brute-force.

Đăng nhập vào server bằng SSH key (khóa-SSH), với account root hoặc bằng account có quyền sudo . Sau đó, mở file cấu hình SSH daemon:

  • sudo nano /etc/ssh/sshd_config

Bên trong file, hãy tìm kiếm một dòng tên là PasswordAuthentication . Bỏ comment nếu có 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 password:

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

Lưu file khi bạn hoàn tất bằng cách nhấn CTRL + X , sau đó nhấn Y để xác nhận lưu file và cuối cùng ENTER để thoát nano. Để áp dụng các thay đổi, ta cần khởi động lại dịch vụ sshd :

  • sudo systemctl restart ssh

Vậy SSH trên server Ubuntu của bạn giờ chỉ phản hồi các SSH key (khóa-SSH). Xác thực dựa trên password đã được vô hiệu hóa thành công.

Kết luận

Bây giờ, bạn đã cấu hình xác thực dựa trên SSH key (khóa-SSH) trên server, cho phép bạn đăng nhập mà không cần cung cấp password account.

Nếu bạn muốn tìm hiểu thêm về cách làm việc với SSH, hãy xem Hướng dẫn Cơ bản về SSH .



Các tin trước

Cài đặt SSH Keys trên Ubuntu 16.04 2018-04-12

Cài đặt Node.js trên Ubuntu 16.04 2018-03-07

Cài đặt Anaconda Python trên Ubuntu 16 04 2017-12-27

Cài đặt MySQL trên CentOS 7 2016-12-01

Cài đặt MySQL trên Ubuntu 16.04 2016-11-23

Cài đặt Node.js Application for Production trên Ubuntu 16.04 2016-11-01

Cài đặt Nginx Server Blocks (Virtual Hosts) trên Ubuntu 16.04 2016-05-19

Cài đặt OpenVPN Server trên Ubuntu 16.04 2016-05-04

Cài đặt JAVA với Apt-Get trên Ubuntu 16.04 2016-04-23

Cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04 2016-04-21