SSH là một giao thức mạng an toàn, cho phép người dùng giao tiếp và quản lý máy chủ từ xa thông qua một kênh truyền được mã hóa hoàn toàn. Bài viết này mình sẽ giúp bạn hiểu rõ hơn về bản chất của SSH, cách thức hoạt động, các phương thức xác thực, ứng dụng thực tế và cách bắt đầu sử dụng công cụ thiết yếu này.
Các điểm chính
- Khái niệm SSH: Là một giao thức mạng an toàn, được xây dựng dựa trên ba trụ cột gồm bảo mật, toàn vẹn và xác thực.
- Cách thức hoạt động của SSH: SSH hoạt động theo mô hình Client-Server. Khi kết nối, client và server sẽ thương lượng thuật toán mã hóa và tạo ra một khóa chung để mã hóa toàn bộ phiên làm việc, đảm bảo an toàn cho dữ liệu truyền tải.
- Các kỹ thuật mã hóa trong SSH: SSH kết hợp ba kỹ thuật mã hóa chính gồm mã hóa đối xứng, mã hóa bất đối xứng và mã hóa hàm băm.
- Các phương thức xác thực: Bằng mật khẩu và bằng khóa SSH.
- Cổng mặc định và lưu ý bảo mật: SSH sử dụng cổng mặc định là 22, đây là mục tiêu phổ biến của các cuộc tấn công tự động. Việc thay đổi cổng này sang một số khác là một biện pháp bảo mật cơ bản nhưng hiệu quả.
- Ứng dụng phổ biến của SSH: SSH là công cụ không thể thiếu để truy cập và quản lý máy chủ/VPS từ xa, truyền tải tệp tin một cách an toàn (qua SFTP/SCP), và quản lý các dịch vụ hosting một cách chuyên nghiệp.
- Sử dụng SSH với công cụ và kết nối cơ bản: Để bắt đầu, bạn cần một công cụ SSH client, thông tin kết nối và sử dụng lệnh ssh với cú pháp đơn giản để thiết lập kết nối.
- Giải đáp các thắc mắc thường gặp khi sử dụng SSH.
SSH là gì?
SSH viết tắt của Secure Shell hay Secure Socket Shell, là một giao thức mạng cho phép người dùng giao tiếp và quản lý một máy chủ từ xa một cách an toàn trong môi trường internet không bảo mật. SSH tạo ra một kênh giao tiếp được mã hóa, bảo vệ toàn bộ phiên làm việc của bạn.
Trước đây, các giao thức cũ như Telnet thực hiện việc này bằng cách gửi đi dữ liệu ở dạng văn bản thuần, cực kỳ nguy hiểm và dễ bị nghe lén. Để giải quyết vấn đề này, SSH đã ra đời như một vỏ bọc an toàn cho các kết nối từ xa, tạo ra một đường hầm được mã hóa và xác thực chặt chẽ, đảm bảo chỉ bạn và máy chủ mới có thể giao tiếp với nhau.

Giao thức SSH được Tatu Ylönen phát triển vào năm 1995 như một sự thay thế an toàn cho các giao thức tiền nhiệm không được mã hóa như Telnet và rlogin. Vai trò chính của SSH được xây dựng trên ba trụ cột cốt lõi:
- Bảo mật: Mã hóa toàn bộ dữ liệu truyền đi, từ mật khẩu cho đến từng lệnh bạn gõ. Điều này ngăn chặn kẻ xấu nghe lén thông tin.
- Toàn vẹn: Đảm bảo dữ liệu không bị thay đổi hay can thiệp trên đường truyền.
- Xác thực: Kiểm tra và xác minh danh tính của cả người dùng và máy chủ, đảm bảo bạn đang kết nối đến đúng nơi và chỉ người có quyền mới được truy cập.
Cơ chế hoạt động của SSH
SSH hoạt động theo mô hình Client-Server. Máy tính bạn đang dùng được gọi là SSH Client và máy chủ bạn muốn kết nối đến là SSH Server. Khi Client gửi yêu cầu kết nối, một quy trình bảo mật phức tạp sẽ diễn ra để đảm bảo an toàn.
Mô hình client-server và mã hóa
Ngay khi kết nối bắt đầu, Client và Server sẽ thương lượng để thống nhất một thuật toán mã hóa chung. Kể từ thời điểm đó, mọi dữ liệu trao đổi giữa hai bên đều được mã hóa thành những chuỗi ký tự vô nghĩa. Chỉ có Client và Server, với bộ khóa đã thống nhất, mới có thể giải mã và đọc được nội dung gốc.

Quy trình mã hóa SSH như sau:
- Đồng thuận Seed Value: Client và Server thống nhất một seed value ban đầu.
- Tạo Khóa Riêng: Cả hai bên đều tạo khóa riêng (private key) của mình.
- Trao đổi Khóa Công Khai: Từ khóa riêng và seed value, mỗi bên sinh ra khóa công khai (public key) và trao đổi cho nhau.
- Tạo Khóa Chung: Cả Client và Server đều kết hợp khóa riêng của mình với khóa công khai nhận được từ đối tác để tạo ra một khóa chung (shared key) duy nhất.
- Mã hóa Đối xứng: Sau khi có khóa chung, toàn bộ dữ liệu trao đổi trong suốt phiên làm việc sẽ được mã hóa bằng thuật toán đối xứng, đảm bảo an toàn tuyệt đối
Các kỹ thuật mã hóa trong SSH
Các kỹ thuật mã hóa trong SSH gồm ba thành phần chính:
- Mã hóa đối xứng (Symmetric Encryption): Loại mã hóa này sử dụng một khóa bí mật chung cho cả client và server để mã hóa và giải mã dữ liệu truyền tải trong phiên SSH. Các thuật toán phổ biến cho mã hóa đối xứng trong SSH bao gồm AES, Blowfish, 3DES, CAST128, Arcfour….
- Mã hóa không đối xứng (Asymmetric Encryption): Kỹ thuật này sử dụng một cặp khóa public và private, thường kết hợp các thuật toán như RSA, ECDSA, Ed25519. Bên gửi sẽ mã hóa dữ liệu bằng public key của bên nhận, và chỉ bên nhận mới có private key để giải mã, giúp bảo vệ quá trình trao đổi khóa qua mạng không an toàn.
- Mã hóa hàm băm (Hashing): Hashing được dùng để kiểm tra toàn vẹn dữ liệu, xác thực và chống thay đổi nội dung trong quá trình truyền. Dữ liệu đầu vào được biến đổi thành một chuỗi băm cố định, không thể đảo ngược về dữ liệu gốc, đảm bảo bảo mật cho quá trình truyền thông tin giữa client và server.
SSH phối hợp linh hoạt ba kỹ thuật này để thiết lập và duy trì một phiên kết nối bảo mật, đảm bảo mọi dữ liệu truyền giữa client và server đều được bảo vệ khỏi nguy cơ nghe lén hoặc sửa đổi bất hợp pháp.

Các phương thức xác thực
Đây là bước kiểm tra bạn là ai trước khi cho phép truy cập vào hệ thống. SSH hỗ trợ hai phương thức xác thực chính:
- Xác thực bằng mật khẩu: Đây là cách đơn giản nhất. Bạn chỉ cần cung cấp tên người dùng và mật khẩu. Tuy nhiên, phương pháp này tiềm ẩn rủi ro bị tấn công Brute-force, kỹ thuật dò mật khẩu liên tục cho đến khi tìm ra mật khẩu đúng.
- Xác thực bằng Khóa SSH: Đây là một phương thức xác thực an toàn và được khuyến nghị hơn, thông qua việc dùng một cặp khóa: khóa riêng tư (private key) được lưu trữ an toàn trên máy tính của bạn và khóa công khai (public key) được đặt trên máy chủ. Khi bạn kết nối, máy chủ sẽ sử dụng khóa công khai để xác minh “chữ ký số” được tạo bởi khóa riêng tư của bạn, nếu khớp, kết nối sẽ được thiết lập mà không cần mật khẩu.

Cổng mặc định và lưu ý bảo mật
SSH mặc định sử dụng cổng 22, đây là cổng phổ biến và thường là mục tiêu của các cuộc tấn công tự động. Tin tặc và bot tự động luôn quét cổng 22 trên khắp Internet để tìm kiếm máy chủ có mật khẩu yếu. Một mẹo nhỏ nhưng hiệu quả là bạn có thể đổi cổng SSH mặc định sang một số khác (ví dụ: 2222, 3456), việc này giúp bạn tránh khỏi phần lớn các cuộc tấn công thiếu tinh vi này.

Ứng dụng phổ biến của SSH
SSH là công cụ không thể thiếu trong công việc của lập trình viên, quản trị viên hệ thống và nhiều vị trí kỹ thuật khác.
- Truy cập và quản lý máy chủ/VPS từ xa: Đây là ứng dụng chính để bạn có thể thực hiện mọi tác vụ quản trị như cài đặt phần mềm, cập nhật hệ thống, xem file log, khởi động lại dịch vụ,… thông qua giao diện dòng lệnh.
- Truyền tải tập tin an toàn (SFTP/SCP): SFTP hay SSH File Transfer Protocol là phiên bản an toàn của giao thức FTP, chạy trên nền tảng của SSH. Đây là cách an toàn và đáng tin cậy để tải lên hoặc tải xuống các tập tin từ máy chủ.
- Quản lý Hosting/VPS: Hầu hết các nhà cung cấp dịch vụ lưu trữ uy tín đều cung cấp quyền truy cập SSH, cho phép người dùng toàn quyền kiểm soát môi trường của mình một cách chuyên nghiệp.

Để có thể học và ứng dụng SSH hiệu quả, việc sở hữu một môi trường máy chủ riêng là điều cần thiết. Trong đó, lựa chọn một nhà cung cấp VPS uy tín, ổn định và hỗ trợ đầy đủ SSH là bước khởi đầu quan trọng. Vietnix cung cấp dịch vụ VPS/Server có quyền truy cập SSH không giới hạn, giúp người dùng dễ dàng triển khai dự án và quản lý hệ thống một cách chuyên nghiệp.
Bắt đầu sử dụng SSH với công cụ và kết nối cơ bản
Công cụ SSH client
- Windows: Bạn có thể dùng PuTTY hoặc sử dụng Windows Terminal / PowerShell vì OpenSSH đã được tích hợp sẵn trên các phiên bản Windows 10/11 gần đây.
- macOS / Linux: Sử dụng ứng dụng Terminal có sẵn và bạn không cần cài đặt gì thêm.

Thông tin cần có để kết nối
- Địa chỉ Server (Địa chỉ IP hoặc tên miền).
- Tên người dùng Username, thường là
roothoặc tên người dùng bạn đã tạo. - Mật khẩu hoặc đã thiết lập SSH Key trên server.

Lệnh kết nối mẫu
Cú pháp lệnh SSH rất đơn giản. Bạn chỉ cần mở Terminal (hoặc PuTTY) và gõ lệnh sau:
# Cú pháp: ssh [tên_người_dùng]@[địa_chỉ_server] -p [số_cổng]
# Ví dụ kết nối đến server có IP 123.45.67.89 với user 'root' qua cổng 22 (mặc định)
ssh root@123.45.67.89
# Ví dụ kết nối đến server qua cổng tùy chỉnh 2222
ssh root@123.45.67.89 -p 2222Khi kết nối lần đầu tiên, bạn có thể thấy một cảnh báo như The authenticity of host … can’t be established…. Đây là cơ chế bảo mật của SSH, hệ thống hỏi bạn có tin tưởng vào máy chủ này không. Chỉ cần gõ yes và nhấn Enter, dấu vân tay của máy chủ sẽ được lưu lại cho các lần kết nối sau.
Một số câu lệnh SSH thường dùng khác
SSH là một công cụ dòng lệnh mạnh mẽ, có thể thực thi trực tiếp hoặc tích hợp vào các tập lệnh tự động. Khi không kèm theo các tham số như đích đến hoặc user ID, lệnh SSH sẽ hiển thị danh sách các tùy chọn và định dạng sử dụng. Cú pháp cơ bản nhất để bắt đầu một phiên SSH là gọi chương trình cùng với tên máy chủ hoặc địa chỉ IP của đích đến:
ssh server.example.orgLệnh này sẽ thiết lập kết nối đến server.example.org. Sau đó, máy chủ đích sẽ yêu cầu mật khẩu cho user ID mà client đang sử dụng. Trong trường hợp user ID trên máy chủ từ xa khác với máy cục bộ, bạn có thể chỉ định rõ ràng bằng cách sau:
ssh remote_host_userID@server.example.orgSSH còn cho phép bạn gửi một lệnh đơn lẻ đến máy chủ từ xa và nhận kết quả mà không cần duy trì phiên kết nối. Ví dụ:
ssh example.org lsLệnh này sẽ thực thi lệnh ls trên hệ thống Unix của máy chủ từ xa, hiển thị nội dung thư mục hiện tại của máy chủ. Điều này cho thấy SSH có khả năng thực thi nhiều lệnh khác nhau trên máy chủ từ xa, bao gồm cả việc khởi tạo máy chủ ảo, cho phép truy cập file hoặc tài nguyên từ xa, sau đó kết thúc phiên làm việc.
Ngoài lệnh ssh chính, SSH còn cung cấp các tiện ích dòng lệnh bổ sung để thực hiện các chức năng khác:
sshd: Dịch vụ máy chủ SSH, lắng nghe các yêu cầu kết nối SSH và cho phép các hệ thống được ủy quyền kết nối đến máy chủ cục bộ.ssh-keygen: Công cụ dùng để tạo cặp khóa xác thực SSH mới, phục vụ cho việc tự động hóa đăng nhập, thiết lập Đăng nhập một lần (SSO) hoặc xác thực máy chủ.ssh-copy-id: Tiện ích hỗ trợ sao chép, cài đặt và cấu hình SSH key lên máy chủ từ xa, cho phép đăng nhập tự động không cần mật khẩu và SSO.ssh-agent: Chương trình quản lý các khóa nhận dạng và passphrase (mật khẩu cho khóa), cho phép SSH sử dụng các khóa nhận dạng khác nhau mà không yêu cầu người dùng nhập mật khẩu hay passphrase mỗi lần.ssh-add: Lệnh được sử dụng để thêm khóa vào SSH authentication agent (như ssh-agent), hỗ trợ triển khai SSO qua SSH.scp: Chương trình cho phép sao chép file giữa các máy tính, là giải pháp an toàn hơn so với rcp.sftp: Một chương trình khác cho phép sao chép file giữa các máy tính, an toàn hơn ftp. SFTP ngày càng phổ biến để chia sẻ file qua internet, thậm chí thay thế cho FTP và FTP/S (FTP qua SSL/TLS).
Câu hỏi thường gặp
Tại sao nên dùng SSH thay vì Telnet?
SSH an toàn hơn Telnet rất nhiều vì mã hóa toàn bộ phiên làm việc, bao gồm cả mật khẩu và các lệnh bạn gõ. Ngược lại, Telnet truyền dữ liệu dưới dạng văn bản thuần, rất dễ bị kẻ xấu đánh cắp thông tin.
Cổng mặc định của SSH là gì và có nên thay đổi không?
Cổng mặc định của SSH là 22. Bạn nên thay đổi cổng này sang một số khác để tránh các cuộc tấn công tự động nhắm vào cổng 22, giúp tăng cường bảo mật cho máy chủ.
Phương thức xác thực nào an toàn nhất cho SSH?
Xác thực bằng khóa SSH là phương thức an toàn nhất và được khuyến nghị. Sử dụng một cặp khóa công khai/riêng tư để xác thực danh tính mà không cần gửi mật khẩu qua mạng, giúp chống lại các cuộc tấn công dò mật khẩu.
Tóm lại, SSH là một giao thức bảo mật thiết yếu cho việc kết nối và quản trị máy chủ từ xa. Việc nắm vững cách sử dụng SSH là kỹ năng nền tảng cho bất kỳ quản trị viên hệ thống hoặc nhà phát triển web nào. Nếu bạn muốn tìm hiểu thêm về bảo mật và kỹ thuật quản trị web, hãy tiếp tục theo dõi các bài viết dưới đây của mình.




