Cách thiết lập khóa SSH trên CentOS 8
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 CentOS, 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 server CentOS 8. Khóa SSH cung cấp một phương pháp đăng nhập đơn giản, 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 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 local 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 dấu nhắc 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 folder con .ssh/
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 chọn 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 thêm một lớp bảo mật cho khóa của bạn để ngăn user lạ đăng nhập.
Sau đó, bạn sẽ thấy kết quả 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: 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à lấy public key vào 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 CentOS của bạn
Cách nhanh nhất để sao chép public key của bạn vào server CentOS là sử dụng trình có tên ssh-copy-id
. 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ế sau đâ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 Khóa công khai của bạn 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ỉ 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 công khai của bạn sẽ được sao chép vào:
- 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. Nhập 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 bạn ~/.ssh/id_rsa.pub
key vào account từ xa ~/.ssh/authorized_keys
file .
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 hơn.
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 khóa mà không hủy bất kỳ khóa nào đã 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== sammy@host
Đăng nhập vào 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 dựa trên khóa với server CentOS của ta .
Bước 3 - Đăng nhập vào server CentOS của bạn bằng SSH key
Nếu bạn đã hoàn thành một trong các quy trình trên, bây giờ bạn có thể đăng nhập vào server từ xa mà không cần password của account từ xa.
Quy trình ban đầu giống như với xác thực dựa trên password :
- 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. Nhập yes
và sau đó nhấn ENTER
để tiếp tục.
Nếu bạn không cung cấp passphrase (password bảo vệ) khi tạo cặp khóa của bạn ở bước 1, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã cung cấp một passphrase (password bảo vệ) , bạn sẽ được yêu cầu nhập nó ngay bây giờ. 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 CentOS.
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 dựa trên password của server SSH của bạn.
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 vi /etc/ssh/sshd_config
Bên trong file , hãy tìm kiếm một lệnh có tên là PasswordAuthentication
. Điều này có thể được comment bằng #
băm. Nhấn i
để đưa vi
vào chế độ insert , sau đó bỏ comment 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 ...
Khi bạn thực hiện xong các thay đổi, hãy nhấn ESC
và sau đó :wq
để ghi các thay đổi vào file và thoát. Để áp dụng các thay đổi , ta cần khởi động lại dịch vụ sshd
:
- sudo systemctl restart sshd
Để 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 vẫn 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 CentOS của bạn giờ chỉ phản hồi các SSH key . 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 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 cài đặt và sử dụng TimescaleDB trên CentOS 72020-02-03
Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên CentOS 7
2020-01-24
Cách thiết lập ứng dụng Node.js để sản xuất trên CentOS 7
2019-10-28
Cách cấu hình Cụm Galera với MariaDB trên server CentOS 7
2019-07-10
Cách sử dụng Chế độ độc lập của Certbot để lấy chứng chỉ SSL của Let's Encrypt trên CentOS 7
2019-05-31
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên CentOS 7
2019-05-29
Cách tạo một cụm Kubernetes bằng Kubeadm trên CentOS 7
2019-04-24
Cách cài đặt và sử dụng ClickHouse trên CentOS 7
2019-04-15
Cách thu thập số liệu cơ sở hạ tầng với Metricbeat trên CentOS 7
2019-03-27
Các bước được đề xuất bổ sung cho server CentOS 7 mới
2019-02-20