---
title: "Hướng dẫn kết nối máy chủ từ xa bằng SSH"
description: "Một công cụ quan trọng cần thành thạo với tư cách quản trị viên hệ thống là SSH. SSH, hay Secure Shell, là giao thức dùng để đăng nhập an toàn vào các hệ thống từ xa. Đây là cách phổ biến nhất để truy cập máy chủ Linux từ xa. Trong hướng dẫn này, chúng ta sẽ thảo luận cách sử dụng SSH để kết nối đến một hệ thống từ xa."
url: https://cloudfly.vn/huong-dan-ket-noi-may-chu-tu-xa-bang-ssh
image: https://media.cloudfly.vn/posts/huong-dan-cach-ket-noi-may-chu-tu-xa-bang-ssh.png
---

# Hướng dẫn kết nối máy chủ từ xa bằng SSH

![description image](https://media.cloudfly.vn/posts/huong-dan-cach-ket-noi-may-chu-tu-xa-bang-ssh.png)

## Bắt đầu nhanh: Cách SSH vào máy chủ từ xa trong 5 bước

1. **Mở terminal của bạn.**
   - Trên **Linux/macOS**: Khởi chạy ứng dụng Terminal.
   - Trên **Windows**: Sử dụng PowerShell, Git Bash, hoặc WSL.

2. **Chạy lệnh SSH:**

```bash
ssh username@your_server_ip
```

3. **Xem xét và chấp nhận dấu vân tay host** nếu được yêu cầu.

4. **Xác thực** bằng mật khẩu hoặc khóa SSH (nếu đã cấu hình).

5. **Bạn đã kết nối!**
   Gõ `exit` để đóng phiên SSH và trở về shell cục bộ.

![SSH login via Termius with welcome message](https://doimages.nyc3.cdn.digitaloceanspaces.com/008ArticleImages/ssh%20login%20welcome.png)
Kết nối SSH thành công sử dụng Termius, hiển thị màn hình chào mừng Ubuntu và dấu nhắc shell.

## SSH hoạt động như thế nào?

Để kết nối tới hệ thống từ xa bằng SSH, chúng ta sử dụng lệnh `ssh`.

Nếu bạn dùng Windows, cần cài phiên bản OpenSSH để chạy lệnh `ssh` từ terminal. Nếu thích PowerShell, bạn có thể theo tài liệu của Microsoft để thêm OpenSSH vào PowerShell. Nếu muốn một môi trường Linux đầy đủ, bạn có thể cài đặt WSL – Windows Subsystem for Linux, mặc định đã có `ssh`. Ngoài ra, bạn có thể dùng Git for Windows, tạo môi trường bash native trên Windows có sẵn lệnh `ssh`. Tất cả cách này được hỗ trợ tốt và chọn cách nào tuỳ thuộc sở thích.

Trên Mac hoặc Linux, lệnh `ssh` đã có sẵn trong terminal.

Cú pháp cơ bản nhất:

```bash
ssh remote_host
```

`remote_host` là địa chỉ IP hoặc tên miền bạn muốn kết nối.

Lệnh này giả định username trên máy từ xa giống với username trên máy cục bộ.

Nếu khác, bạn có thể chỉ định username theo cú pháp:

```bash
ssh remote_username@remote_host
```

Sau khi kết nối, bạn có thể được yêu cầu xác nhận bằng mật khẩu. Chúng ta sẽ trình bày cách tạo khóa để dùng thay cho mật khẩu sau.

Để thoát phiên ssh và trở về shell cục bộ, gõ:

```bash
exit
```

## SSH hoạt động như thế nào?

SSH hoạt động bằng cách kết nối chương trình client tới một **ssh server**, gọi là `sshd`.

Ở phần trước, `ssh` là chương trình client. **ssh server** đã chạy trên `remote_host` mà bạn chỉ định.

Hầu hết môi trường Linux đều tự động khởi động dịch vụ `sshd`. Nếu không chạy vì lý do nào đó, bạn cần truy cập tạm thời máy chủ qua console web hoặc console nối tiếp cục bộ.

Cách khởi động server ssh tuỳ vào bản phân phối Linux bạn dùng.

Trên Ubuntu, bạn có thể khởi động ssh server bằng lệnh:

```bash
sudo systemctl start ssh
```

Lệnh này sẽ khởi động `sshd` và bạn có thể đăng nhập từ xa.

## Cách cấu hình SSH

Khi thay đổi cấu hình SSH, bạn đang chỉnh sửa cài đặt cho server `sshd`.

Trên Ubuntu, file cấu hình chính của `sshd` nằm ở `/etc/ssh/sshd_config`.

Sao lưu bản hiện tại trước khi chỉnh sửa:

```bash
sudo cp /etc/ssh/sshd_config{,.bak}
```

Mở file bằng `nano` hoặc trình soạn thảo yêu thích:

```bash
sudo nano /etc/ssh/sshd_config
```

Bạn nên giữ nguyên phần lớn các tùy chọn trong file. Tuy nhiên, vài mục bạn có thể cần chú ý:

```bash
Port 22
```
Khai báo port xác định cổng mà `sshd` lắng nghe kết nối. Mặc định là `22`. Nên giữ nguyên trừ khi có lý do khác. Nếu thay đổi port, ta sẽ hướng dẫn cách kết nối với port mới sau.

```bash
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
```
Khai báo các file chìa khóa host toàn cục. Sau này ta sẽ giải thích host key là gì.

```bash
SyslogFacility AUTH
LogLevel INFO
```
Hai dòng này xác định mức độ ghi log.

Nếu gặp khó khăn với SSH, tăng mức độ log có thể giúp bạn phát hiện vấn đề.

```bash
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
```
Các tham số này liên quan đến thông tin đăng nhập.

- `LoginGraceTime` xác định số giây giữ kết nối mà chưa đăng nhập thành công.

- `PermitRootLogin` cho phép user **root** đăng nhập hay không.

- `StrictModes` là cơ chế bảo vệ, từ chối đăng nhập nếu các file xác thực có quyền truy cập quá rộng.

Trong đa số trường hợp, nên đổi `PermitRootLogin` thành `no` khi đã tạo user có quyền sudo để giảm nguy cơ bị tấn công trực tiếp bằng root.

```bash
X11Forwarding yes
X11DisplayOffset 10
```
Các tùy chọn này cấu hình tính năng gọi là **X11 Forwarding**, cho phép bạn xem giao diện đồ họa của hệ thống từ xa trên máy cục bộ.

Tùy chọn này phải được bật trên server và truyền cho client thông qua tùy chọn `-X` khi kết nối.

Sau khi sửa đổi, lưu và đóng file. Nếu dùng `nano`, nhấn `Ctrl+X`, sau đó `Y` rồi Enter.

Nếu bạn thay đổi cấu hình trong `/etc/ssh/sshd_config`, hãy tải lại `sshd` để áp dụng:

```bash
sudo systemctl reload ssh
```

Nên mở vài phiên terminal song song khi chỉnh sửa để kịp phục hồi cấu hình nếu bị khóa ngoài.

## Cách sử dụng ~/.ssh/config để quản lý nhiều kết nối SSH

Để đơn giản hóa truy cập nhiều server, tạo hoặc chỉnh sửa file `~/.ssh/config` như sau:

```bash
Host dev-server
    HostName 192.168.1.10
    User devuser
    Port 2222
    IdentityFile ~/.ssh/dev_key
```

Sau đó bạn có thể kết nối bằng cách:

```bash
ssh dev-server
```

Cách này hữu dụng khi bạn quản lý nhiều khóa SSH và các cổng không chuẩn.

## Cách đăng nhập SSH bằng khóa (SSH key)

Việc đăng nhập bằng mật khẩu vẫn tiện lợi, nhưng nhanh và an toàn hơn khi thiết lập **xác thực dựa trên khóa**.

## Xác thực bằng khóa SSH hoạt động như thế nào?

Xác thực bằng khóa tạo thành cặp gồm **khóa riêng tư** và **khóa công khai**.

Khóa riêng tư nằm trên máy client, được bảo mật tuyệt đối.

Khóa công khai có thể chia sẻ cho bất kỳ ai hoặc đặt trên server bạn muốn truy cập.

Khi bạn kết nối bằng cặp khóa, server dùng khóa công khai tạo thông điệp mà chỉ có khóa riêng tư client mới giải mã được.

Client gửi phản hồi tương ứng lại server, xác nhận tính hợp lệ.

Quá trình này diễn ra tự động sau khi bạn cấu hình khóa.

## Cách tạo SSH key

Khóa SSH nên được tạo trên máy bạn muốn đăng nhập **từ** (thường là máy local).

Gõ lệnh:

```bash
ssh-keygen -t rsa
```

Bạn có thể được yêu cầu đặt mật khẩu cho khóa, nhưng đây không phổ biến, bạn có thể nhấn enter để dùng mặc định. Khóa sẽ được tạo ở `~/.ssh/id_rsa.pub` (khóa công khai) và `~/.ssh/id_rsa` (khóa riêng).

Chuyển vào thư mục `.ssh` bằng lệnh:

```bash
cd ~/.ssh
```

Xem quyền hạn file:

```bash
ls -l
```

Bạn sẽ thấy khóa riêng `id_rsa` chỉ đọc và ghi được bởi chủ sở hữu để bảo mật, trong khi `id_rsa.pub` có thể chia sẻ.

## Cách chuyển khóa công khai (public key) lên máy chủ

Nếu bạn vẫn có quyền truy cập server bằng mật khẩu, bạn có thể sao chép khóa công khai tới server với lệnh:

```bash
ssh-copy-id remote_host
```

Lệnh này sẽ mở phiên SSH, sau khi nhập mật khẩu, khóa công khai sẽ được thêm vào file authorized_keys của server giúp bạn đăng nhập không cần mật khẩu sau này.

## Tùy chọn phía máy khách (client)

Có nhiều tùy chọn không bắt buộc bạn có thể dùng khi kết nối SSH.

Một số cần thiết để đồng bộ với cấu hình `sshd` trên máy chủ.

Ví dụ, nếu thay đổi port trên server, bạn cần chỉ định port đó khi kết nối:

```bash
ssh -p port_number remote_host
```

> **Lưu ý:** Thay đổi port SSH là một cách đơn giản để tăng an toàn bằng cách làm khó phát hiện (security through obscurity). Nếu bạn để mở cổng mặc định 22 với xác thực bằng mật khẩu, rất dễ bị tấn công tự động. Chỉ dùng khóa SSH và thay port không chuẩn giúp giảm thiểu nguy cơ này.

Nếu bạn chỉ muốn chạy lệnh đơn trên máy từ xa, có thể chỉ định lệnh sau host:

```bash
ssh remote_host command_to_run
```

Bạn sẽ kết nối, xác thực rồi lệnh sẽ được thực hiện.

Nếu X11 forwarding được bật và cấu hình đúng, bạn có thể dùng:

```bash
ssh -X remote_host
```

Chương trình GUI trên remote sẽ hiển thị cửa sổ trên máy local nếu bạn có công cụ phù hợp.

## Các lỗi SSH thường gặp và cách khắc phục

| Lỗi                       | Nguyên nhân có thể                                  | Giải pháp khuyến nghị                                   |
|---------------------------|----------------------------------------------------|--------------------------------------------------------|
| SSH Connection Refused     | Dịch vụ SSH (`sshd`) không chạy hoặc port bị chặn | Khởi động SSH: `sudo systemctl start ssh`; kiểm tra firewall |
| Permission Denied (Publickey) | Quyền file sai hoặc thiếu khóa công khai           | Sửa quyền: `chmod 700 ~/.ssh`, `chmod 600 ~/.ssh/authorized_keys` |
| SSH Timeout or Hang        | Vấn đề DNS, host không liên lạc được hoặc port bị chặn | Dùng debug chi tiết: `ssh -vvv user@host`; kiểm tra mạng/firewall |

## Các lỗi SSH nâng cao và mẹo xử lý sự cố

| Lỗi                          | Nguyên nhân có thể                                      | Giải pháp nâng cao                                                |
|------------------------------|--------------------------------------------------------|-----------------------------------------------------------------|
| Host key verification failed | Không khớp file `known_hosts` do đổi IP hoặc host      | Xoá key cũ: `ssh-keygen -R server_ip`; hoặc chỉnh sửa `~/.ssh/known_hosts` thủ công |
| Too many authentication failures | SSH agent thử quá nhiều khóa                              | Ép dùng key xác định: `ssh -o IdentitiesOnly=yes -i ~/.ssh/id_rsa user@host` |
| Connection closed by remote host | Timeout không hoạt động hoặc cấu hình giới hạn trên server | Kiểm tra `sshd_config` các mục `ClientAliveInterval`, `MaxAuthTries`, hoặc giới hạn đăng nhập |
| Bad owner or permissions on .ssh | Quyền file quá rộng, gây rủi ro bảo mật                | Đảm bảo: `chmod 700 ~/.ssh`, `chmod 600 ~/.ssh/id_rsa`, `chmod 644 ~/.ssh/id_rsa.pub` |
| Cannot resolve hostname       | Lỗi gõ hostname hoặc DNS bị thất bại                    | Kiểm tra DNS, sửa lỗi gõ, hoặc sửa `/etc/hosts` cho phân giải tĩnh |
| Authentication refused: no methods available | Cả xác thực mật khẩu và khóa đều bị vô hiệu trên server | Đảm bảo khóa đã cài hoặc bật một phương thức trong `/etc/ssh/sshd_config` |

## Vô hiệu hóa xác thực bằng mật khẩu

Nếu bạn đã tạo khóa SSH, có thể nâng cao bảo mật server bằng cách vô hiệu hoá xác thực bằng mật khẩu. Ngoài console, chỉ có thể đăng nhập bằng khóa riêng khớp với khóa công khai trên server.

> **Cảnh báo:** Trước khi làm bước này, chắc chắn đã cài đặt khóa công khai trên server. Nếu không, bạn sẽ bị khóa ngoài!

Dùng quyền root hoặc user có sudo, mở file cấu hình `sshd`:

```bash
sudo nano /etc/ssh/sshd_config
```

Tìm dòng `PasswordAuthentication`, bỏ dấu `#` ở đầu và đổi giá trị thành `no`:

```bash
PasswordAuthentication no
```

Hai tùy chọn khác thường không cần thay đổi:

```bash
PubkeyAuthentication yes
ChallengeResponseAuthentication no
```

Lưu và đóng file.

Tải lại SSH daemon:

```bash
sudo systemctl reload ssh
```

Xác thực bằng mật khẩu giờ bị tắt, server chỉ cho phép đăng nhập qua khóa SSH.

## Danh sách các thực hành bảo mật SSH tốt nhất

- Vô hiệu hoá xác thực bằng mật khẩu (`PasswordAuthentication no`)
- Đổi cổng mặc định từ 22 sang cổng khác
- Dùng khóa SSH thay cho mật khẩu
- Đặt `PermitRootLogin no`
- Bật cập nhật bảo mật tự động
- Giới hạn truy cập SSH qua firewall (ví dụ UFW hoặc firewalld)

## Cách sử dụng SSH trên Windows, Linux và macOS

**Windows:**
Sử dụng PowerShell, Git Bash hoặc WSL để truy cập SSH.
Ví dụ:

```bash
ssh user@server_ip
```

**macOS/Linux:**
Dùng terminal tích hợp và lệnh tương tự.
Tạo khóa qua:

```bash
ssh-keygen
```

## Câu hỏi thường gặp (FAQs)

**Q: SSH dùng để làm gì?**

SSH hay Secure Shell chủ yếu dùng để đăng nhập an toàn vào các hệ thống từ xa, thường là máy chủ Linux. Nó tạo kênh mã hóa qua mạng không an toàn, cho phép bạn thực thi lệnh, chuyển tập tin và quản lý hạ tầng một cách bảo mật. SSH rất quan trọng với quản trị viên, nhà phát triển và đội DevOps để truy cập máy ảo từ xa, tự động hoá tác vụ, cũng như chuyển tiếp cổng hoặc tạo kết nối tunel an toàn.

**Q: Làm sao tạo khóa SSH?**

Dùng tiện ích `ssh-keygen` tạo cặp khóa công khai - riêng tư. Bạn có thể dùng lệnh `ssh-keygen -t rsa -b 4096` tạo khóa RSA mạnh. Khóa riêng lưu trên máy local (`~/.ssh/id_rsa`), khóa công khai (`id_rsa.pub`) mang lên server. Khi kết nối, server dùng khóa công khai xác minh bạn mà không gửi mật khẩu. Xác thực bằng khóa vừa bảo mật vừa tiện lợi.

**Q: Lỗi “Permission denied” trong SSH nghĩa là gì?**

Lỗi này thường do thất bại trong xác thực. Có thể là username sai, quyền truy cập thư mục `.ssh` hoặc file khoá không đúng, hoặc khóa công khai không có trên server. `.ssh` nên có quyền 700, khóa riêng tư 600. SSH cũng có thể chặn xác thực mật khẩu hoặc đăng nhập root tuỳ cấu hình `sshd_config`.

**Q: SSH có an toàn không?**

Có, SSH được xem là phương thức truy cập từ xa an toàn hàng đầu. Nó dùng mã hóa bất đối xứng và thuật toán hiện đại đảm bảo tính bí mật và toàn vẹn dữ liệu. Bạn có thể tăng cường bảo mật bằng cách tắt xác thực mật khẩu, dùng cặp khóa, thay cổng mặc định, bật xác thực hai yếu tố (2FA), hoặc dùng công cụ như Fail2Ban chống tấn công brute-force. Thường xuyên cập nhật server và kiểm tra nhật ký cũng giúp giảm thiểu rủi ro.

**Q: Tôi có thể dùng SSH trên Windows không?**

Chắc chắn rồi. Windows hỗ trợ SSH natively qua PowerShell và OpenSSH, nhất là từ Windows 10 trở đi. Bạn cũng có thể dùng Git Bash có sẵn client SSH hoặc cài WSL cho môi trường Linux đầy đủ. Các thao tác tạo khóa và cấu hình tương tự như trên Linux/macOS, biến Windows thành nền tảng hiệu quả để quản lý hệ thống từ xa qua SSH.

## Kết luận

Việc thành thạo SSH sẽ rất có lợi cho các công việc điện toán đám mây trong tương lai của bạn. Khi sử dụng các tùy chọn khác nhau, bạn sẽ phát hiện các tính năng nâng cao giúp công việc dễ dàng hơn. SSH luôn phổ biến vì nó an toàn, nhẹ nhàng và hữu ích trong nhiều tình huống khác nhau.
## CloudFly đơn vị tiên phong tại Việt Nam cung cấp dịch vụ Cloud Server và Cloud Hosting tùy chỉnh cấu hình
CLOUDFLY tự hào là đơn vị tiên phong tại Việt Nam cung cấp dịch vụ [Cloud Server,](https://cloudfly.vn/cloud-server) Cloud Hosting tùy chỉnh cấu hình. Chúng tôi nhận được sự tin tưởng và hợp tác với hơn 15.000 khách hàng trong và ngoài nước. Sẵn sàng đồng hành và đem lại những giải pháp tối ưu nhất cho bạn.
Nếu quý khách hàng gặp khó khăn hay có bất kì thắc mắc nào. Hãy liên hệ theo thông tin bên dưới.
CloudFly - Đơn giản hóa ứng dụng trên đám mây
HOTLINE: 0904.558.448

WEBSITE: [https://cloudfly.vn/](https://https://cloudfly.vn/)

FACEBOOK: [https://www.facebook.com/cloudfly.vn](https://https://www.facebook.com/cloudfly.vn)

TELEGRAM CHANNELS: [https://t.me/cloudflyvn](https://https://t.me/cloudflyvn)
