SSH, hay secure shell, là một giao thức mã hóa được sử dụng để quản trị và giao tiếp với các máy chủ. Khi làm việc với máy chủ Ubuntu, có khả năng bạn sẽ dành phần lớn thời gian trong phiên làm việc terminal kết nối với máy chủ thông 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 cho cài đặt Ubuntu 20.04. SSH keys cung cấp một cách đăng nhập an toàn vào máy chủ và được khuyến nghị cho mọi người dùng.
Việc tạo một Droplet trên DataOnline sẽ cho phép bạn ngay lập tức thêm SSH keys của máy tính cá nhân, giúp kết nối một cách riêng tư và an toàn.
Bước 1 – Tạo cặp key
Bước đầu tiên là tạo một cặp key trên máy khách (thường là máy tính của bạn):
ssh-keygen
Theo mặc định, các phiên bản ssh-keygen mới sẽ tạo ra một cặp RSA 3072-bit, đủ an toàn cho hầu hết các trường hợp sử dụng (bạn có thể truyền vào tham số -b 4096
để tạo key có độ dài 4096-bit nếu muốn).
Sau khi nhập lệnh, bạn sẽ thấy thông báo sau:
Nếu trước đó bạn đã tạo cặp SSH key, bạn có thể thấy thông báo:
Nếu bạn chọn ghi đè key hiện có, bạn sẽ không thể xác thực bằng key cũ nữa. Hãy cẩn thận khi chọn “yes” vì quá trình này là phá hủy và không thể hoàn tác.
Tiếp theo, bạn sẽ được nhắc:
Sau đó, bạn sẽ thấy thông báo như sau:
Bây giờ, bạn đã có một cặp key Public và Private để xác thực. Bước tiếp theo là đưa Public key lên máy chủ để sử dụng phương pháp xác thực bằng SSH keys.
Bước 2 – Sao chép Public key lên máy chủ Ubuntu của bạn
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
. Vì sự đơn giản của nó, phương pháp này rất được khuyến nghị nếu tiện ích có sẵn. Nếu trên máy khách của bạn không có ssh-copy-id
, 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 mật khẩu hoặc sao chép thủ công key).
Sao chép Public key bằng ssh-copy-id
Tiện ích ssh-copy-id
thường được cài đặt sẵn trên nhiều hệ điều hành, vì vậy có khả năng nó đã có trên hệ thống 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 mật khẩu tới máy chủ.
Để sử dụng tiện ích, bạn chỉ cần chỉ định máy chủ từ xa mà bạn muốn kết nối và tài khoản người dùng mà bạn có quyền truy cập SSH dựa trên mật khẩu. Đây chính là tài khoản mà Public key của bạn sẽ được sao chép đến.
Cú pháp là:
ssh-copy-id username@remote_host
Bạn có thể thấy thông báo sau:
Điều này có nghĩa là máy tính của bạn chưa nhận diện được máy chủ từ xa. Đây là thông báo thường gặp khi bạn kết nối với một máy chủ mới lần đầu tiên. Gõ “yes” và nhấn ENTER để tiếp tục.
Tiếp theo, tiện ích sẽ quét tài khoản cục bộ của bạn để tìm key id_rsa.pub
mà bạn đã tạo. Khi tìm thấy, nó sẽ nhắc bạn nhập mật khẩu của tài khoản người dùng từ xa:
Nhập mật khẩu (lưu ý rằng mật khẩu của bạn sẽ không được hiển thị vì lý do bảo mật) và nhấn ENTER. Tiện ích sẽ kết nối tới tài khoản trên máy chủ từ xa sử dụng mật khẩu bạn đã cung cấp, sau đó sao chép nội dung của file ~/.ssh/id_rsa.pub
vào file authorized_keys
trong thư mục ~/.ssh/
của tài khoản từ xa.
Bạn sẽ thấy thông báo:
Bây giờ, thử đăng nhập vào máy chủ bằng lệnh:
và kiểm tra xem chỉ có các key bạn mong muốn được thêm vào hay không.
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 mật khẩu, bạn có thể tải key lên bằng phương pháp SSH thông thường. Bạn có thể sử dụng lệnh cat
để đọc nội dung của file Public key trên máy cục bộ và chuyển nó qua kết nối SSH tới máy chủ từ xa.
Trước tiên, hãy đảm bảo rằng thư mục ~/.ssh
trên tài khoản từ xa đã tồn tại và có quyền phù hợp. Sau đó, bạn sẽ chuyển nội dung đó vào file authorized_keys
trong thư mục đó. Sử dụng ký hiệu redirect >>
để thêm nội dung vào cuối file mà không ghi đè lên nội dung đã có.
Lệnh đầy đủ sẽ 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ể thấy thông báo:
Nhập “yes” và nhấn ENTER. Sau đó, bạn sẽ được nhắc nhập mật khẩu của tài khoản người dùng từ xa:
Nhập mật khẩu, và nội dung của file id_rsa.pub
sẽ được thêm vào cuối file authorized_keys
của tài khoản từ xa.
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, bạn sẽ phải thực hiện thủ công quá trình này.
Đầu tiên, hiển thị nội dung của file id_rsa.pub
bằng lệnh:
cat ~/.ssh/id_rsa.pub
Bạn sẽ thấy nội dung key, bắt đầu bằng
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
Sau đó, đăng nhập vào máy chủ từ xa theo cách bạn có thể (ví dụ: qua giao diện web hay một phương thức khác) và đảm bảo rằng thư mục ~/.ssh
tồn tại. Tạo thư mục nếu cần bằng lệnh:
mkdir -p ~/.ssh
Tiếp theo, thêm nội dung của Public key vào file authorized_keys
(tạo file nếu chưa có) bằng lệnh:
echo public_key_string >> ~/.ssh/authorized_keys
Trong lệnh trên, thay public_key_string
bằng nội dung mà bạn đã sao chép từ file ~/.ssh/id_rsa.pub
.
Cuối cùng, đảm bảo rằng thư mục ~/.ssh
và file authorized_keys
có quyền truy cập phù hợp:
chmod -R go= ~/.ssh
Nếu bạn đang sử dụng tài khoản root để thiết lập key cho tài khoản người dùng, hãy chắc chắn rằng thư mục ~/.ssh
thuộc về tài khoản người dùng đó, ví dụ:
chown -R sammy:sammy ~/.ssh
(Ở đây, tài khoản mẫu là “sammy”; bạn thay thế bằng tên tài khoản phù hợp.)
Bây giờ, bạn có thể thử đăng nhập mà không cần mật khẩu.
Bước 3 – Xác thực tới máy chủ Ubuntu bằng SSH keys
Nếu bạn đã hoàn thành thành công một trong các phương pháp ở trên, bạn sẽ có thể đăng nhập vào máy chủ từ xa mà không cần nhập mật khẩu của tài khoản.
Quá trình cơ bản vẫn là:
ssh username@remote_host
Nếu đây là lần đầu bạn kết nối tới máy chủ này (đặc biệt nếu sử dụng phương pháp sao chép thủ công), bạn có thể thấy thông báo:
Điều này có nghĩa là máy tính cục bộ của bạn chưa nhận diện được máy chủ từ xa. Hãy gõ “yes” và nhấn ENTER để tiếp tục.
Nếu bạn không cung cấp passphrase cho private key, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã cung cấp passphrase khi tạo private key, bạn sẽ được nhắc nhập passphrase ngay bây giờ (lưu ý rằng các phím bạn nhập sẽ không hiển thị trong phiên terminal vì lý do bảo mật). Sau khi xác thực, một phiên shell mới sẽ được mở với tài khoản đã được cấu hình trên máy chủ Ubuntu.
Nếu xác thực bằng key thành công, hãy tiếp tục để tìm hiểu cách tăng cường bảo mật hệ thống của bạn bằng cách vô hiệu hóa đăng nhập bằng mật khẩu.
Bước 4 – Vô hiệu hóa đăng nhập 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 của mình bằng SSH mà không cần mật khẩu, điều đó có nghĩa là bạn đã cấu hình thành công việc xác thực dựa trên SSH keys cho tài khoản của mình. Tuy nhiên, cơ chế xác thực dựa trên mật khẩu vẫn đang hoạt động, tức là máy chủ của bạn vẫn có thể 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 rằng bạn đã cấu hình xác thực dựa trên SSH keys cho tài khoản root trên máy chủ này, hoặc tốt hơn, đã cấu hình xác thực dựa trên SSH keys cho một tài khoản không phải root có quyền sudo. Bước này sẽ khóa đăng nhập bằng mật khẩu, vì vậy việc đảm bảo bạn vẫn có thể truy cập quyền quản trị là điều rất quan trọng.
Sau khi xác nhận 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 keys, dù là với tài khoản root hoặc tài khoản có quyền sudo. Sau đó, mở file cấu hình của SSH daemon:
sudo nano /etc/ssh/sshd_config
Trong file, tìm dòng có chỉ thị PasswordAuthentication
. Dòng này có thể bị chú thích bằng dấu #
ở đầu. Bỏ chú thích dòng này (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 sử dụng mật khẩu.
Ví dụ, trong file /etc/ssh/sshd_config
, bạn sẽ thấy:
Sau đó, lưu và đóng file (nhấn CTRL+X, sau đó Y để xác nhận lưu và nhấn ENTER để thoát). Để áp dụng thay đổi, khởi động lại dịch vụ sshd:
sudo systemctl restart ssh
Để đảm bảo mọi thứ hoạt động đúng, mở một cửa sổ terminal mới và thử đăng nhập:
ssh username@remote_host
Sau khi kiểm tra, bạn có thể đóng tất cả các phiên làm việc hiện tại. Máy chủ Ubuntu bây giờ chỉ chấp nhận đăng nhập bằng SSH keys, và đăng nhập bằng mật khẩu đã bị vô hiệu hóa.
Kết luận
Bây giờ, bạn đã cấu hình thành công xác thực dựa trên SSH keys trên máy chủ của mình, cho phép đăng nhập mà không cần nhập mật khẩu. 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 “SSH Essentials Guide”.