SSH là gì? Tìm hiểu về giao thức mạng SSH giúp bảo mật cao
SSH được các quản trị viên mạng sử dụng rộng rãi để quản lý các hệ thống và ứng dụng từ xa, cho phép họ đăng nhập vào một máy tính khác qua mạng, thực thi lệnh và di chuyển các tệp từ máy tính này sang máy tính khác. Vậy cùng Bizfly Cloud tìm hiểu SSH là gì và cách sử dụng SSH như thế nào?
SSH là gì?
SSH còn được gọi là Secure Socket Shell, là giao thức cho phép các nhà quản trị mạng truy cập vào máy chủ từ xa thông qua mạng Internet không bảo mật. Không chỉ vậy, SSH còn cung cấp các bộ tiện ích phục vụ cho việc phát triển giao thức SSH.
Sử dụng cơ chế xác thực qua mật khẩu, SSH hình thành mối liên kết giao tiếp dữ liệu mã hóa giữa hai thiết bị trong môi trường Internet. Giao thức này cho phép quản trị mạng sử dụng phổ biến trong quá trình quản lý, điều chỉnh ứng dụng từ xa, đồng thời tự đăng nhập vào mạng máy tính và thực hiện một số thao tác cơ bản.
Các giao thức thực hiện qua SSH được bảo mật
SSH hoạt động như thế nào?
TCP/IP
SSH chạy trên bộ giao thức TCP/IP. TCP là viết tắt của Transmission Control Protocol (Giao thức điều khiển truyền tải) còn IP là viết tắt của Internet Protocol (Giao thức Internet). Hai giao thức này kết hợp với nhau để định dạng, định tuyến và phân phối gói dữ liệu trên mạng. IP xác định địa chỉ IP của đích mà gói tin sẽ được gửi đến, trong khi TCP xác định cổng mà dữ liệu sẽ được chuyển đến tại địa chỉ IP đó.
SSH là một trong những giao thức bổ sung được sử dụng trên TCP/IP để định dạng dữ liệu mà các ứng dụng có thể sử dụng và tạo ra một kết nối an toàn giữa hai thiết bị, cho phép người dùng truy cập và lái các thiết bị từ xa một cách bảo mật.
Mật mã hóa công khai
SSH "an toàn" vì nó sử dụng mật mã khóa công khai để mã hóa và xác thực thông tin. Mật mã khóa công khai gồm hai khóa - khóa chung và khóa riêng. Khóa chung có thể được chia sẻ công khai, khóa riêng sẽ được giữ bí mật. Khi hai bên kết nối sử dụng SSH, họ sẽ có cặp khóa chung/riêng để xác thực với nhau và thiết lập một kênh an toàn để truyền dữ liệu.
Các khóa "bất đối xứng" này giúp hai bên thỏa thuận và trao đổi khóa đối xứng, được sử dụng để mã hóa dữ liệu. Điều này giúp tăng cường tính bảo mật trong quá trình truyền thông và đảm bảo rằng dữ liệu được truyền đi an toàn.
Một điểm đáng lưu ý là trong kết nối SSH, cả hai bên đều phải xác thực bằng cách sử dụng cặp khóa chung/riêng, khác biệt với các giao thức khác như HTTPS. Lớp bảo mật cao hơn và đảm bảo rằng dữ liệu được bảo vệ khi truyền đi.
Xác thực
Mặc dù SSH sử dụng mật mã khóa công khai để xác thực các thiết bị được kết nối, nhưng vẫn cần xác thực từ phía người dùng. Thông thường, sau khi một máy tính hoặc người dùng đã kết nối thành công đến một máy chủ thông qua SSH, họ sẽ được yêu cầu nhập tên người dùng và mật khẩu của mình để xác thực.
Sau khi quá trình xác thực hoàn tất, người dùng có thể sử dụng SSH để thực thi các lệnh từ xa trên máy tính hoặc server mà họ đã kết nối đến. Người dùng có thể quản lý và điều khiển từ xa giống như họ đang làm trên máy cục bộ của mình.
Chuyển tiếp
Chuyển tiếp cổng (port forwarding) là một tính năng của SSH cho phép người dùng chuyển hướng lưu lượng truy cập từ một cổng trên một máy đến một cổng khác trên một máy khác trong mạng. Người dùng có thể truy cập vào các dịch vụ hoặc ứng dụng mà không cần phải trực tiếp kết nối đến máy chủ cụ thể.
Kỹ thuật mã hóa trong SSH
Ưu điểm khiến SSH hơn hẳn những giao thức cũ khác là khả năng mã hóa và truyền tải dữ liệu an toàn giữa host và client. Host đại diện cho máy chủ từ xa mà bạn muốn kết nối, còn client là máy tính bạn dùng để truy cập tới host.
Có ba cách mã hóa qua SSH bao gồm: Symmetrical encryption, Asymmetrical encryption và Hashing.
Symmetric Encryption
Symmetric encryption là dạng mã hóa sử dụng secret key ở cả hai chiều mã hóa và giải mã tin nhắn bởi cả host và client. Nói một cách đơn giản, ai có khóa thì đều có thể giải mã tin nhắn trong quá trình truyền.
Symmetrical encryption được gọi là shared key hoặc shared secret encryption. Lý do cho tên gọi này là vì chỉ có một khóa được sử dụng, hoặc trong cặp khóa (pair key) thì một khóa có thể được tính toán ra từ khóa kia.
Symmetric key được sử dụng để mã hóa toàn bộ liên lạc trong phiên giao dịch SSH. Cả client và server tạo chung một key bí mật như một phương thức thỏa thuận, và key đó không được tiết lộ cho bên thứ ba. Key exchange algorithm chịu trách nhiệm thực hiện quá trình tạo symmetric key.
Do key không được truyền giữa client và host nên thuật toán được đảm bảo an toàn. Thay vào đó, cả hai máy tính chia sẻ thông tin chung và sử dụng chúng để tính toán ra khóa bí mật. Nếu máy khác bắt được thông tin chung thì cũng không thể tính ra key bí mật vì không biết được thuật toán tạo key.
Tuy nhiên cần lưu ý rằng, secret token được sử dụng cho một phiên SSH và được tạo bởi chứng thực của client. Khi key được tạo xong, tất cả packet truyền giữa hai máy phải được mã hóa bởi private key. Việc này bao gồm cả mật khẩu do user điền, nên mật khẩu cũng có thể được bảo vệ an toàn.
Một số loại symmetrical encryption cypher có thể kể đến như CAST128, AES (Advanced Encryption Standard), Blowfish,... Trước khi thiết lập kết nối an toàn, host và client sẽ lựa chọn loại cypher để sử dụng bằng cách xuất bản danh sách cypher tham khảo. Cypher phù hợp với client sẽ hiển thị trong danh sách của host như một bidirectional cypher.
Asymmetric Encryption
Không giống với symmetrical encryption, asymmetrical encryption sử dụng hai khóa khác nhau để mã hóa và giải mã. Hai khóa này được gọi là public key và private key, và hình thành nên cặp khóa public - private.
Public key được công khai cho tất cả các bên liên quan. Tuy có liên quan chặt chẽ với public key, người dùng không thể tính toán ra private key từ một public key. Lý do là vì thư được mã hóa bởi public key của một máy và chỉ có thể được giải mã bởi private key của máy đó. Việc này đồng nghĩa với public key không thể giải mã chính thư của nó, hoặc không thể giải mã bất cứ thứ gì được mã hóa bằng private key.
Private key phải luôn được đảm bảo an toàn mà không được tiết lộ cho bên thứ ba. Sức mạnh của cả chu trình kết nối phụ thuộc vào việc private key có bị tiết lộ hay không, vì phải có private key thì mới có thể giải mã thư truyền đi mà được mã hóa bởi public key. Vì thế, bên nào có thể giải mã thư được ký bởi public key thì bên đó đang sở hữu private key tương ứng.
Ngoài ra, Asymmetrical encryption không được sử dụng để mã hóa toàn bộ phiên SSH mà chỉ được dùng trong quá trình trao đổi thuật toán khóa của symmetric encryption. Trước khi bắt đầu một phiên giao dịch an toàn, cả hai bên sẽ đồng ý tạo ra một cặp public-private key tạm thời và chia sẻ private key để tạo secret key chung.
Khi kết nối symmetrict an toàn được thiết lập, server sẽ sử dụng public key của client để tạo, challenge và truyền cho client để chứng thực. Nếu client có thể giải mã tin nhắn, điều này có nghĩa là nó đang giữ private key để kết nối. Khi đó, phiên giao dịch SSH sẽ bắt đầu.
Hashing
Hashing một chiều cũng là dạng mã hóa được sử dụng trong Secure Shell Connections. Khác với cả hai phương thức mã hóa trên, Hash một chiều không được dùng để giải mã. Chúng tạo ra một giá trị duy nhất với độ dài nhất định cho mỗi lần nhập liệu. Do không có cách nào khác để khai thác, Hashing sẽ không thể quay ngược lại giải mã.
Người dùng có thể dễ dàng tạo ra cryptographic hash từ một lần input, nhưng lại không thể tạo ra input đó từ một hash. Nếu client giữ input đó thì có thể tạo crypto-graphic hash tương đương và so sánh với giá trị ở đầu bên kia để xác nhận cả hai bên nhập input giống nhau.
Hashes được SSH sử dụng để xác nhận tính xác thực của tin nhắn. Quá trình này sẽ do HMACs hoặc Hash-based Message Authentication Codes thực hiện, nhằm đảm bảo lệnh không bị giả mạo bởi bất kỳ phương thức nào.
Trong khi thuật toán symmetrical encryption được lựa chọn, một thuật toán xác thực tin nhắn phù hợp cũng sẽ được chọn. Quá trình này hoạt động tương tự quá trình cypher được chọn ở trên.
Mỗi tin nhắn truyền đi phải chứa MAC và được tính toán bởi symmetric key, packet sequence number và nội dung tin nhắn. Từ đó truyền ra gói dữ liệu được mã hóa symmetric như một phần của communication packet.
Lệnh SSH bao gồm 3 phần riêng biệt như sau
ssh {user}@{host}
SSH key command cho hệ thống biết rằng bạn muốn mở một kết nối Secure Shell. {user} chính là tài khoản bạn muốn truy cập. Ví dụ, bạn muốn truy cập vào root user hay tài khoản quản trị với toàn quyền trên hệ thống, có khả năng chỉnh sửa bất cứ thông tin gì, bạn nhập vào tài khoản tại đây. {host} cho biết máy tính bạn muốn truy cập. Đó có thể là 1 địa chỉ IP (ví dụ: 244.235.23.19) hoặc 1 tên miền (ví dụ: www.xyzdomain.com).
Nhấn enter, bạn sẽ được nhắc nhập mật khẩu cho tài khoản bạn yêu cầu. Trong quá trình nhập, sẽ không có ký tự nào xuất hiện trên màn hình, nhưng trên thực tế mật khẩu đã được truyền đi. Sau khi nhập xong, nhấn enter một lần nữa. Nếu mật khẩu chính xác, một cửa sổ terminal sẽ hiện ra.
Có rủi ro bảo mật nào liên quan tới SSH hay không?
SSH không phải hoàn toàn an toàn, sử dụng SSH vẫn có thể bị các kẻ tấn công lợi dụng. Cho đến hiện nay, có một số cuộc tấn công đã được ghi lại liên quan đến việc sử dụng SSH để trích xuất thông tin riêng tư, mở cửa sau vào mạng an toàn hay thậm chí làm chủ quyền root trên máy chủ.
Không chỉ vậy, mà việc quản lý khóa SSH cũng là một vấn đề phức tạp đối với các tổ chức lớn. Việc theo dõi và cập nhật hàng nghìn hoặc thậm chí hàng triệu khóa SSH trên nhiều máy chủ là một thách thức không nhỏ, và khi một kẻ tấn công có thể đánh cắp được chìa khóa, họ có thể tiếp tục tiếp cận thông tin quan trọng trong thời gian dài mà không bị phát hiện.
Vì vậy, để bảo vệ hệ thống của mình, các tổ chức cần chú ý đến việc quản lý và bảo vệ khóa SSH, đồng thời thực hiện các biện pháp bảo mật khác như cập nhật phần mềm, sử dụng mật khẩu mạnh và kiểm tra định kỳ hệ thống để phát hiện và ngăn chặn các mối đe dọa bảo mật.
Khi nào nên sử dụng SSH?
SSH được coi là một công cụ quan trọng trong việc quản lý và bảo mật hệ thống máy chủ. Việc sử dụng SSH không chỉ giúp truy cập an toàn vào các máy chủ từ xa mà còn cung cấp một số lợi ích khác như tính bảo mật cao, mã hóa dữ liệu và xác thực thông tin. Vậy khi nào nên sử dụng SSH?
- Sử dụng SSH trong môi trường trung tâm dữ liệu: Đa số các trung tâm dữ liệu sử dụng giao thức SSH để đảm bảo việc truy cập an toàn và bảo mật cho hệ thống máy chủ của họ. Giao thức này luôn đi kèm với các máy chủ Mac, Unix và Linux, làm cho việc triển khai và quản lý SSH trở nên dễ dàng.
- Kết nối vào hệ thống máy chủ để thực hiện các thay đổi và nâng cấp: Bằng cách sử dụng SSH Key, người quản trị có thể tự động hóa quá trình truy cập vào máy chủ một cách an toàn, hiệu quả và giúp tiết kiệm thời gian và nâng cao hiệu suất làm việc.
- Ứng dụng cho hệ thống đăng nhập một lần SSO: Người dùng dễ dàng đăng nhập và chuyển đổi giữa các tài khoản mà không cần phải nhập mật khẩu nhiều lần, tăng cường tính bảo mật và tiện lợi cho người dùng.
- Mã hóa dữ liệu: SSH có khả năng mã hóa dữ liệu trong quá trình truyền tải. Đồng thời, SSH còn hỗ trợ xác thực thông tin thông qua việc kết hợp ID người dùng và mật khẩu, giữ cho quá trình kết nối giữa các máy chủ được thực hiện một cách an toàn và chính xác.
- Bảo vệ dữ liệu và thông tin quan trọng trên hệ thống máy chủ: Việc triển khai SSH đòi hỏi sự hiểu biết về cách cấu hình và quản lý giao thức này, nhưng sẽ mang lại nhiều lợi ích đáng giá đối với sự an toàn và bảo mật của hệ thống.
Một số lệnh SSH phổ biến
ls
Lệnh này được sử dụng để liệt kê tất cả các tệp và thư mục. Gợi ý là nên sử dụng lệnh với tùy chọn -l, và ta có lệnh ls -l, theo cách này, tất cả các tệp sẽ được liệt kê thuận tiện hơn, và bạn cũng sẽ có thêm chi tiết / thông tin về chúng. Một tùy chọn hữu ích khác là -a, option cũng giúp hiển thị tất cả các tệp, bao gồm cả các tệp / thư mục ẩn (các tệp có dấu "." ở trước, ví dụ: .ssh directory).
CD
Lệnh này được sử dụng để "di chuyển" giữa các thư mục (cd là viết tắt của " change directory"). Sau khi liệt kê tất cả các tập tin và thư mục với ls, bạn có thể chọn một thư mục để "chuyển" đến. Ví dụ: giả sử có một directory home mà bạn muốn nhập. Thực hiện nhập lệnh cd home và bạn sẽ ngay lập tức thay đổi vị trí hiện tại thành "home". Bạn có thể thử dùng lại lệnh ls để kiểm chứng rằng thông tin xuất ra màn hình đã được thay đổi. Hoặc bạn cũng có thể điền một đường dẫn đầy đủ tới một thư mục nhất định trong trường hợp muốn đi sâu vào một thư mục nhiều cấp độ. Ví dụ: Bạn có thể sử dụng: cd home / TestDirectory / AnotherDirectory để tới thẳng thư mục có tên AnotherDirectory. Sử dụng lệnh cd .. (gồm dấu cách và hai dấu chấm sau cd) để di chuyển lên một cấp (trong ví dụ này chúng ta sẽ tới "TestDirectory" từ "AnotherDirectory").
MKDIR
Đây là lệnh được sử dụng để tạo một thư mục mới (viết tắt của "make directory"). Bạn sẽ có ngay một thư mục mới với tên đã chọn, ví dụ mkdir NewFolder sẽ tạo một thư mục mới với tên "NewFolder" trong thư mục hiện hành (thư mục hiện tại đang thao tác).
Touch
Lệnh touch sẽ tạo tệp mới với phần đuôi chỉ định. Ví dụ, touch NewFile.txt sẽ tạo một tệp txt mới có tên là "NewFile" trong thư mục hiện hành (phần đuôi có thể đặt tên tùy ý, thậm chí bạn có thể tạo một tệp mới mà không cần thêm phần đuôi, ví dụ: touch NewFile.
Rm
Được sử dụng để xóa tệp / thư mục đã chọn. Ví dụ: rm NewFile sẽ xóa tệp có tên là "NewFile" đã tạo trước đó. Nếu bạn muốn loại bỏ một thư mục và tất cả các thư mục con bên trong, sử dụng rm -r NewFolder để xóa thư mục "NewFolder" và tất cả các thư mục chứa bên trong nó.
Cat
Lệnh cat sẽ hiển thị nội dung của tập tin. Ví dụ, dùng cat info.txt để xuất nội dung tập tin lên màn hình. Hoặc ví dụ khác: cat info.txt info2.txt> mergedinfo.txt sẽ hợp nhất hai tệp "info.txt" và "info2.txt" với nhau và ghi nội dung đã hợp nhất vào tệp "mergedinfo.txt".
Pwd
Lệnh này sẽ hiển thị vị trí hiện tại của bạn trong hệ thống tệp. Ví dụ, gõ pwd, kết quả trả về có thể là như sau: "home/user/public_html".
Cp
Lệnh này được sử dụng để sao chép các tập tin và thư mục.
Cú pháp là: cp [options] source dest
Để sao chép, bạn gõ file muốn copy thay cho source, thay dest bằng đường dẫn bạn muốn copy tới (đường dẫn có dạng path/folder/file). Nếu bạn gõ một tên đích không tồn tại, ví dụ, bạn có tệp gôc là oldfile.txt và tệp đích là newfile.txt, bạn sẽ đơn giản là copy tệp oldfile.txt và dán nó vào thư mục hiện tại bằng tên mới.
Mv
Lệnh này hoạt động giống như lệnh cp, nhưng thay vì copy, command này sẽ di chuyển các file. Lệnh này cũng có thể được sử dụng để đổi tên tệp. Nếu lấy 1 ví dụ tương tự với lệnh cp, (trong thư mục hiện tại đang có một tệp oldfile.txt), khi gõ lệnh: mv oldfile.txt newfile.txt, kết quả file oldfile.txt sẽ được dổi tên thành newfile.txt.
Grep
Command này tìm kiếm chuỗi đã cho trong các file / folder. Ví dụ: grep 'word' file sẽ tìm kiếm cụm từ 'word' trong file có tên là "file". grep sẽ trả về toàn bộ các dòng có chứa "word" từ file nếu cụm từ được tìm thấy. Ví dụ, có một dòng 'All in all it's just another word in a sentence ' trong tệp tên "file", sử dụng lệnh grep 'word', dòng này sẽ được xuất ra màn hình vì có chứa từ cần tìm.
Find
Lệnh này sẽ tìm kiếm các thư mục cho một hay nhiều file đáp ứng các tiêu chuẩn nhất định (tên, kích thước, loại tệp). Ví dụ: find. -name "* .html" Lệnh này sẽ xuất tất cả các tệp trong thư mục hiện tại có phần đuôi là ".html" (chú ý cách sử dụng ký tự "*" trong lệnh, đó là ký tự đại diện cho biết rằng bất kỳ thông tin gì trước ". Html" cũng sẽ được tìm kiếm chỉ cần file đó kết thúc bằng ".html".
Vi / nano
Lệnh này được sử dụng để nhập và chỉnh sửa nội dung văn bản. Ví dụ: nano newfile sẽ tạo một tệp mới có tên là "newfile" và khởi động trình chỉnh sửa nano hoặc chỉnh sửa tệp đã tồn tại có tên là "newfile" bằng trình chỉnh sửa nano. Lệnh vi cũng tương tự như vậy, khởi động một trình soạn thảo khác có tên là "vi".
History
Lệnh sẽ hiển thị các lệnh được sử dụng cuối cùng. Ví dụ: history 20 sẽ hiển thị ra 20 lệnh được nhập cuối cùng trong Terminal.
Clear
Lệnh dùng để xóa tất cả văn bản khỏi màn hình Terminal.
Tar
Lệnh này được sử dụng để tạo hoặc trích xuất các tệp lưu trữ tar.gz. Hầu hết các phần mềm nhị phân của nhà cung cấp bên thứ 3 đều ở dạng lưu trữ tar.gz.
- Để tạo lưu trữ tar.gz của một thư mục, sử dụng lệnh:
- tar cvzf ArchiveName.tar.gz/path/to/directory
- Để giải nén các tệp này, sử dụng lệnh:
- tar xvzf FileName.tar.gz
Diễn giải thành phần lệnh như sau:
- x yêu cầu tar trích xuất tệp
- c cho tar biết cần tạo một kho lưu trữ
- v là viết tắt của verbose tức là tar sẽ in ra tất cả các tên tệp trong bảng điều khiển.
- z chỉ thị tar để giải nén lưu trữ
- f cho tar biết rằng bạn đang cung cấp tên tệp của tệp lưu trữ
Wgetis
Được sử dụng để tải xuống các tệp từ internet. Ví dụ: để tìm tải tệp từ internet và lưu trữ tệp trong thư mục hiện tại, sử dụng lệnh:
- wget http://fileurl/filename.ext
Du
Được sử dụng để tìm size của một tệp. Sử dụng du -h/filepath để xác định 1 tệp nào đó chiếm bao nhiêu không gian.
Theo tech.vccloud.vn via www.hostinger.com
>> Có thể bạn quan tâm: Sử dụng SSH an toàn với Fail2ban