Một công cụ thiết yếu mà bất kỳ quản trị viên hệ thống nào cũng cần phải làm chủ là SSH, nhưng Cách sử dụng SSH không phải ai cũng biết. SSH (Secure Shell) là một giao thức dùng để đăng nhập từ xa một cách bảo mật. Đây là cách phổ biến nhất để truy cập vào các máy chủ Linux từ xa. Trong hướng dẫn này, chúng ta sẽ thảo luận về cách sử dụng SSH để kết nối đến một hệ thống một cách dễ dàng.
Cú pháp cơ bản, hướng dẫn cách sử dụng SSH
Để kết nối với một hệ thống từ xa sử dụng SSH, chúng ta sẽ dùng lệnh ssh
.
Nếu bạn đang sử dụng Windows, bạn sẽ cần cài đặt phiên bản của OpenSSH để có thể sử dụng lệnh ssh
từ terminal. Nếu bạn thích làm việc trên PowerShell, bạn có thể tham khảo tài liệu của Microsoft để thêm OpenSSH vào PowerShell. Nếu bạn muốn có một môi trường Linux đầy đủ, bạn có thể cài đặt WSL (Windows Subsystem for Linux), vốn đã bao gồm sẵn lệnh ssh
theo mặc định. Cuối cùng, như một lựa chọn nhẹ nhàng, bạn có thể cài đặt Git for Windows, cung cấp cho bạn một terminal bash nguyên bản trên Windows có tích hợp lệnh ssh
. Tất cả các lựa chọn này đều được hỗ trợ tốt, và việc lựa chọn tùy thuộc vào sở thích cá nhân của bạn.
Nếu bạn đang sử dụng Mac hoặc Linux, bạn đã có sẵn lệnh ssh
trong terminal của mình.
Dạng lệnh đơn giản nhất là:
ssh remote_host
Trong ví dụ trên, remote_host
là địa chỉ IP hoặc tên miền mà bạn đang cố gắng kết nối tới.
Lệnh trên giả định rằng tên người dùng của bạn trên hệ thống từ xa giống với tên người dùng trên máy cục bộ của bạn.
Nếu tên người dùng của bạn khác trên hệ thống từ xa, bạn có thể chỉ định theo cú pháp:
ssh remote_username@remote_host
Khi bạn đã kết nối tới máy chủ, có thể bạn sẽ được yêu cầu xác thực danh tính bằng cách cung cấp mật khẩu. Sau này, chúng ta sẽ cùng tìm hiểu cách tạo khóa để sử dụng thay cho mật khẩu.
Để thoát khỏi phiên SSH và trở về terminal cục bộ, gõ:
exit
SSH hoạt động như thế nào?
SSH hoạt động bằng cách kết nối một chương trình khách (client) tới một máy chủ SSH, được gọi là sshd
.
Trong phần trước, ssh
là chương trình khách. Máy chủ SSH (sshd
) đã được chạy trên remote_host
mà bạn đã chỉ định.
Trên hầu hết các hệ thống Linux, máy chủ sshd
sẽ tự động khởi động. Nếu vì lý do nào đó mà nó không chạy, bạn có thể cần truy cập tạm thời vào máy chủ thông qua một console dựa trên web hoặc cổng điều khiển nối tiếp (serial console).
Quá trình khởi động máy chủ SSH phụ thuộc vào bản phân phối Linux mà bạn đang sử dụng.
Trên Ubuntu, bạn có thể khởi động máy chủ SSH bằng cách gõ:
sudo systemctl start ssh
Lệnh này sẽ khởi động máy chủ sshd
, sau đó bạn có thể đăng nhập từ xa.
Cách cấu hình SSH
Khi bạn thay đổi cấu hình của SSH, bạn cũng đang thay đổi các thiết lập cho máy chủ sshd
.
Trên Ubuntu, tệp cấu hình chính của sshd
nằm tại /etc/ssh/sshd_config
.
Sao lưu phiên bản hiện tại của tệp này trước khi chỉnh sửa:
sudo cp /etc/ssh/sshd_config{,.bak}
Mở tệp bằng nano hoặc trình soạn thảo ưa thích của bạn:
sudo nano /etc/ssh/sshd_config
Bạn có thể giữ nguyên hầu hết các tùy chọn trong tệp này. Tuy nhiên, có một vài mục mà bạn có thể muốn chú ý:
Port 22
Khai báo port xác định cổng mà máy chủ sshd
sẽ lắng nghe các kết nối. Mặc định, đây là cổng 22. Bạn nên giữ nguyên cài đặt này trừ khi có lý do đặc biệt để thay đổi. Nếu bạn thay đổi cổng, sau này chúng ta sẽ hướng dẫn cách kết nối tới cổng mới.
/etc/ssh/sshd_config HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key
Các khai báo host key chỉ định vị trí các khóa host toàn cục. Chúng ta sẽ cùng tìm hiểu về khái niệm host key ở phần sau.
/etc/ssh/sshd_config SyslogFacility AUTH LogLevel INFO
Hai mục này chỉ định mức độ ghi log mà hệ thống sẽ thực hiện.
Nếu bạn gặp khó khăn với SSH, tăng mức ghi log có thể là cách tốt để tìm ra nguyên nhân của vấn đề.
/etc/ssh/sshd_config LoginGraceTime 120 PermitRootLogin yes StrictModes yes
Các tham số trên chỉ định một số thiết lập liên quan đến đăng nhập.
- LoginGraceTime: Xác định số giây mà kết nối sẽ được giữ khi chưa đăng nhập thành công. Bạn có thể đặt giá trị này cao hơn một chút so với thời gian đăng nhập thông thường của bạn.
- PermitRootLogin: Quyết định xem người dùng root có được phép đăng nhập hay không. Trong hầu hết các trường hợp, bạn nên đặt giá trị này thành
no
khi bạn đã tạo một tài khoản người dùng với quyền sudo hoặc su, nhằm giảm thiểu rủi ro bị truy cập trái phép dưới quyền root. - StrictModes: Đây là cơ chế an toàn, từ chối nỗ lực đăng nhập nếu các tệp xác thực có quyền truy cập không đúng (ví dụ: có thể đọc được bởi tất cả mọi người).
/etc/ssh/sshd_config X11Forwarding yes X11DisplayOffset 10
Các tham số này cấu hình tính năng X11 Forwarding, cho phép bạn xem giao diện đồ họa (GUI) của hệ thống từ xa trên máy cục bộ.
Tùy chọn này phải được kích hoạt trên máy chủ và phải được yêu cầu bởi SSH client thông qua tùy chọn -X
.
Sau khi thực hiện các thay đổi, hãy lưu và đóng tệp. Nếu bạn sử dụng nano, nhấn Ctrl+X
, sau đó nhấn Y
khi được hỏi và nhấn Enter.
Nếu bạn thay đổi bất kỳ cài đặt nào trong /etc/ssh/sshd_config
, hãy chắc chắn tải lại máy chủ sshd
để áp dụng thay đổi:
sudo systemctl reload ssh
Bạn nên kiểm tra kỹ các thay đổi để đảm bảo chúng hoạt động như mong đợi.
Có thể là ý hay khi mở vài phiên terminal khác trong lúc thay đổi, nhằm có thể khôi phục cấu hình nếu cần thiết mà không làm mất quyền truy cập.
Cách đăng nhập SSH bằng khóa
Mặc dù đăng nhập vào hệ thống từ xa bằng mật khẩu có thể tiện lợi, nhưng việc thiết lập xác thực bằng khóa sẽ nhanh hơn và an toàn hơn.
Xác thực dựa trên khóa hoạt động như thế nào?
Xác thực dựa trên khóa hoạt động thông qua việc tạo ra một cặp khóa: một khóa riêng (private key) và một khóa công khai (public key).
- Khóa riêng (Private Key) được lưu trên máy của người dùng và phải được bảo mật, giữ kín tuyệt đối.
- Khóa công khai (Public Key) có thể được chia sẻ với bất kỳ ai hoặc được cài đặt trên bất kỳ máy chủ nào mà bạn muốn truy cập.
Khi bạn cố gắng kết nối bằng cặp khóa, máy chủ sẽ dùng khóa công khai để tạo ra một thông điệp dành cho máy khách, thông điệp này chỉ có thể được giải mã bằng khóa riêng tương ứng.
Máy khách sau đó gửi phản hồi thích hợp trở lại máy chủ, xác nhận rằng máy khách là hợp lệ.
Quá trình này được thực hiện tự động sau khi bạn cấu hình các khóa của mình.
Cách tạo khóa SSH
Các khóa SSH nên được tạo trên máy tính mà bạn dự định đăng nhập từ đó – thường là máy cục bộ của bạn.
Nhập lệnh sau vào terminal:
ssh-keygen -t rsa
Bạn có thể được yêu cầu đặt mật khẩu cho các tệp khóa, nhưng đây không phải là thực hành phổ biến, nên bạn chỉ cần nhấn Enter để chấp nhận các giá trị mặc định. Các khóa của bạn sẽ được tạo tại ~/.ssh/id_rsa.pub
và ~/.ssh/id_rsa
.
Chuyển đến thư mục .ssh
bằng cách gõ:
cd ~/.ssh
Kiểm tra quyền truy cập của các tệp:
ls -l
Output:
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
Như bạn có thể thấy, tệp id_rsa
chỉ có quyền đọc và ghi dành cho chủ sở hữu, giúp giữ bí mật của nó.
Ngược lại, tệp id_rsa.pub
có thể được chia sẻ và có quyền truy cập phù hợp cho hoạt động này.
Cách chuyển Public Key của bạn lên máy chủ
Nếu bạn hiện đang truy cập máy chủ bằng mật khẩu, bạn có thể sao chép khóa công khai của mình lên máy chủ bằng cách thực hiện lệnh:
ssh-copy-id remote_host
Lệnh này sẽ khởi động một phiên SSH. Sau khi bạn nhập mật khẩu, khóa công khai của bạn sẽ được sao chép vào tệp authorized_keys
trên máy chủ, cho phép bạn đăng nhập không cần mật khẩu trong lần sau.
Tùy chọn dành cho Client
Có một số cờ tùy chọn bạn có thể cung cấp khi kết nối qua SSH. Một số trong số đó có thể cần thiết để khớp với các cài đặt trong cấu hình sshd
của máy chủ từ xa. Ví dụ, nếu bạn đã thay đổi số cổng trong cấu hình sshd
, bạn cần chỉ định cổng đó ở phía khách bằng cách gõ:
ssh -p port_number remote_host
Lưu ý: Thay đổi cổng SSH là một cách hợp lý để tăng cường bảo mật thông qua việc “giấu” cổng mặc định. Nếu bạn cho phép kết nối SSH tới máy chủ phổ biến trên cổng 22 và bật xác thực bằng mật khẩu, rất có thể máy chủ của bạn sẽ bị tấn công tự động. Việc chỉ sử dụng xác thực bằng khóa và chạy SSH trên một cổng không chuẩn có thể không phải là giải pháp bảo mật hoàn hảo nhất, nhưng bạn nên giảm thiểu các thiết lập không cần thiết.
Nếu bạn chỉ muốn thực thi một lệnh đơn trên máy chủ từ xa, bạn có thể chỉ định nó ngay sau tên máy chủ:
ssh remote_host command_to_run
Lệnh trên sẽ kết nối tới máy chủ từ xa, thực hiện xác thực và chạy lệnh được chỉ định.
Như đã đề cập, nếu X11 forwarding được kích hoạt trên cả hai máy, bạn có thể truy cập tính năng này bằng cách gõ:
ssh -X remote_host
Với điều kiện bạn đã cài đặt đủ các công cụ cần thiết, các chương trình GUI trên máy chủ từ xa sẽ mở cửa sổ trên máy cục bộ của bạn.
Vô hiệu hóa xác thực mật khẩu
Nếu bạn đã tạo khóa SSH, bạn có thể tăng cường bảo mật cho máy chủ bằng cách vô hiệu hóa xác thực chỉ qua mật khẩu. Sau bước này, ngoại trừ console, cách duy nhất để đăng nhập vào máy chủ sẽ là qua khóa riêng tương ứng với khóa công khai mà bạn đã cài đặt.
Lưu ý: Trước khi tiến hành bước này, hãy chắc chắn rằng bạn đã cài đặt khóa công khai lên máy chủ. Nếu không, bạn sẽ không thể đăng nhập được!
Với quyền root hoặc quyền sudo, mở tệp cấu hình sshd
:
sudo nano /etc/ssh/sshd_config
Tìm dòng có nội dung Password Authentication và bỏ dấu #
ở đầu dòng để bỏ comment. Sau đó, thay đổi giá trị của nó thành no
:
/etc/ssh/sshd_config PasswordAuthentication no
Hai cài đặt nữa không cần thay đổi (với điều kiện bạn chưa chỉnh sửa tệp này trước đó) là PubkeyAuthentication và ChallengeResponseAuthentication. Chúng được đặt theo mặc định như sau:
/etc/ssh/sshd_config PubkeyAuthentication yes ChallengeResponseAuthentication no
Sau khi thực hiện các thay đổi, hãy lưu và đóng tệp.
Bây giờ, tải lại daemon SSH:
sudo systemctl reload ssh
Xác thực bằng mật khẩu bây giờ đã bị vô hiệu hóa, và máy chủ của bạn chỉ có thể truy cập thông qua xác thực bằng khóa SSH.
Kết luận
Việc làm quen và nắm vững SSH sẽ mang lại lợi ích to lớn cho bất kỳ dự án điện toán đám mây nào trong tương lai của bạn. Khi bạn sử dụng các tùy chọn khác nhau, bạn sẽ khám phá ra nhiều tính năng nâng cao giúp công việc trở nên dễ dàng hơn. SSH vẫn luôn được ưa chuộng vì tính bảo mật, sự nhẹ nhàng và khả năng ứng dụng đa dạng trong nhiều tình huống.