Hàng ngày, chúng ta kết nối tới Server hay VPS thông qua cửa sổ dòng lệnh SSH. Mọi dòng lệnh của các bạn đều được biên dịch và máy chủ hành động trả về kết quả. Vậy các bạn đã biết SSH là gì chưa ?

Giao thức SSH là gì?

SSH (tiếng Anh: Secure Shell) là một giao thức mạng dùng để thiết lập kết nối mạng một cách bảo mật. SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP. Các công cụ SSH (như là OpenSSH, PuTTy,…) cung cấp cho người dùng cách thức để thiết lập kết nối mạng được mã hoá để tạo một kênh kết nối riêng tư. Hơn nữa tính năng tunneling (hoặc còn gọi là port forwarding) của các công cụ này cho phép chuyển tải các giao vận theo các giao thức khác. Do vậy có thể thấy khi xây dựng một hệ thống mạng dựa trên SSH, chúng ta sẽ có một hệ thống mạng riêng ảo VPN đơn giản.

Mô tả đơn giản cho giao thức SSH khi kết nối tới Server Linux

Mô tả đơn giản cho giao thức SSH khi kết nối tới Server Linux

Mỗi khi dữ liệu được gửi bởi một máy tính vào mạng, SSH tự động mã hoá nó. Khi dữ liệu được nhận vào, SSH tự động giải mã nó. Kết quả là việc mã hoá được thực hiện trong suốt: người dùng có thể làm việc bình thường, không biết rằng việc truyền thông của họ đã được mã hoá an toàn trên mạng.

Câu chuyện lịch sử của SSH

SSH1 và giao thức SSH-1 được trình bày năm 1995 bởi Tatu Ylõnen, một nhà nghiên cứu ở trường đại học kĩ thuật Helsinki của Phần Lan. Sau khi mạng trường đại học của ông ta là nạn nhân của một cuộc tấn công đánh cắp password vào đầu năm đó.

Tháng 7 năm 1995, SSH1 được phát hành rộng rãi dưới dạng một phần mềm miễn phí có source code, cho phép mọi người sao chép và sử dụng mà không thu phí. Vào cuối năm đó, ước tính có khoảng 20.000 người dùng trên 50 quốc gia đã sử dụng SSH1, và mỗi ngày Ylõnen nhận 150 mail yêu cầu hỗ trợ. Để đáp lại, Ylõnen đã thành lập SSH Communications Security (SCS, http://www.ssh.com) vào tháng 12 năm 1995 để duy trì, thương nghiệp hoá và tiếp tục phát triển SSH.

Cũng trong năm 1995, Ylõnen soạn thảo giao thức SSH-1 còn gọi là Internet Engineering Task Force (IETF), nó diễn tả hoạt động cơ bản của phần mềm SSH1 trên thực tế. Nó là một giao thức có phần quảng cáo nhưng còn một số lỗi và giới hạn nhưng rất phổ biến. Năm 1996, SCS giới thiệu một phiên bản mới đó là phiên bản chính của giao thức, SSH 2.0 hay SSH-2, phiên bản này được kết hợp chặt chẽ những thuật toán mới và không hợp với SSH-1. Trong lúc đó, IETF thành lập một nhóm làm việc gọi là SECSH (Secure Shell) để chuẩn hoá giao thức và chỉ đạo sự phát triển của nó trên lợi ích chung. Nhóm làm việc SECSH đã trình bày bản phác thảo Internet đầu tiên đối với giao thức SSH-2 vào tháng 2 năm 1997.

Năm 1998, SCS phát hành sản phẩm phần mềm “SSH Secure Shell” (SSH2), dựa trên giao thức SSH-2. Tuy nhiên, SSH2 không thay thế SSH1 trong một số lĩnh vực, có 2 lí do. Thứ nhất, SSH2 không có một số tiện ích, các đặc điểm có ích và cấu hình tuỳ chọn như SSH1. Thứ hai, SSH2 có nhiều giới hạn về việc đăng kí. Bản chính SSH1 đã có sẵn miễn phí từ Ylõnen và trường đại học kĩ thuật Helsinki. Phiên bản mới hơn của SSH1 từ SCS vẫn có sẵn miễn phí cho hầu hết người dùng, thậm chí cả cấu hình thương mại cũng miễn phí chỉ cần phần mềm đó không được trực tiếp bán cho việc thu lợi nhuận hoặc được tặng như là một dịch vụ cho khách hàng. Vì thế, tuy SSH2 đã xuất hiện, nhưng hầu hết những người đang sử dụng SSH1 đều nhận ra vài ưu điểm của SSH1 so với SSH2 và tiếp tục sử dụng SSH1, ba năm sau khi SSH2 ra đời thì SSH1 vẫn là phiên bản được sử dụng phổ biến trên Internet và vượt qua cả SSH2 là giao thức tốt hơn và bảo mật hơn.

Tuy nhiên, SSH2 cũng có hai sự phát triển hưa hẹn, đó là một bản nới lỏng của SSH2 bản quyền và sự xuất hiện SSH-2 bổ sung. Năm 2000, SCS mở rộng SSH2 bản quyền để cho phép sử dụng khi làm việc riêng lẻ đối với các tổ chức hoạt động phi lợi nhuận. Nó cũng được mở rộng cho phép dùng miễn phí đối với Linux, NetBSD, FreeBSD và hệ điều hành OpenBSD. Cùng thời gian đó, OpenSSH (http://www.openssh.com) đã được phát triển nổi bật như là một SSH bổ sung, được phát triển dưới hoạt động của dự án OpenBSD (http://www.openbsd.org) và miễn phí sẵn bên dưới OpenBSD có đăng kí. OpenSH hỗ trợ cả SSH-1 và SSH-2 trong một chương trình.

Tuy OpenSSH được phát triển trên nền OpenBSD nhưng nó cũng hoạt động được trên Linux, Solais, AIX và những hệ điều hành khác. Mặc dù OpenSSH tương đối mới và không có vài đặc điểm có trong SSH1 và SSH2 nhưng nó đang trên đà phát triển nhanh chóng và hứa hẹn trở thành bản SSH chính trong tương lai không xa.

Các chức năng bên trong của SSH

1. Tính bí mật (Privacy)

Tính bí mật có nghĩa là bảo vệ dữ liệu không bị phơi bày. Mạng máy tính bình thường không bảo đảm tính bí mật, bất cứ ai truy cập đến phần cứng của mạng hoặc đến những host kết nối với mạng đều có thể sẽ đọc được tất cả dữ liệu đi qua mạng. Mặc dù mạng chuyển mạch hiện đại đã giảm những vấn đề này trong mạng vùng cục bộ nhưng nó vẫn còn một vấn đề nghiêm trọng đó là mật khẩu dễ bị những kẻ xấu đánh cắp.
SSH cung cấp tính bí mật bằng việc mã hoá dữ liệu đi qua mạng. Đó là việc mã hoá hai đầu dựa trên khoá ngẫu nhiên (sinh ra để phục vụ cho một phiên kết nối và được huỷ đi khi phiên kết nối thành công). SSH hỗ trợ nhiều thuật toán mã hoá đối với phiên dữ liệu, đó là những thuật toán mã hoá chuẩn như: AES, ARCFOUR, Blowfish, Twofish, IDEA, DES và triple-DES (3DES)

2.  Tính toàn vẹn (Integrity)

Tính toàn vẹn nghĩa là bảo đảm dữ liệu được truyền từ một đầu này đến đầu kia của mạng không bị thay đổi. Giao thức SSH sử dụng phương pháp kiểm tra toàn vẹn mật mã, phương pháp này kiểm tra cả việc dữ liệu có bị biến đổi hay không và dữ liệu đến có đúng là do đầu kia gửi hay không. Nó sử dụng thuật toán băm khoá là MD5 và SHA-1.

3.  Chứng minh xác thực (authentication)

Chứng minh xác thực là kiểm tra định danh của ai đó để xác định chính xác đúng là người đó hay không. Mỗi kết nối SSH bao gồm hai việc xác thực: client kiểm tra định danh của SSH server (server authentication) và server kiểm tra định danh của người sr dụng yêu cầu truy cập (user authentication). Server authentication chắc chắn rằng SSH server là chính xác và không phải là kẻ lừa đảo để đề phòng kẻ tấn công lại gửi kết nối mạng đến một máy khác. Server authentication cũng bảo vệ việc bị kẻ xấu ngồi ở giữa hai bên, lừa gạt cả hai bên nghĩa là kẻ xấu sẽ nói với server nó là client và nói với client nó là server để đọc được dữ liệu trao đổi giữa hai bên.

User authentication theo truyền thống là làm việc với mật khẩu. Để xác thực định danh của bạn, bạn phải đưa ra mật khẩu, và dễ bị lấy cắp. Thêm nữa, để dễ nhớ một mật khẩu, người ta thường đặt nó ngắn và có ý nghĩa nào đó nên dễ bị kẻ xấu đoán ra. Đối với mật khẩu dài hơn thì người ta thường chọn những từ hoặc câu trong ngôn ngữ bẩm sinh nên cũng dễ bị bẻ khoá.

SSH hỗ trợ xác thực bằng mật khẩu, mã hoá mật khẩu khi nó truyền đi trên mạng. Đây là sự cải thiện rất lớn so với những giao thức truy cập từ xa thông thường khác (Telnet, FTP) mà chúng gửi mật khẩu qua mạng dưới dạng clear text. Tuy nhiên, việc chứng thực như thế vẫn chỉ là chứng thực mật khẩu đơn giản vì thế SSH cung cấp cơ chế mạnh hơn và dễ sử dụng hơn: mỗi user có nhiều chữ kí khoá công cộng (per-user public-key signature) và một cải tiến rlogin-style xác thực với định danh host được kiểm tra bằng khoá công khai. Hơn nữa, những bản bổ sung khác nhau của SSH hỗ trợ vài hệ thống khác bao gồm Kerberos, RSA, mật khẩu S/Key one-time và PAM. Một SSH client và SSH server đàm phán với nhau để xác định cơ chế xác thực sẽ sử dụng dựa trên cấu hình của chúng và một server thậm chí có thể yêu cầu nhiều kiểu xác thực.