SSH là gì? Thay vì bắt đầu với những thuật ngữ công nghệ thông thường bạn thấy ở đầu một bài viết trên Cloudflare hoặc Wikipedia, hãy bắt đầu bằng một ví dụ, chắc chắn bạn sẽ hiểu rõ hơn về nó.

Tags: #technical, #ssh, #web, #cloud

Nếu bạn được yêu cầu dạy SSH cho một ông lái xem ôm. Bạn sẽ làm như nào?Mục đích của bài viết này là giả vờ như bạn không có kinh nghiệm trước đó với SSH hoặc thậm chí không có nhiều kiến thức về công nghệ nói chung, sau khi bạn đọc xong bài viết này, bạn sẽ:

Không sợ hãi trước thuật ngữ mơ hồ “SSH” vì bạn có một hình ảnh cụ thể trong đầu.
Hiểu cách các lập trình viên sử dụng SSH để test code, cấu hình máy chủ, và nhiều thứ khác.
Hiểu cách các giao thức mã hóa/xác thực của SSH - điểm ưu việt của nó so với các công cụ khác.

Bắt đầu thôi!

Hiểu về SSH

SSH là gì? Thay vì bắt đầu với những thuật ngữ công nghệ thông thường bạn thấy ở đầu một bài viết trên Cloudflare hoặc Wikipedia, hãy bắt đầu bằng một ví dụ, chắc chắn bạn sẽ hiểu rõ hơn về nó.



Hãy tưởng tượng bạn vừa tan học và trở về nhà, vừa đến phòng. Bạn cảm thấy chán chường, và quyết định đeo kính thực tế ảo để truy cập vào Metaverse - một trải nghiệm chìm đắm mà nó mang bạn ra khỏi thế giới vật lý và đưa bạn vào một môi trường ảo. Bạn đăng nhập, nhập tên người dùng và mật khẩu để xác minh đó là bạn. Một khi đã hoàn tất, bạn thấy hình ảnh avatar số hóa của mình xuất hiện. Nó trông giống hệt bạn: cao to, đẹp trai, và có gu ăn mặc. Trước mặt bạn, bạn thấy một khu rừng, thực ra, một biểu diễn số hóa của một khu rừng. Vẫn đứng trong phòng của bạn với kính thực tế ảo trên, bạn di chuyển đầu để nhìn xung quanh, và avatar của bạn cũng làm như vậy. Bạn nói “xin chào” trong phòng của bạn, và avatar của bạn cũng nói “xin chào” trong thế giới ảo.Trong thực tế, đây là cách dịch ví dụ:

Bạn => nhà phát triển
Phòng của bạn => laptop của bạn, hoặc bất kỳ máy tính để bàn nào đó mà bạn đang dùng.
Metaverse => một máy chủ mà bạn đang cố gắng truy cập từ máy tính cá nhân của bạn.
Kính thực tế ảo => đường hầm SSH cho phép bạn truy cập vào máy từ xa (Metaverse) từ máy tính cá nhân (phòng).
Màn hình đăng nhập => cặp khóa SSH đảm bảo chỉ những bên được ủy quyền mới có thể sử dụng đường hầm SSH. Tôi sẽ giải thích kỹ hơn về điều này trong một phần sau của blog này.

Ví dụ này giúp bạn hiểu rõ hơn. Khi bạn nghe ai đó nói “Tôi đã SSH vào máy chủ”, bạn không cần phải hoảng sợ trước khái niệm mơ hồ “SSH”. Thay vào đó, bạn hãy hiểu nó như là “Tôi đã đeo kính thực tế ảo để truy cập vào Metaverse”, và điều này sẽ giúp bạn hình dung rõ hơn.Nói một cách dễ hiểu, SSH giống như một đường hầm bí mật, an toàn cho phép bạn kết nối với một máy tính khác qua internet. Nó giúp bạn thực hiện các công việc trên máy tính đó như thể bạn đang ngồi trực tiếp trước nó.Tất nhiên, đây chỉ là sự hiểu biết về SSH ở mức độ cơ bản. Hiện tại, tôi mong là trong đầu bạn có nhiều câu hỏi về SSH. Tôi không thể đọc được suy nghĩ của bạn, nhưng đây là một số câu hỏi mà tôi đã trả lời cho chính mình, và tôi nghĩ rằng nó sẽ hữu ích khi giải thích cho các bạn.

Vì sao lại cần dùng SSH?

SSH quan trọng vì các lập trình viên thường cần truy cập vào các máy chủ. Các ứng dụng web bây giờ đều rất lớn, sẽ cần tiêu thụ quá nhiều bộ nhớ và sức mạnh tính toán. Tuy nhiên, trên laptop nhỏ bé lại quá yếu đều chạy các ứng dụng web đó. Nên bạn cần phải dùng các nền tảng đám mây như AWS, Azure, hoặc Google Cloud, tất cả đều cần được truy cập từ xa. Mặt khác, thường các nhóm lập trình viên được phân bố ở các địa điểm khác nhau, vì vậy máy chủ cho phép các thành viên trong nhóm cộng tác và chia sẻ mã nguồn một cách nhất quán ngay cả khi họ không cùng ở một địa điểm vật lý.Bây giờ tôi sẽ lấy 2 ví dụ khi mà các lập trình viên cần "SSH" đến một máy chủ.

Deploy Code

Khi là một lập trình viên, bạn cần triển khai một phiên bản mới của trang web của mình lên máy chủ test. Đây là cách các lập trình viên làm, đó là sử dụng SSH.Đầu tiên, trên máy tính cá nhân, bạn sẽ đẩy những thay đổi mới nhất của mã nguồn lên Git.Sau đó, bạn sẽ SSH vào máy chủ mà bạn cần deploy lên test.Nhân tiện, bạn có thể đang nghĩ tại sao tôi cần có môi trường test trên một máy chủ chứ không phải trên máy cá nhân của mình. Dưới đây là một số lý do.

1.Mô phỏng cài đặt thực tế, đảm bảo là code chạy được trên môi trường thật chứ không phải chỉ chạy được trên mỗi máy tính của dev.
2.Giúp cho các thành viên trong đội có thể test ứng dụng web đó bất kì lúc nào. Nếu bạn chỉ deploy lên máy tính cá nhân, khi ai đó cần test thì họ phải chạy đến chổ bạn. Không ổn tí nào.


Cuối cùng, bạn đã SSH vào máy chủ môi trường test từ xa. Bạn có thể "git pull" những thay đổi mã nguồn mới nhất về máy chủ đó, rồi biên dịch, rồi chạy.

Cập nhật các cài đặt cho máy chủ

Chẳng hạn website của bạn đã rất thành công và có nhiều người truy cập. Lúc này bạn có thể cần thay đổi một số cài đặt như là để tăng khả năng chịu tải, thay đổi cài đặt của MySQL. Các lệnh mà bạn có thể cần thao tác là:

1.SSH vào máy chủ: ssh user@your-server-ip
2.Đến thư mục chứa file config cd /etc/apache2
3.Sao lưu lại file cài đặt hiện có cp apache2.conf apache2.conf.bak
4.Chỉnh sửa file config. vi apache2.conf
5.Xác nhận, áp dụng các thay đổi apache2ctl configtest

Tại sao lại là SSH mà không phải cái khác?

Một câu hỏi mà tôi đã đặt ra khi học về SSH là “có những phương thức nào khác SSH, và tại sao SSH lại được ưu tiên sử dụng”? Có lẽ đây là thời điểm thích hợp để tìm hiểu một chút về lịch sử.

Trước khi SSH được sử dụng rộng rãi, đã có những giao thức khác để truyền thông giữa hai máy. Một số giao thức đáng chú ý bao gồm Telnet, RSH, FTP và Rlogin. Nhưng tất cả chúng đều thiếu các tính năng mã hóa và bảo mật.



Để minh họa, hãy xem xét cách mà nó có thể xảy ra. Một hacker có thể truy cập vào hệ thống mạng nơi Telnet đang hoạt động. Hắn sử dụng một công cụ như Wireshark để ghi lại dữ liệu truyền đi qua mạng. Một khi hacker nhận được các gói tin được tải xuống, hắn ta chỉ cần tìm kiếm thông tin đăng nhập. Tất cả dữ liệu đều ở dạng văn bản thuần túy, chưa bị mã hoá, vì vậy nếu hacker tìm thấy nó, hắn có thể sử dụng thông tin đăng nhập của bạn. Vậy nên là các công cụ này không an toàn.Năm 1995, SSH được phát minh, nó có 2 điểm vượt trội:

Mã hóa dữ liệu

Giả sử một phần của dữ liệu được truyền từ máy của tôi đến một máy từ xa là chuỗi "username:jesswang;password: IamC00l!". Nếu không có mã hóa (với các giao thức cũ như Telnet hoặc FTP), một hacker có thể đọc chuỗi đó giống như bạn vừa đọc.

Với mã hóa, dữ liệu mà họ nhận được có thể trông giống như "H23kLs*^!d8%PwZx0KsL!9B#N%u@i8". Trên thực tế, dữ liệu được mã hóa sẽ là một chuỗi byte khác nhau tuân theo các tiêu chuẩn thuật toán mã hóa.

Xác thực

Các chương trình cũ như Telnet chủ yếu dựa vào xác thực dựa trên mật khẩu. Khi bạn kết nối với một hệ thống từ xa bằng Telnet, máy chủ Telnet yêu cầu bạn nhập tên người dùng và mật khẩu để đăng nhập.

Tuy nhiên, Telnet truyền mật khẩu của bạn dưới dạng văn bản thuần, làm cho hacker dễ đọc được thông tin.

SSH chủ yếu sử dụng một phương pháp khác (và tốt hơn) gọi là xác thực khóa công khai. Tôi sẽ giải thích cách nó hoạt động dưới đây để bạn có thể hiểu cách thông tin của bạn được bảo vệ tốt hơn khỏi hacker.

Đầu tiên, thông tin của bạn được đặt trong một chiếc cặp và bạn tự đặt khóa của mình lên nó.



Bạn gửi chiếc cặp đến máy chủ. Máy chủ không có chìa khóa để mở khóa chiếc cặp của bạn, vì vậy thay vào đó, máy chủ đặt ổ khóa của mình lên chiếc cặp.



Máy chủ gửi chiếc cặp trở lại cho bạn, và bạn có thể mở cặp dùng chìa khoá mà bạn có.

Bạn gửi chiếc cặp trở lại cho máy chủ, nhưng lần này bạn khoá chiếc cặp bằng ổ khoá của máy chủ.. Sau đó, máy chủ mở chiếc cắp bằng chìa khoá mới.



Đó là ý chính của xác thực khóa công khai! Tuy nhiên, SSH vẫn hỗ trợ xác thực dựa trên mật khẩu, nhưng ngay cả khi đó, mật khẩu cũng được mã hóa, vì vậy nếu một hacker chặn nó, họ sẽ không thể đọc được.

Làm sao tôi có thể dùng SSH?

Đến lúc này có lẽ bạn đã học quá nhiều lý thuyết rồi. Dưới đây là các lệnh thực tế mà bạn sẽ chạy để SSH vào một máy chủ.Để SSH vào một máy chủ, bạn thường chạy một cái gì đó như:ssh username@server_ip_or_hostnameBạn sẽ thay thế username bằng tên người dùng thực tế của bạn trên máy chủBạn sẽ thay thế server_ip_or_hostname bằng địa chỉ IP hoặc tên máy chủ. Ví dụ, ssh [email protected].Sau khi chạy lệnh, bạn có thể được yêu cầu nhập mật khẩu cho tên người dùng của máy chủ. Hoặc nếu máy chủ của bạn sử dụng xác thực dựa trên khóa mà chúng ta đã thảo luận trong phần trước đó, bạn có thể không cần nhập mật khẩu.Khi bạn đã đăng nhập, bạn có thể bắt đầu chạy các câu lệnh. Những lệnh này sẽ được thực thi trên máy chủ từ xa mà bạn đã kết nối tới.Tôi hiểu rằng việc học không hoàn chỉnh nếu bạn không gõ các lệnh để xem điều gì xảy ra. Nếu bạn đã có một máy chủ từ xa cho công việc hoặc cá nhân mà bạn đã thiết lập, hãy thử ngay. Nếu bạn không có một máy chủ từ xa để kết nối, không sao. Bạn có thể làm theo các bước sau:

1.Truy câp trang web: http://sdf.org/
2.Tạo một tài khoản. Bạn có thể nhận được một email cung cấp mật khẩu được tạo cho tài khoản của bạn. Bạn có thể phải đợi một lúc để nhận email đó.
3.Bạn có thể SSH vào hệ thống UNIX công cộng bằng cách chạy ssh <tên_người_dùng_của_bạn>@sdf.org. Ví dụ, tôi đặt tên người dùng của mình là poop123. Vì vậy, tôi chạy ssh [email protected].
4.Khi được hỏi mật khẩu, hãy nhập mật khẩu bạn nhận được trước đó.
5.Bạn đã thành công trong việc SSH vào một máy chủ! Bạn có thể chạy các lệnh như echo 'hello world' để in ra "hello world" hoặc ls để xem danh sách các tệp trong thư mục hiện tại của bạn.

SYDEXA
We learn, we share, we grow together!

About

  • Sydexa

Resources

  • Docs
  • Sydexa Hub

Contact

  • For Work
  • Report

Members

  • Sign in
  • Sign up
  • Portal
@ Sydexa 2024. All copyrights reserved