ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN o Tài liệu hướng dẫn thực hành HỆ ĐIỀU HÀNH Biên soạn: ThS Phan Đình Duy ThS Nguyễn Thanh Thiện KS Trần Đại Dương ThS Trần Hoàng Lộc KS Thân Thế Tùng MỤC LỤC BÀI 2. LẬP TRÌNH TRONG MÔI TRƯỜNG SHELL .2 Nội dung thực hành .3 Sinh viên chuẩn bị .4 Hướng dẫn thực hành .5 Bài tập thực hành .6 Bài tập ôn tập. 58 NỘI QUY THỰC HÀNH 1. Sinh viên tham dự đầy đủ các buổi thực hành theo quy định của giảng viên hướng dẫn (GVHD) (6 buổi với lớp thực hành cách tuần hoặc 10 buổi với lớp thực hành liên tục).
Sinh viên phải chuẩn bị các nội dung trong phần “Sinh viên viên chuẩn bị” trước khi đến lớp. GVHD sẽ kiểm tra bài chuẩn bị của sinh viên trong 15 phút đầu của buổi học (nếu không có bài chuẩn bị thì sinh viên bị tính vắng buổi thực hành đó). Sinh viên làm các bài tập ôn tập để được cộng điểm thực hành, bài tập ôn tập sẽ được GVHD kiểm tra khi sinh viên có yêu cầu trong buổi học liền sau bài thực hành đó. Điểm cộng tối đa không quá 2 điểm cho mỗi bài thực hành.
LẬP TRÌNH TRONG MÔI TRƯỜNG SHELL 2.1 Mục tiêu Bài thực hành này giúp sinh viên: ● Làm quen và tìm hiểu cách sử dụng ngôn ngữ shell để lập trình ● Thực hành lập trình một số cấu trúc điều khiển cơ bản của shell ● Viết được một số chương trình đơn giản bằng ngôn ngữ shell 2.2 Nội dung thực hành ● Thực hành các lệnh tương tác với hệ điều hành Linux thông qua shell ● Tìm hiểu và thực hành ngôn ngữ shell 2.3 Sinh viên chuẩn bị Trong bài thực hành LAB 1, chúng ta đã biết cách sử dụng máy ảo để cài đặt hệ điều hành Ubuntu và thực hành các thao tác cơ bản trên hệ điều hành. Có thể thấy, việc sử dụng terminal để gõ lệnh phần nào cũng sẽ mang lại cảm giác nhàm chán, đặc biệt những 1 người mới bắt đầu ít nhiều sẽ gặp khó khăn trong việc soạn thảo các file văn bản, hay file code. Phần chuẩn bị này sẽ hướng dẫn sinh viên cách sử dụng công cụ Visual Studio Code làm giao diện tuy đơn giản nhưng vô cùng hiệu quả khi lập trình trong Ubuntu. Ngoài ra, quy trình này cũng được áp dụng nhiều trong các doanh nghiệp, do đó, sinh viên sẽ có kinh nghiệm để tự tin hơn trong các công việc sau này.1 Cài đặt Visual Studio Code Visual Studio Code (viết tắt là VS Code) là một trình biên tập (editor) rất phổ biến trong cộng đồng các nhà phát triển và lập trình viên.
Khác với Visual Studio vốn là một IDE có đầy đủ chức năng từ việc viết code, biên dịch, debug, đóng gói, hỗ trợ cho nhiều ngôn ngữ lập trình, VS Code đơn thuần là một trình biên tập được dùng để viết code. Việc này làm VS Code khá nhẹ để cài đặt và rất dễ sử dụng. Điểm mạnh của VS Code nằm ở khả năng tùy biến theo nhu cầu của người sử dụng, ví dụ, nếu người dùng muốn lập trình C có thể cài đặt trình biên dịch riêng (sẽ trình bày ở LAB 3) và tích hợp vào VS Code, VS Code sẽ hỗ trợ khả năng nhắc lệnh và giao diện tương ứng, điều này làm cho việc viết code, chạy, và debug trở nên dễ dàng hơn. Trong bài thực hành này, VS Code được cài đặt và sử dụng như một nơi trung gian để giao tiếp với máy ảo, viết các file kịch bản và thực thi các file kịch bản này.
2 Sinh viên có thể tải VS Code và thực hiện cài đặt theo hướng dẫn tại đây: https://code. Giao diện khởi chạy của VS Code 2.2 Cài đặt SSH SSH, hay còn gọi với tên đầy đủ là Secure Shell, là một phương thức đăng nhập từ xa an toàn từ một máy tính đến một máy tính khác. Nó cung cấp một số tùy chọn thay thế cho việc xác thực mạnh, bảo vệ tính bảo mật và toàn vẹn của giao tiếp thông qua các phương thức mã hóa mạnh. SSH thường được doanh nghiệp sử dụng cho các mục đích sau: 3 ● Cung cấp kết nối an toàn cho các người dùng và các tiến trình tự động.
● Truyền tập tin tương tác và tự động. ● Thực hiện các lệnh từ xa. ● Quản lý cơ sở hạ tầng mạng và các thành phần hệ thống quan trọng khác. Trong nhiều tình huống, nhân viên sẽ cần phải thực hiện truy cập từ xa vào server của công ty, do đó, việc biết cài đặt và sử dụng SSH là một trong các kỹ năng cơ bản cần có trong các công ty IT.
Quy trình kết nối sử dụng SSH được trình bày trong Hình 2. Quy trình kết nối qua phương thức SSH ● Bước 1: Client khởi tạp giao tiếp tới server. ● Bước 2: Server gửi public key tới client. ● Bước 3: Hai bên kiểm tra tham số và mở kênh bảo mật.
● Bước 4: User có thể đăng nhập vào server. 4 Có thể thấy trong mô hình trên, để sử dụng phương thức SSH để đăng nhập từ xa vào server, ta sẽ cần cấu hình trên cả client và server. Để mô phỏng việc kết nối này, ta sẽ dùng chính máy ảo đã tạo trong LAB 1 để thực tập. Cụ thể: ● Client: máy khởi tạo kết nối từ xa.
Trong phần thực hành này, ta sẽ dùng máy chính để làm client. Như vậy client có thể chạy bất kỳ hệ điều hành nào trong số Windows, MacOS hoặc Linux. ● Server: Trong phần thực hành này, ta sẽ dùng máy ảo làm server. Như vậy, server hiện đang chạy Linux.1 Cài đặt SSH Client [THỰC HIỆN TRÊN CLIENT] Trong các hệ điều hành được liệt kê ở trên, nhà phát triển đã mặc định cài đặt OpenSSH - một trình điều khiển SSH rất phổ biển - sẵn cho người dùng.
Tuy nhiên, để chắc chắn, ta nên kiểm tra xem máy đã có SSH chưa bằng cách: ● Mở terminal trên MacOS, Ubuntu hoặc cmd/powershell trên Windows ● Gõ lệnh ssh ● Nếu shelll không báo lỗi không tìm thấy lệnh và trả về như bên dưới thì có nghĩa là máy đã được cài đặt SSH rồi 5 Hình 3. Kết quả lệnh ssh trả về trên Windows Hình 4. Kết quả lệnh ssh trả về Mac 6 Trong trường hợp máy chưa được cài đặt OpenSSH, thì có thể thực hiện cài đặt như sau: ● Đối với máy Windows: o Vào Settings --> Apps --> Optional Features o Bấm vào nút Add a feature o Gõ để tìm OpenSSH Client và bấm Install ● Đối với máy Mac: mặc định đã được cài đặt ● Đối với máy Ubuntu: o Gõ lệnh: sudo apt-get update o Gõ lệnh: sudo apt-get upgrade o Gõ lệnh: sudo apt-get install openssh-client 2.2 Cài đặt SSH Server [THỰC HIỆN TRÊN SERVER] Như đã trình bày ở trên, máy ảo Ubuntu sẽ được sử dụng để làm server, do đó phần này chỉ hướng dẫn cách để cài đặt và cấu hình SSH Server trên hệ điều hành Ubuntu. ● Để cài đặt SSH Server trên Ubuntu ta thực hiện lần lượt các lệnh sau: sudo apt-get update sudo apt-get upgrade sudo apt install openssh-server 7 ● Mặc định nhiều hệ thống sẽ chặn port 22 dùng để giao tiếp SSH, do đó ta cần khai báo với tường lửa cho phép giao tiếp SSH qua port này: sudo ufw allow ssh ● Sau khi cài đặt thành công, ta cần bật SSH trên server lên bằng câu lệnh: sudo service ssh restart ● Sau cùng, để chắc chắn SSH đã chạy, ta kiểm tra lại bằng câu lệnh: sudo service ssh status Hình 5.
Kiểm tra và thấy SSH đang chạy Dành cho WSL và Multipass: Mặc định trên WSL và Multipass, user đăng nhập mà không cần nhập mật khẩu, việc này không tuân thủ các nguyên tắc xác thực mạnh của SSH. Do đó để sử dụng SSH kết nối đến máy ảo được tạo bởi WSL và Multipass, ta cần thực hiện thêm bước sau đây: ● Mở file ssdh_config bằng lệnh nano: sudo nano /etc/ssh/sshd_config ● Tìm dòng PasswordAuthentication và đặt giá trị là yes 8 ● Tìm dòng KbdInteractiveAuthentication và đặt giá trị là no ● Nếu các dòng trên đang bị comment thì kích hoạt lại bằng cách xóa dấu # ở đầu dòng. Hai dòng màu trắng là hai dòng cần chỉnh lại Dành cho Virtual Box: Vui lòng xem tại đây: https://averagelinuxuser.com/ssh-into- virtualbox/ Khi cài đặt Port Forwarding thì thiết lập như sau: Name: ssh Protocol: TCP Host IP: Host Port: 22 9 Guest Port: 22 Nếu sử dụng Virtual Box, địa chỉ IP kết nối tới máy ảo sẽ là 127.3 Tạo public key trên Client [THỰC HIỆN TRÊN CLIENT] OpenSSH hỗ trợ nhiều phương thức xác thực khác nhau giữa client và server, trong đó nổi bật nhất là 2 cách sau: ● Xác thực bằng mật khẩu. ● Xác thực bằng public key.
Đây là phương pháp bảo mật thay thế cho việc sử dụng mật khẩu và được khuyến khích sử dụng trên VPS, Cloud, hay thậm chí là server dân dụng. Phần này sẽ hướng dẫn sinh viên cách tạo public key và sử dụng nó để truy cập vào SSH Server. ● Bước 1: Kiểm tra xem trong thư mục người dùng đã có thư mục .ssh chưa, nếu chưa thì tạo thư mục này (Trong Windows thì có thể tạo thư mục .ssh trong thư mục C:\Users\<username>): mkdir -p ~/.ssh ● Bước 2: Tạo cặp key (public - private): ssh-keygen -t rsa Trong bước này, ta cần phải đặt tên cho file key và chọn nơi lưu nó (khuyến khích chọn mặc định theo đề xuất của chương trình). Tạo cặp key bằng lệnh Ngoài ra, trình tạo key cũng sẽ hỏi nếu người dùng nhập passphrase (mật khẩu) cho cặp key, bỏ trống nếu không muốn đặt mật khẩu.
Sau khi tạo xong, 02 file sẽ được tạo ra bao gồm ~/.ssh/id_rsa và ~/.ssh/id_rsa.pub lần lượt là private key và pubic key của Client. ● Bước 3a (MacOS/Linux): Cài đặt public key cho SSH Server bằng lệnh (thực hiện trên Client): ssh-copy-id -i ~/.ssh/id_rsa.ssh/id_rsa.pub: là đường dẫn đến public key, nếu sinh viên không lưu trong thư mục trên, vui lòng ghi đúng lại thư mục mà sinh viên lưu public key. 11 o [user]: là username dùng để đăng nhập máy ảo. o [host]: địa chỉ IP hoặc tên miền trỏ tới máy ảo.
Để tìm địa chỉ IP này, trong máy ảo, cài lệnh ifconfig (sudo apt-get install net-tools) và gõ lệnh ifconfig để xem IP. Địa chỉ IP của máy ảo Ví dụ câu lệnh trên có thể được viết thành: ssh-copy-id -i ~/.ssh/id_rsa.ssh\id_rsa.ssh/authorized_keys 12 o Tương tự như trên, thay [username], [user], và [host] bằng thông tin tương ứng. o Nếu bị báo lỗi thư mục .ssh/ không tồn tại, thì tạo thư mục bên máy ảo rồi thực hiện lại bước trên. Khi thực hiện các thao tác trên, hãy đảm bảo rằng SSH Server đã được bật theo hướng dẫn ở mục 2.