SSH là gì? Tìm hiểu về Secure Shell Protocol

SSH là một giao thức rất phổ biến hiện nay, đi kèm với hầu hết các bản phân phối Linux, Macintosh OS X, Sun Solaris, OpenBSD và hầu như tất cả các hệ điều hành lấy cảm hứng từ Unix khác. Vậy SSH là gì? Hãy cùng VpsTTT.com  tìm hiểu ngay nhé!

SSH là gì?

SSH – hay Secure (Socket) Shell, là một giao thức mạng cung cấp cho người dùng (đặc biệt là các quản trị viên mạng) cách truy cập an toàn vào một máy tính qua một mạng không được bảo mật. Bên cạnh đó, SSH cũng cung cấp nhiều bộ tiện ích để triển khai giao thức SSH. Secure Shell là một giao thức cung cấp khả năng xác thực password mạnh mẽ, cùng với khả năng giao tiếp dữ liệu được mã hóa giữa hai máy tính kết nối với nhau qua một mạng mở như Internet.SSH là gì? Tổng quan về giao thức SSH mới nhất 2024

SSH là gì?

Bên cạnh đó, SSH cũng được sử dụng phổ biến bởi các QTV mạng để quản lý hệ thống và ứng dụng từ xa. Từ đó cho phép đăng nhập vào các máy tính khác qua mạng và thực hiện các tác vụ cơ bản như thực thi lệnh, di chuyển file,… SSH bao gồm cả giao thức mạng lẫn một bộ tiện ích để triển khai giao thức đó. SSH sử dụng mô hình client-server, kết nối một ứng dụng Secure Shell client (nơi session được hiển thị) với một SSH server (nơi session chạy).

Triển khai SSH thường hỗ trợ cả các giao thức ứng dụng, dùng cho giả lập terminal hay truyền file. Ngoài ra, SSH cũng có thể được dùng để tạo các tunnel bảo mật cho nhiều giao thức ứng dụng. Chẳng hạn như để chạy các phiên đồ họa X Windows System từ xa. Một SSH server theo mặc định sẽ nghe trên cổng TCP 22.

Giao thức SSH hoạt động như thế nào?

Secure Shell được tạo ra để thay thế các chương tình giả lập terminal hoặc chương trình đăng nhập không an toàn như Telnet, rlogin (remote login) hay rsh (remote shell). Bên cạnh đó, SSH cũng hỗ trợ các chức năng tương tự như đăng nhập và chạy các terminal session trên hệ thống ở xa. SSH cũng thay thế các chương trình truyền file như FTP (File Transfer Protocol) hay rcp (remote copy).Giao thức SSH

Giao thức SSH

Chức năng đơn giản nhất của SSH là kết nối đến một host ở xa cho một phiên terminal, bằng lệnh như sau:
				
					ssh server.example.org
				
			

Qua lệnh này, client sẽ kết nối đến một server có tên server.example.com bằng user ID là UserName. Nếu đây là lần kết nối đầu tiên giữa host và server, người dùng sẽ được thông báo về public key fingerprint của host ở xa và nhắc người dùng kết nối:

 
				
					
The authenticity of host 'sample.ssh.com' cannot be established.

DSA key fingerprint is 
01:23:45:67:89:ab:cd:ef:ff:fe:dc:ba:98:76:54:32:10.

Are you sure you want to continue connecting (yes/no)?
				
			

Nếu chọn yes, phiên sẽ được tiếp tục và host key được lưu trữ trong file known_hosts của hệ thống cục bộ. Đây là một file ẩn và được lưu trữ mặc định trong một directory ẩn tên là /.ssh/known_hosts, trong home directory của người dùng. Sau đó, client có thể kết nối trực tiếp đến server đó lần nữa mà không cần phê duyệt; host key sẽ xác thực kết nối.

Chức năng của giao thức SSH

SSH hỗ trợ các chức năng sau đây:

  • Truy cập từ xa an toàn vào các hệ thống hay thiết bị mạng có hỗ trợ SSH cho người dùng và các quá trình tự động khác.
  • Hỗ trợ phiên chuyển file an toàn
  • Tự động truyền file an toàn.
  • Thực thi lệnh an toàn trên các máy hay hệ thống từ xa.
  • Quản lý an toàn các thành phần cơ sở hạ tầng mạng.
Chức năng của SSH
Chức năng của SSH

SSH có thể được sử dụng để enable các terminal session và nên được dùng thay thế cho các chương trình Telnet có độ bảo mật kém hơn. Ngoài ra, SSH cũng thường được dùng trong các script và nhiều phần mềm khác để cho phép các chương trình, hệ thống truy cập an toàn từ xa vào các tài nguyên khác.

Ứng dụng của SSH là gì? Nên sử dụng SSH khi nào?

Một số ứng dụng của SSH cũng như thời điểm nên sử dụng SSH phải kể đến như:

  • SSH có mặt trong mọi datacenter và được đi kèm mặc định trong mọi server Unix, Linux và Mac. Các kết nối SSH hiện đang được ứng dụng để bảo mật nhiều loại giao tiếp khác nhau giữa một máy cục bộ và một host từ xa. Trong đó bao gồm cả quyền truy cập an toàn từ xa vào các tài nguyên, thực thi lệnh từ xa hay chuyển các bản patch, bản cập nhật phần mềm,… Bên cạnh khả năng tạo ra các kênh an toàn cho máy cục bộ và máy ở xa, SSH cũng dùng để quản lý router, phần cứng của server, các nền tảng ảo hóa, hệ điều hành và có trong các ứng dụng quản lý và truyền file,…
  • Secure Shell được dùng để kết nối đến các server, thực hiện các thay đổi, upload,… bằng các công cụ hay thông qua terminal. Bên cạnh đó, các SSH key cũng được dùng để tự động truy cập vào server, chủ yếu được ứng dụng trong các script, hệ thống backup hay các công cụ quản lý cấu hình,…
  • SSH được thiết kế với mục đích đề cao sự thuận tiện và khả năng làm việc xuyên ranh giới giữ các tổ chức, do đó SSH key cung cấp một single sign-on (SSO – đăng nhập một lần) để người dùng có thể nhanh chóng chuyển qua lại giữa các tài khoản mà không cần tốn thời gian nhập password.
  • Hơn nữa, SSH không chỉ xác thực qua một kết nối được mã hóa, mà mọi SSH traffic đều được mã hóa; cho dù người dùng đang truyền file, duyệt web hay chạy lệnh, mọi tác vụ của họ đều được bảo mật tuyệt đối.
  • Ta có thể sử dụng SSH với một user ID thông thường và password làm thông tin xác thực, tuy nhiên SSH chủ yếu dựa vào các public key pair để xác thực các host với nhau. Người dùng cá nhân vẫn phải sử dụng user ID và password – hoặc các phương pháp xác thực khác – để có thể kết nối đến host từ xa, tuy nhiên máy cục bộ và máy từ xa sẽ xác thực riêng biệt với nhau. Việc này được thực hiện bằng cách tạo một public key pair duy nhất cho từng host trong quá tình giao tiếp. Mỗi session yêu cầu có hai public key pair: một key pair dùng để xác thực máy từ xa với máy cục bộ và bộ key pair có nhiệm vụ ngược lại.
Ứng dụng của SSH
Ứng dụng của SSH

Ưu điểm của SSH

SSH cho phép mã hóa dữ liệu để những kẻ tấn công không thể đánh cắp thông tin người dùng và mật khẩu của bạn. SSH cũng cho phép tạo các giao thức truyền dữ liệu khác như FTP. Dưới đây là danh sách những điều cụ thể mà SSH bảo vệ bạn.

  • IP source routing.
  • Giả mạo DNS.
  • Nghe lén dữ liệu được truyền.
  • Giả mạo địa chỉ IP.
  • Thao túng dữ liệu trên routers.

Một số vấn đề bảo mật của SSH

Tuy nhiên, SSH cũng có một số lỗ hổng bảo mật nhất định mà các doanh nghiệp nên chú ý. Cụ thể, các key được lưu trữ trên hệ thống client có thể tích tụ dần theo thời gian, vì vậy cần có được cách quản lý host key hiệu quả, đặc biệt là với những nhân viên IT – những người cần truy cập vào các server từ xa để quản lý. Ngoài ra, dữ liệu được lưu trong file SSH known_file có thể dùng để lấy quyền truy cập đã được xác thực vào hệ thống từ xa.

Do đó, các doanh nghiệp cần có một quy trình tiêu chuẩn để duy trì quyền kiểm soát các file này. Bên cạnh đó, các developer cũng cần cẩn thận khi kết hợp các lệnh hay hàm SSH với nhau trong script hoặc các loại chương trình khác. Mặc dù ta có thể đưa ra lệnh SSH chứa user ID và password để xác thực người dùng của máy cục bộ với một tài khoản trên host từ xa, nhưng việc này sẽ làm lộ thông tin xác thực cho những kẻ tấn công để truy cập vào mã nguồn.SSH - Secure Socket Shell: definizione e a che cosa serve | ZeroUno

Shellshock, một lỗ hổng bảo mật trong Bash command processor, có thể được thực thi qua SSH nhưng đó là một lỗ hổng trong Bash chứ không phải trong SSH. Mối đe dọa lớn nhất đối với SSH chính là khả năng quản lý key không tốt.

Nếu không tạo, xoay vòng và loại bỏ key SSH tập trung thích hợp, các tổ chức hoàn toàn có thể mất quyền kiểm soát những người có quyền truy cập vào tài nguyên, đặc biệt là khi SSH được sử dụng trong các quy trình app-to-app tự động. Khi sử dụng VPS, người ta thường sử dụng SSH để thiết lập kết nối. Việc này giúp đảm bảo an toàn thông tin truyền đi giữa máy tính của bạn và máy chủ.

Các kỹ thuật mã hóa khác

Ưu điểm của SSH so với các giao thức cũ là khả năng mã hóa và truyền tải dữ liệu một cách an toàn giữ host và client.
Có 3 cách để mã hóa khi sử dụng SSH

  • Symmetrical encryption.
  • Asymmetrical encrytion.
  • Mã hóa Hashing.

Symmetrical encryption

Symmetrical encryption là loại mã hóa trong đó chỉ có một khóa (secret key) được sử dụng để vừa mã hóa vừa giải mã thông tin ở cả trên host và client. Các thực thể giao tiếp thông qua mã hóa đối xứng phải trao đổi khóa để có thể được sử dụng trong quá trình giải mã. Phương pháp mã hóa này khác với asymmetrical encrytion sử dụng một cặp khóa, một khóa công khai (public key) và một khóa riêng tư (private key) được sử dụng để mã hóa và giải mã tin nhắn.

Symmetrical-encrytion
Symmetrical encrytion

Bằng cách sử dụng các thuật toán Symmetrical encryption, dữ liệu được chuyển đổi sang dạng không thể hiểu được bởi bất kỳ ai không có khóa bí mật (secret key) để giải mã. Khi người nhận sở hữu khóa có tin nhắn, thuật toán sẽ đảo ngược hành động để tin nhắn được trả về dạng ban đầu và dễ hiểu.

Khóa bí mật mà cả người gửi và người nhận đều sử dụng có thể là một mật khẩu / mã cụ thể hoặc có thể là chuỗi ký tự hoặc số ngẫu nhiên đã được tạo bởi trình tạo số ngẫu nhiên an toàn (RNG). Đối với mã hóa cấp ngân hàng, các khóa đối xứng phải được tạo bằng RNG được chứng nhận theo tiêu chuẩn ngành, chẳng hạn như FIPS 140-2.

Có hai loại thuật toán Symmetrical encryption:

  • Block algorithms: Tập hợp của các bit được mã hóa trong các khối dữ liệu điện tử với việc sử dụng một khóa bí mật. Khi dữ liệu đang được mã hóa, hệ thống giữ dữ liệu trong bộ nhớ đến khi các khối hoàn chỉnh.
  • Stream algorithms: Dữ liệu được mã hóa khi truyền trực tuyến thay vì được giữ lại trong bộ nhớ của hệ thống.

    Asymmetrical encryption 

    Asymmetrical encrytion còn được gọi là public-key cryptography, là một quá trình sử dụng một cặp khóa liên quan – một khóa công khai (public key) và một khóa riêng (private key) – để mã hóa và giải mã một tin nhắn và bảo vệ khỏi bị truy cập hoặc sử dụng trái phép. Khóa công khai là một khóa mật mã có thể được sử dụng bởi bất kỳ người nào để mã hóa một tin nhắn sao cho chỉ có thể được giải mã bởi người nhận dự kiến bằng khóa riêng của họ. Khóa riêng tư – còn được gọi là khóa bí mật – chỉ được chia sẻ với người khởi tạo khóa.

    Asymmetrical-encrytion
    Asymmetrical encrytion

    Nhiều giao thức dựa trên Asymmetrical encrytion, bao gồm giao thức bảo mật lớp truyền tải (TLS) và giao thức lớp cổng bảo mật (SSL), giúp cho HTTPS khả thi. Quá trình mã hóa cũng được sử dụng trong các chương trình phần mềm – chẳng hạn như trình duyệt – cần thiết lập kết nối an toàn qua mạng không an toàn như Internet hoặc cần xác thực chữ ký số.

    Tăng cường bảo mật dữ liệu là lợi ích chính của Asymmetrical encrytion. Đây là quy trình mã hóa an toàn nhất vì người dùng không bao giờ bị yêu cầu tiết lộ hoặc chia sẻ khóa riêng tư của họ, do đó giảm nguy cơ tội phạm mạng phát hiện ra khóa cá nhân của người dùng trong quá trình truyền.

    Mã hóa Hashing

    Trong khi encryption là một quy trình gồm hai bước được sử dụng để mã hóa và sau đó giải mã một tin nhắn, Hashing sẽ cô đọng một tin nhắn thành một giá trị có độ dài cố định không thể thay đổi được hay còn gọi là hàm băm. Hai trong số các thuật toán Hashing phổ biến nhất trong network là MD5 và SHA-1.

    Hashing

    Trong SSH, các giá trị Hash chủ yếu được sử dụng để kiểm tra tính toàn vẹn của dữ liệu (dữ liệu không bị sửa đổi một cách vô tình hay cố ý) và để xác minh tính xác thực của giao tiếp. Việc sử dụng chính của các giá trị Hash trong SSH là với HMAC (Hashed Message Authentication Code). HMAC sử dụng các giá trị Hash để tạo mã HMAC. Chúng được sử dụng để đảm bảo rằng văn bản tin nhắn nhận được là nguyên vẹn và không bị sửa đổi.

Cách thức xử lý các dạng mã hóa trong SSH

Giai đoạn Session Encryption Negotiation

Để thiết lập kết nối giữa Client và Server qua TCP, Server cần hiển thị Encryption Protocol và các phiên bản hỗ trợ. Nếu Client có Protocol tương thích, phiên bản cũng cần khớp. Trong trường hợp đồng thuận, một thỏa thuận được khởi tạo và Protocol được chấp nhận. Mỗi Server sử dụng Symmetric Public Key để xác thực. Nếu quá trình thiết lập thành công, cả hai bên sử dụng thuật toán chung Diffie-Hellman Key Exchange Algorithm. Thuật toán này tạo ra một Symmetrical Key để đồng bộ quá trình liên lạc sau này.

Dưới đây là tóm tắt quy trình hoạt động của thuật toán:

  • Client và Server đồng ý với nguyên tắc sử dụng seed value.
  • Cả hai bên cần được thông báo về thách thức mã hóa, triển khai bởi seed value thông qua thuật toán đặc biệt. Cơ chế tạo mã hóa này có ảnh hưởng lớn đến seed value.
  • Cả hai bên tạo ra Private Key.
  • Private Key này chung thuật toán với mã hóa AES để tạo ra Public Key, được phân phối đến máy còn lại.
  • Cả hai bên có quyền sử dụng Private Key, trong khi Public Key của máy còn lại kết hợp với Public Key để tạo ra một Key chung.
  • Khi đã có Shared Key, quá trình mã hóa Symmetric cho phiên SSH chính thức được khởi động.

Giai đoạn chứng thực người dùng

Đây là bước cuối cùng để người dùng có thể truy cập vào máy chủ và xác nhận thông tin trên hệ thống đăng nhập. Ban đầu, người dùng phải nhập tên đăng nhập, tiếp theo là mật khẩu. Thông tin người dùng cung cấp được chuyển đến hệ thống bảo mật Symmetric, đảm bảo không có bên thứ ba nào có thể thu thập được.

ssh la gi 5
Giai đoạn chứng thực người dùng của SSH

Mặc dù mật khẩu đã trải qua quá trình mã hóa; tuy nhiên, nếu người dùng không cẩn thận, vẫn có khả năng bị tiết lộ. Nếu một bên nào đó thành công trong việc thu thập mật khẩu, tài khoản của người dùng có thể bị chiếm đoạt. Theo nhiều chuyên gia bảo mật, người dùng nên sử dụng SSH Key Pair, một bộ khóa Asymmetric có khả năng xác thực thành viên mà không yêu cầu nhập mật khẩu.

Các bản phân phối của SSH

SSH đi kèm với hầu hết các bản phân phối Linux, Macintosh OS X, Sun Solaris, OpenBSD và hầu như tất cả các hệ điều hành lấy cảm hứng từ Unix khác. Microsoft Windows có rất nhiều client và server SSH, cả miễn phí và thương mại. Bạn thậm chí có thể tìm thấy SSH cho PalmOS, Commodore Amiga và hầu hết các nền tảng khác.

Nhiều client SSH được lấy từ các chương trình Unix cũ được gọi là r-commands r: Rv (remote shell), rlogin (đăng nhập từ xa) và RCp (sao chép từ xa). Trong thực tế, đối với nhiều mục đích, các client SSH là các thay thế cho r-commands, vì vậy nếu bạn vẫn đang sử dụng chúng, hãy chuyển sang SSH ngay lập tức! r-commands cũ không nổi tiếng là không an toàn.

Các bản phân phối của SSH
Các bản phân phối của SSH

PuTTY là một triển khai mã nguồn mở của SSH, được viết với mục đích ban đầu là chỉ chạy trên Windows, nhưng hiện nay đã có mặt trên nhiều hệ điều hành khác như macOS hay Unix/BSD. PuTTY từ lâu đã là một trong những lựa chọn hàng đầu để triển khai SSH trên hệ thống Windows.

Hầu hết các triển khai của SSH đều bao gồm 3 tiện ích: slogin (secure login), ssh và scp (secure copy), đây là những phiên bản được cải tiến khả năng bảo mật so với những công cụ tiền nhiệm có trong Unix: rlogin, rsh và rcp. SSH sử dụng mật mã public key để xác thực máy tính từ xa, và cho phép máy tính từ xa xác thực người dùng nếu cần thiết.

Cách sử dụng SSH để kết nối với Server Linux

Thiết lập Server Linux chấp nhận liên kết

Để thiết lập kết nối SSH cho Server Linux, trước hết, bạn cần thực hiện các bước cấu hình trên máy chủ. Tùy thuộc vào phần cứng và phiên bản Linux, bạn có thể tùy chỉnh cài đặt. Sau khi tải công cụ về thành công, bạn có thể mở Terminal bằng cách nhấn tổ hợp phím Ctrl + Alt + T và nhập lệnh “sudo apt-get update”.

Thiết lập server Linux
Thiết lập server Linux

Trước khi bắt đầu quá trình cài đặt OpenSSH, bạn cần kiểm tra chương trình nâng cấp bằng cách nhập lệnh “sudo apt-get upgrade” trong Terminal. Nếu quá trình nâng cấp đã hoàn tất, bạn có thể tiếp tục nhập lệnh “sudo apt-get install openssh-server.

Định hình cấu hình cài đặt SSH cho Server 

Sau khi hoàn tất bước thiết lập chấp nhận kết nối, tiếp theo là quá trình chỉnh sửa cấu hình cơ bản. Để thực hiện điều này, bạn có thể mở Terminal, mở file cấu hình SSH và sử dụng lệnh “sudo nano /etc/ssh/sshd_config”. Theo cài đặt mặc định, SSH Server thường hoạt động trên cổng 22. Bạn cũng có thể tăng cường bảo mật bằng cách thiết lập mật khẩu phức tạp.

Cấu hình cài đặt SSH
Cấu hình cài đặt SSH

Trong mục Port, bạn có thể tìm đến dòng MaxAuthTries và nhập giá trị mong muốn. Chẳng hạn, nếu bạn muốn giới hạn việc đăng nhập tối đa 4 lần, bạn chỉ cần nhập “MaxAuthTries 4”. Khi bạn đã cài đặt xong công cụ OpenSSH, giao thức SSH Server sẽ bắt đầu chạy. Để kiểm tra xem giao thức đã chạy hay chưa, bạn có thể sử dụng lệnh “sudo service ssh status”. Nếu bạn không muốn chạy SSH, bạn có thể nhập lệnh “sudo service ssh stop”.

Một số câu lệnh SSH

SSH có một số triển khai từ command line hoặc thực thi ở trong script. Nếu chạy một lệnh SSH mà không có các đối số (như host đích hay user ID) sẽ trả về một danh sách các tham số của lệnh SSH cùng với các option. Dạng cơ bản nhất của lệnh SSH là gọi chương trình và tên của host đích hay địa chỉ IP:

 
				
					ssh server.example.org
				
			

Lệnh này sẽ kết nối với đích server.example.org; sau đó host đích sẽ phản hồi bằng yêu cầu nhập password cho user ID mà client đang chạy. Đôi khi, user ID cho host từ xa sẽ khác, nên lệnh cần phải được gửi bằng user ID của host từ xa như sau:

				
					ssh remote_host_userID@server.example.org

				
			

Ngoài ra, SSH cũng có thể được sử dụng từ trong command line để gửi ra một lệnh trên host từ xa rồi thoát:

				
					ssh example.org ls
				
			

Lệnh này sẽ thực hiện lệnh ls trong Unix, liệt kê tất cả nội dung của thư mục hiện tại trên host từ xa. Qua đó ta có thể thấy SSH có thể được dùng để thực hiện nhiều lệnh khác nhau trên một host từ xa. Chẳng hạn như lệnh khởi tạo một server instance, cho phép máy từ xa truy cập vào một file hay tài nguyên nào đó, sau đó terminate server sau khi truy cập vào file.

Bên cạnh ssh executable thì SSH còn có một số lệnh khác có thể dùng trong command line để thực hiện một số chức năng bổ sung như:

– sshd khởi tạo SSH server để đợi request kết nối SSH đến và enable các hệ thống được ủy quyền để kết nối đến local host.

– ssh-keygen là một chương trình tạo các key pair xác thực mới cho SSH dùng để tự động hóa các đăng nhập, triển khai SSO hay xác thực host.

– ssh-copy-id là chương trình dùng để copy, cài đặt và cấu hình SSH key trên một server để tự động hóa các đăng nhập không password và SSO.

– ssh-agent là một chương trình trợ giúp, theo dõi các key nhận dạng và passphrases của chúng, từ đó SSH có thể lấy mã khóa mã hóa và cho phép người dùng sử dụng các key nhận dạng (identity key) khác nhau mà không cần nhập loại password hay passphrase.

– ssh-add được sử dụng để thêm key vào các SSH authentication agent, được dùng với ssh-agent để triển khai SSO bằng SSH.

– scp là một chương trình sao chép file giữa các máy tính và là một phiên bản an toàn hơn của rcp.

– sftp cũng là một chương trình cho phép sao chép file giữa các máy tính, là một phiên bản an toàn hơn của ftp. SFTP đang ngày càng trở thành cơ chế được yêu thích để chia sẻ file qua internet, thay thế cả FTP lẫn FTP/S – giao thức sử dụng FTP qua một SSL/TLS tunnel.

ssh-la-gi-4