Cách thiết lập khóa SSH trên Ubuntu 20.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, rất có thể bạn sẽ dành phần lớn thời gian của bạn trong một phiên terminal được kết nối với server của bạn thông qua SSH.Trong hướng dẫn này, ta sẽ tập trung vào việc cài đặt SSH key cho cài đặt Ubuntu 20.04. Khóa SSH cung cấp cách đăng nhập an toàn vào server của bạn và được khuyến khích cho tất cả user .
Bước 1 - Tạo cặp khóa
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, các version  gần đây của ssh-keygen sẽ tạo một cặp khóa RSA 3072 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:
OutputGenerating 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 chỉ định một đường dẫn thay thế.
Nếu trước đó bạn đã tạo cặp SSH key , 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 overrides 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:
OutputEnter passphrase (empty for no passphrase): Tại đây, bạn có thể tùy ý nhập một passphrase (password bảo vệ) an toàn, rất được khuyến khích. Passphrase (password bảo vệ) bổ sung 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 của ta về Cách cấu hình xác thực dựa trên SSH key trên server Linux .
Sau đó, bạn sẽ thấy kết quả giống như sau :
OutputYour 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: SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host The key's randomart image is: +---[RSA 3072]----+ |                .| |               + | |              +  | | .           o . | |o       S   . o  | | + o. .oo. ..  .o| |o = oooooEo+ ...o| |.. o *o+=.*+o....| |    =+=ooB=o.... | +----[SHA256]-----+ Đế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 của bạn để bạn có thể sử dụng xác thực dựa trên SSH key để đăng nhập.
Bước 2 - Sao chép public key vào server Ubuntu của bạn
 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 . Do tính đơn giản của nó, phương pháp này rất được khuyến khích nếu có. 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   của bạn .
Để sử dụng trình , bạ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 dựa trên password . Đây là account mà SSH key 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:
OutputThe 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:
OutputNumber 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 bạn có quyền truy cập SSH dựa trên password  vào account  trên  server   của bạn , bạn có thể tải lên các khóa  của bạn  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  công khai trên máy tính local  của  ta  và chuyển thông qua kết nối SSH tới  server  từ xa.
 Mặt khác,  ta  có thể  đảm bảo  ~/.ssh tồn tại và có quyền chính xác trong account  mà  ta  đang sử dụng.
 Sau đó,  ta  có thể xuất nội dung mà  ta  đã đưa vào một file  có tên là authorized_keys trong folder  này.  Ta  sẽ sử dụng biểu tượng >>  để thêm vào nội dung thay  vì overrides  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:
OutputThe 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. Nhập yes và nhấn ENTER để tiếp tục.
Sau đó, bạn sẽ được yêu cầu nhập password account user từ xa:
Outputusername@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 cuối file  authorized_keys id_rsa.pub khóa của account   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 của bạn , 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:
Outputssh-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 bất kỳ phương pháp 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, bằng cách 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 một cách đệ quy tất cả các quyền “ group ” và  "others"(quyền-khác)  đối với ~/.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ủa ta 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 của ta .
Bước 3 - Xác thực server Ubuntu của bạn bằng phím SSH
Nếu bạn đã hoàn tất thành công 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 cung cấp password của account từ xa.
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:
OutputThe 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. 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 của bạn , bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã cung cấp passphrase (password bảo vệ) cho private key khi tạo khóa, bạn sẽ được yêu cầu nhập password ngay bây giờ ( 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, hãy tiếp tục tìm hiểu cách bảo mật hơn nữa hệ thống của bạn bằng cách tắt xác thực password .
Bước 4 - Tắt xác thực password trên server của bạn
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 cho account của bạn . Tuy nhiên, cơ chế xác thực dựa trên password của bạn vẫn hoạt động, nghĩa là server của bạn vẫn bị tấn công brute-force.
 Trước khi hoàn tất các bước trong phần này, hãy  đảm bảo  bạn đã  cấu hình  xác thực dựa trên SSH key  cho account  gốc trên  server  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 account  không phải root  trên  server  này.  server  với  quyền  sudo . Bước này sẽ khóa các thông tin đăng nhập dựa trên password , vì vậy  đảm bảo  bạn vẫn có thể có quyền truy cập quản trị là rất quan trọng.
 Khi bạn đã  xác nhận  account  từ xa  của bạn  có  quyền  quản trị, hãy đăng nhập vào  server  từ xa của bạn bằng SSH key , với account  gốc 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 lệnh có tên là PasswordAuthentication . Dòng này có thể được  comment  bằng dấu # ở đầu dòng. Bỏ  comment  bằng cách xóa dấu # 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 của bạn bằng password  account :
. . . 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. Để thực sự kích hoạt những thay đổi này,  ta  cần khởi động lại dịch vụ sshd :
- sudo systemctl restart ssh 
Để phòng ngừa, hãy mở một cửa sổ terminal mới và kiểm tra xem dịch vụ SSH có hoạt động chính xác hay không trước khi đóng phiên hiện tại của bạn:
- ssh username@remote_host 
Khi bạn đã xác minh dịch vụ SSH của bạn đang hoạt động bình thường, bạn có thể đóng tất cả các phiên server hiện tại một cách an toàn.
Daemon SSH trên server Ubuntu của bạn giờ chỉ phản hồi xác thực dựa trên SSH key . Đăng nhập dựa trên password đã bị vô hiệu hóa.
Kết luận
Bây giờ, bạn đã cấu hình xác thực dựa trên SSH key trên server của bạn , 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ủa ta .
Các tin liên quan
Cách thiết lập khóa SSH trên Ubuntu 20.042020-04-23
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 18.04
2020-04-22
Cách cài đặt và bảo mật phpMyAdmin trên Ubuntu 18.04
2020-04-21
Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04 [Quickstart]
2020-04-16
Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04
2020-04-16
Cách cài đặt Nagios 4 và theo dõi server của bạn trên Ubuntu 18.04
2020-04-12
Cách cài đặt và cấu hình SimpleSAMLphp để Xác thực SAML trên Ubuntu 18.04
2020-04-02
Cách sử dụng Vuls làm máy quét lỗ hổng bảo mật trên Ubuntu 18.04
2020-04-01
Cách tạo người dùng mới hỗ trợ Sudo trên Ubuntu 18.04 [Quickstart]
2020-03-23
Cách cài đặt và cấu hình SNMP Daemon và Client trên Ubuntu 18.04
2020-03-17
 

