Linux

Ngày 2: Kiến thức cơ bản về Linux

SSH & Máy chủ Web

Như đã đề cập một vài lần, có thể bạn sẽ cần quản lý rất nhiều máy chủ Linux từ xa. Chính vì điều này, bạn sẽ cần đảm bảo rằng kết nối của mình với các máy chủ này được an toàn. Trong hôm nay, chúng ta sẽ đề cập đến một số kiến ​​thức cơ bản về SSH để giúp bạn tạo đường hầm an toàn (secure tunnel) đến các hệ thống của mình từ xa.

  • Thiết lập kết nối với SSH
  • Chuyển tập tin
  • Tạo khóa riêng của bạn

Giới thiệu SSH

  • Shell an toàn (secure shell)
  • Giao thức mạng
  • Cho phép liên lạc an toàn
  • Có thể bảo mật bất kỳ dịch vụ mạng nào
  • Thường được sử dụng với truy cập dòng lệnh (CLI) từ xa

Trong môi trường của chúng ta, nếu bạn đã theo dõi, chúng ta đã sử dụng SSH nhểng tất cả điều này đã được cấu hình và tự động hóa thông qua vagrant, vì vậy chúng ta chỉ phải chạy vagrant ssh là đã có thể truy cập vào máy ảo từ xa của mình.

Nếu máy chủ của chúng ta không nằm trên cùng hệ thống và ở rất xa với máy trạm, có thể trên môi trường cloud hoặc trên truvà tâm tâm dữ liệu và chỉ có thể truy cập qua Internet, chúng ta sẽ cần một cách an toàn để có thể truy cập vào hệ thống và quản lý nó.

SSH cung cấp một đường hầm an toàn giữa máy khách và máy chủ để hạn chế sự can thiệp của các tác nhân xấu.

Máy chủ có dịch vụ SSH luôn chạy và nghe trên cổng TCP cụ thể (thường là 22).

Nếu kết nối với thông tin đăng nhập chính xác hoặc một khoá SSH hợp lệ, chúng ta sẽ có quyền truy cập vào máy chủ đó.

Thêm bộ điều hợp mạng bắc cầu (bridged network adapter) vào hệ thống

Để thực hiện những điều này với Virtual Box VM hiện tại, chúng ta cần thêm bộ điều hợp mạng bắc cầu vào máy của mình.

Tắt nguồn máy ảo của bạn, nhấp chuột phải vào máy của bạn trong Virtual Box và chọn cài đặt.

Bây giờ hãy bật lại máy ảo và bây giờ nó sẽ có một địa chỉ IP trên máy cục bộ của chúng ta. Bạn có thể xác nhận điều này bằng lệnh IP addr.

Xác nhận máy chủ SSH đang chạy

Chúng ta biết SSH đã được định cấu hình trên máy vì chúng ta đã sử dụng nó với vagrant nhưng cũng có thể xác nhận bằng cách chạy

sudo systemctl status ssh

Nếu hệ thống của bạn không có server SSH thì bạn có thể cài đặt nó bằng lệnh sudo apt install OpenSSH-server

Sau đó, bạn muốn đảm bảo nếu tường lửa đang chạy, nó sẽ cho phép chúng ta kết nối tới server SSH. Việc này có thể được thực hiện với lệnh sudo ufw allow ssh, điều này không bắt buộc đối với cấu hình của chúng ta vì nó đã được tự động hóa với việc khi chúng ta khởi tạo bằng vagrant.

Truy cập từ xa – Mật khẩu SSH

Bây giờ, chúng ta đã có server SSH nghe trên cổng 22 cho mọi yêu cầu kết nối đến và chúng ta đã thêm mạng bắc cầu, chúng ta có thể sử dụng PuTTY hoặc ứng dụng SSH client trên máy cục bộ của mình để kết nối với hệ thống bằng SSH.

Hướng dẫn cài đặt PuTTy.

Sau đó nhấn mở, nếu đây là lần đầu tiên bạn kết nối với hệ thống này qua địa chỉ IP này, bạn sẽ nhận được cảnh báo này. Vì biết đây là hệ thống của chính mình nên bạn có thể chọn có.

Sau đó, chúng ta được yêu cầu nhập tên người dùng (vagrant) và mật khẩu (mật khẩu mặc định – vagrant). Bên dưới, bạn sẽ thấy chúng ta hiện đang sử dụng ứng dụng SSH client (Putty) để kết nối với máy ảo của mình bằng tên người dùng và mật khẩu.

Ở giai đoạn này, chúng ta được kết nối với VM từ máy khách từ xa và chúng ta có thể thực hiện các lệnh trên hệ thống của mình.

Truy cập từ xa – Khóa SSH

Trên đây là cách dễ dàng nhất để có quyền truy cập vào hệ thống của bạn, tuy nhiên nó vẫn dựa vào tên người dùng và mật khẩu. Nếu một kẻ xấu nào đó có quyền truy cập những thông tin này cộng với địa chỉ công khai hoặc IP của hệ thống của bạn thì nó có thể dễ dàng bị xâm phạm. Chính vì lý do đó, khoá SSH được cho là giải pháp tốt hơn.

Khóa SSH có nghĩa là chúng ta cung cấp một cặp khóa để cả máy khách và máy chủ đều biết rằng đây là đối phương là thiết bị đáng tin cậy.
Tạo một khóa rất dễ dàng. Trên máy cục bộ của chúng ta (Windows) chúng ta có thể sử dụng lệnh sau nếu bạn đã cài đặt ssh-client và tôi tin rằng câu lệnh tương tự sẽ hoạt động trên các hệ điều hành khác.

ssh-keygen -t ed25519

Tôi sẽ không đi sâu vào ed25519 là gì và có nghĩa như thế nào nhưng bạn có thể tự tìm kiếm nếu muốn hiểu thêm về mã hoá

Chúng ta đã tạo khóa SSH được lưu trữ trong C:\Users\micha/.ssh/

Nhưng để kết nối với máy ảo Linux của chúng ta, chúng ta cần sao chép khóa bằng lệnh ssh-copy-id [email protected]

Tôi đã sử dụng Powershell để tạo khóa trên máy khách Windows của mình nhưng không có ssh-copy-id ở đây. Có nhiều cách để bạn có thể thực hiện việc này trên Windows và chỉ cần tìm kiếm trên Google bạn sẽ có một giải pháp thay thế, còn tôi thì chỉ cần sử dụng git bash trên máy Windows của tôi để tạo một bản sao.

Bây giờ, chúng ta có thể quay lại Powershell để kiểm tra xem kết nối của chúng ta hiện có hoạt động với Khóa SSH mà không cần mật khẩu hay không.

Chúng ta có thể nâng cao tính bảo mật hơn nữa nếu cần bằng cách sử dụng cụm mật khẩu (passphrase). Chúng ta cũng có thể tiến thêm một bước nữa khi không cho phép kết nối bằng mật khẩu, có nghĩa là chỉ cho phép kết nối thông qua cặp khóa. Bạn có thể thực hiện điều này trong tệp cấu hình dưới đây

sudo nano /etc/ssh/sshd_config

Có một dòng là PasswordAuthentication yes và nó đang bị comment với ký tự ở đầu dóng. Bạn nên xoá ký tự này và thay đổi yes thành no, lưu tệp cấu hình và cuối cùng là khởi động lại dịch vụ SSH với sudo systemctl reload sshd

Thiết lập Máy chủ Web

Không liên quan cụ thể đến những gì chúng ta vừa thực hiện với SSH ở trên nhưng tôi muốn bao gồm bước này vì đây lại là một cài đặt khác mà bạn có thể thấy hơi khó khăn nhưng thực sự không khó đến như vậy.
Chúng ta đã có máy ảo Linux và sẽ thêm một máy chủ web apache để có thể host một trang web đơn giản và nó có thể phục vụ các client trong mạng nội bộ của chúng ta. Lưu ý rằng trang web này sẽ không thể truy cập được từ Internet, điều này là có thể nhưng nó sẽ không được đề cập trong bài viết này.
Bạn cũng có thể thấy stack này được gọi là LAMP stack.

  • Linux: Hệ điều hành
  • Apache: Máy chủ web
  • mySQL: Cơ sở dữ liệu
  • PHP: Ngôn ngữ lập trình

Apache2

Apache2 là một máy chủ HTTP mã nguồn mở. Chúng ta có thể cài đặt apache2 với câu lệnh sau

sudo apt-get install apache2

Để xác nhận rằng apache2 đã được cài đặt một cách chính xác, chúng ta có thể chạy sudo service apache2 restart

Sau đó, sử dụng địa chỉ mạng bắc cầu từ phần trên, mở trình duyệt và truy cập địa chỉ đó. Địa chỉ của tôi là http://192.168.169.135/

mySQL

MySQL là một cơ sở dữ liệu được sử dụng để lưu trữ dữ liệu cho trang web đơn giản của mình. Để cài đặt MySQL, chúng ta nên sử dụng lệnh sau sudo apt-get install mysql-server

PHP

PHP là ngôn ngữ kịch bản phía máy chủ (server-side scripting language), chúng ta sẽ sử dụng ngôn ngữ này để tương tác với cơ sở dữ liệu MySQL.

Thay đổi cấu hình đầu tiên mà chúng ta muốn thực hiện với apache là thay vì file index.html, chúng ta muốn nó sử dụng index.php.

Chúng ta sử dụng lệnh sudo nano /etc/apache2/mods-enabled/dir.conf và chuyển index.php lên mục đầu tiên trong danh sách.

Khởi động lại dịch vụ apache2 sudo systemctl restart apache2

Bây giờ, hãy xác nhận rằng hệ thống của chúng ta được cấu hình đúng cho PHP. Tạo tệp sau bằng cách sử dụng lệnh này, thao tác này sẽ mở một tệp trống ở định dạng nano.

sudo nano /var/www/html/90Days.php

Sau đó sao chép phần sau, sử dụng control + x để thoát và lưu lại tệp của bạn.

<?php
phpinfo();
?>

Bây giờ, hãy điều truy cập vào IP máy ảo Linux của bạn với 90Days.php ở cuối URL. http://192.168.169.135/90Days.php bạn sẽ thấy tương tự như bên dưới nếu PHP được cấu hình chính xác.

Cài đặt WordPress

Sau đó, tôi đã xem qua hướng dẫn này cài đặt WordPress trên LAMP stack của chúng ta, một số lệnh sẽ có ở bên dưới nếu không được đề cập tới trong hướng dẫn “cách cài đặt WordPress trên Ubuntu với LAMP”

sudo mysql -u root -p
CREATE DATABASE wordpressdb;
CREATE USER 'admin-user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpressdb.* TO 'admin-user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
sudo systemctl restart apache2
cd /var/www
sudo curl -O https://wordpress.org/latest.tar.gz
sudo tar -xvf latest.tar.gz
sudo rm latest.tar.gz

Tại thời điểm này, bạn đang ở Bước 4 trong bài hướng dẫn được liên kết, bạn sẽ cần làm chính xác theo các bước để đảm bảo có tất cả các quyền cần thiết cho thư mục WordPress.

Vì chỉ sử dụng trong mạng nội bộ nên bạn không cần phải “tạo khóa bảo mật” trong bước này. Chuyển sang Bước 5, là bước thay đổi cấu hình Apache cho WordPress.

Sau đó, nếu mọi thứ được cấu hình chính xác, bạn sẽ có thể truy cập qua địa chỉ mạng nội bộ của mình và trải qua các bước cài đặt WordPress.

Tự động hóa các tác vụ với các tập lệnh bash

Shell mà chúng ta sẽ sử dụng hôm nay là bash nhưng chúng ta sẽ sử dụng một shell khác vào ngày mai khi chúng ta hiểu rõ hơn về ZSH.

BASH – Bourne Again Shell
Chúng ta gần như có thể dành toàn bộ thời gian 7 ngày để viết shell script giống với các ngôn ngữ lập trình, bash cho chúng ta khả năng làm việc cùng với các công cụ tự động hóa khác để hoàn thành công việc.

Tôi biết nhiều người đã và đang viết một số tập lệnh shell phức tạp để thực hiện những tác vụ hàng ngày và một số trong số đó có thể là một trong những việc quan trọng nhất đối với doanh nghiệp của họ. Tôi không nói rằng chúng ta cần hiểu tập lệnh shell/bash vì mục đích này, đó không phải là cách tốt nhất. Nhưng chúng ta nên học shell/bash để có thể viết các tập lệnh giúp chúng ta có thể làm việc cùng với các công cụ tự động hóa của mình và cho các tác vụ thường ngày.

Một ví dụ về mà chúng ta đã sử dụng trong phần này có thể là VAGRANTFILE, chúng ta đã sử dụng nó để tạo máy ảo của mình. Chúng ta gó thể đóng gói nó thành một tập lệnh bash đơn giản nhằm xóa và chạy lại nó vào mỗi sáng thứ Hai để có một bản sao mới của máy ảo Linux của mình mỗi tuần. Chúng ta cũng có thể cài đặt tất cả các phần mềm trong LAMP stack đã được sử dụng trên máy ảo Linux thông qua một tập lệnh bash.

Một điều khác mà tôi đã nghe được là các câu hỏi viết các tập lệnh đang ngày càng trở nên phổ biến hơn trong các cuộc phỏng vấn.

Bắt đầu

Cũng giống như rất nhiều thứ mà chúng ta sẽ đề cập trong suốt 12 ngày, cách duy nhất để học là thông qua thực hành. Kinh nghiệm thực hành sẽ giúp tất cả những điều này in sâu vào trí nhớ cơ bắp của bạn.

Trước hết, chúng ta sẽ cần một trình soạn thảo văn bản. Ở trên, chúng ta đã đề cập đến hai trình soạn thảo văn bản phổ biến nhất và một chút về cách sử dụng chúng.

Hãy bắt đầu tạo tập lệnh shell đầu tiên của chúng ta.

touch 90DaysOfDevOps.sh

Tiếp theo là nano 90DaysOfDevOps.sh, thao tác này sẽ mở tập lệnh shell trống mới trong nano. Một lần nữa, bạn có thể chọn trình soạn thảo văn bản mà mình muốn ở đây.

Dòng đầu tiên của tất cả các tập lệnh bash sẽ giống như thế này #!/usr/bin/bash đây là đường dẫn đến tệp nhị phân bash của bạn.

Tuy nhiên, bạn nên kiểm tra điều này trong terminal bằng cách chạy which bash nếu bạn không sử dụng Ubuntu thì bạn cũng có thể thử whereis bash từ terminal.

Bạn có thể thấy các đường dẫn khác được liệt kê trong các tập lệnh shell đã được tạo, có thể bao gồm:

  • !/bin/bash
  • !/usr/bin/env bash

Ở dòng tiếp theo trong tập lệnh của chúng ta, tôi muốn thêm comment và thêm mục đích của tập lệnh hoặc ít nhất là một số thông tin về tác giả. Bạn có thể làm điều này bằng cách sử dụng ký tự #. Điều này cho phép chúng ta comment về các dòng cụ thể trong mã của mình và cung cấp mô tả về những gì mà các lệnh tiếp theo sẽ thực hiện. Tôi nghĩ rằng sẽ tốt hơn cho người dùng nếu các ghi chú rõ ràng và cẩn thận, đặc biệt nếu bạn đang chia sẻ chúng.

Đôi khi tôi sử dụng figlet, một chương trình mà chúng ta đã cài đặt trước đó trong bài về Linux để tạo một số hình vẽ bằng mã ASCI.

Tất cả các lệnh đã được sử dụng trước đó trong bài về Linux  có thể được sử dụng ở đây như một lệnh đơn giản để kiểm tra tập lệnh của chúng ta.

Hãy thêm một đoạn mã sau vào tập lệnh của chúng ta.

mkdir 90DaysOfDevOps
cd 90DaysOfDevOps
touch Day19
ls

Sau đó, bạn có thể lưu tệp này và thoát trình soạn thảo văn bản của mình, nếu chúng ta chạy tập lệnh của mình với ./90DaysOfDevOps.sh, bạn sẽ nhận được thông báo lỗi do không có đủ quyền. Bạn có thể kiểm tra quyền của tệp này bằng cách sử dụng lệnh ls -al và có thể thấy chúng ta không có quyền thực thi đối với tệp này.

Có thể thay đổi điều này bằng cách sử dụng chmod +x 90DaysOfDevOps.sh và sau đó bạn sẽ thấy x, có nghĩa là bây giờ chúng ta có thể thực thi tập lệnh của mình.

Bây giờ chúng ta có thể chạy lại tập lệnh của mình bằng cách sử dụng ./90DaysOfDevOps.sh. Sau khi chạy, tập lệnh hiện đã tạo một thư mục mới, thay thư mục hiện tại thành thư mục đó đó và cuối cùng tạo một tệp mới.

Những câu lệnh khá cơ bản nhưng bạn có thể tưởng tượng ra việc công cụ này có thể được sử dụng như thế nào để gọi các công cụ khác giúp cuộc sống của bạn dễ dàng hơn và có thể tự động hóa mọi thứ.

Biến, điều kiện

Phần lớn phần này lặp lại những gì chúng ta đã đề cập khi học Golang nhưng tôi nghĩ nó đáng để chúng ta tìm hiểu lại một lần nữa.

Biến

Các biến cho phép chúng ta xác định một giá trị được lặp lại, cụ thể được sử dụng trong toàn bộ tập lệnh.

Để thêm một biến, bạn chỉ cần thêm nó như sau vào một dòng trong tập lệnh của mình.
challenge="90DaysOfDevOps"

Bằng cách này, khi nào chúng ta sử dụng $challenge trong mã của mình và thay đổi biến thì nó sẽ được cập nhật trong cả tập lệnh.

Nếu bây giờ chúng ta chạy tập lệnh sh của mình,bạn sẽ tác vụ in ra dòng chữ đã được thêm vào tập lệnh của chúng ta.

Chúng ta cũng có thể sử dụng đầu vào của người dùng để gán cho các biến của chúng ta bằng cách sau:

echo "Enter your name"
read name

Sau đó chúng ta định nghĩa đầu vào được nhập là biến $name và có thể sử dụng biến từ đó.

Điều kiện

Có thể chúng ta muốn tìm hiểu xem ai đang tham gia thử thách và đã hoàn thành bao nhiêu ngày, chúng ta có thể xác định điều này bằng cách sử dụng các điều kiện if if-else else-if, đây là những gì chúng ta đã định nghĩa trong tập lệnh của mình .

#!/bin/bash
#  ___   ___  ____                   ___   __ ____              ___
# / _ \ / _ \|  _ \  __ _ _   _ ___ / _ \ / _|  _ \  _____   __/ _ \ _ __  ___
#| (_) | | | | | | |/ _` | | | / __| | | | |_| | | |/ _ \ \ / / | | | '_ \/ __|
# \__, | |_| | |_| | (_| | |_| \__ \ |_| |  _| |_| |  __/\ V /| |_| | |_) \__ \
#   /_/ \___/|____/ \__,_|\__, |___/\___/|_| |____/ \___| \_/  \___/| .__/|___/
#                         |___/                                     |_|
#
# This script is to demonstrate bash scripting!

# Variables to be defined

ChallengeName=#90DaysOfDevOps
TotalDays=90

# User Input

echo "Enter Your Name"
read name
echo "Welcome $name to $ChallengeName"
echo "How Many Days of the $ChallengeName challenge have you completed?"
read DaysCompleted

if [ $DaysCompleted -eq 90 ]
then
  echo "You have finished, well done"
elif [ $DaysCompleted -lt 90 ]
then
  echo "Keep going you are doing great"
else
  echo "You have entered the wrong amount of days"
fi

Bạn cũng có thể thấy từ phần trên rằng chúng ta sử dụng phép so sánh hoặc kiểm tra các giá trị với nhau để chuyển sang giai đoạn tiếp theo. Chúng ta có các một vài điểm đáng chú ý ở đây.

  • eq – nếu 2 giá trị bằng nhau sẽ trả về TRUE
  • ne – nếu 2 giá trị không bằng nhau sẽ trả về TRUE
  • gt – nếu giá trị đầu tiên lớn hơn giá trị thứ hai sẽ trả về TRUE
  • ge – nếu giá trị đầu tiên lớn hơn hoặc bằng giá trị thứ hai sẽ trả về TRUE
  • lt – nếu giá trị đầu tiên nhỏ hơn giá trị thứ hai sẽ trả về TRUE
  • le – nếu giá trị đầu tiên nhỏ hơn hoặc bằng giá trị thứ hai sẽ trả về TRUE

Chúng ta cũng có thể sử dụng tập lệnh bash để xác định thông tin về tệp và thư mục, điều này được gọi là điều kiện tệp.

  • -d file Đúng nếu tệp là một thư mục
  • -e file Đúng nếu tệp tồn tại
  • -f file Đúng nếu chuỗi được cung cấp là một tệp
  • -g file Đúng nếu id nhóm được đặt trên một tệp
  • -r file Đúng nếu tệp có thể đọc được
  • -s file Đúng nếu tệp có kích thước khác 0
FILE="90DaysOfDevOps.txt"
if [ -f "$FILE" ]
then
  echo "$FILE is a file"
else
  echo "$FILE is not a file"
fi

Chỉ cần chúng ta vẫn ở trong thư mục của mình, lệnh echo đầu tiên sẽ được in ra. Nhưng nếu chúng ta xoá tệp đó đi thì lệnh thứ hai sẽ được in ra.

Hy vọng rằng bạn có thể thấy điều này được sử dụng như thế nào để giúp bạn tiết kiệm thời gian khi tìm kiếm một tệp cụ thể trên hệ thống.
Tôi đã tìm thấy kho lưu trữ tuyệt vời này trên GitHub có rất nhiều tập lệnh hữu ích DevOps Bash Tools

Ví dụ

Kịch bản: Công ty của chúng ta có tên là “90DaysOfDevOps” đã hoạt động được một thời gian và giờ là lúc mở rộng nhóm từ 1 người lên nhiều người hơn trong những tuần tới. Tôi là người duy nhất cho đến nay biết quá trình onboard, vì vậy chúng ta muốn giảm bớt nút thắt cổ chai (bottleneck) đó bằng cách tự động hóa một số tác vụ.

Yêu cầu:

  • Người dùng có thể được chuyển vào dưới dạng đối số dòng lệnh.
  • Một người dùng được tạo với tên của đối số dòng lệnh.
  • Mật khẩu có thể nhận được dưới dạng đối số dòng lệnh.
  • Mật khẩu được đặt cho người dùng
  • Hiển thị thông báo tạo tài khoản thành công.

Hãy bắt đầu với việc tạo tập lệnh shell với touch create_user.sh

Trước khi tiếp tục, hãy làm cho tập lệnh có thể thực thi được bằng cách sử dụng chmod +x create_user.sh

Sau đó chúng ta có thể sử dụng nano create_user.sh để bắt đầu chỉnh sửa tập lệnh của mình cho kịch bản mà chúng ta đã đặt.

Chúng ta có thể xem xét yêu cầu đầu tiên “Người dùng có thể được chuyển vào dưới dạng đối số dòng lệnh”, chúng ta có thể làm như sao

#! /usr/bin/bash

#A user can be passed in as a command line argument
echo "$1"

Tiếp tục chạy phần này bằng cách sử dụng ./create_user.sh Michael thay thế Michael bằng tên của bạn khi bạn chạy tập lệnh.

Tiếp theo, chúng ta có thể thực hiện yêu cầu thứ hai “Người dùng được tạo với tên của đối số dòng lệnh”, điều này có thể được thực hiện bằng lệnh useradd. Tuỳ chọn -m để tạo thư mục home cho người dùng tại /home/username

#! /usr/bin/bash

#A user can be passed in as a command line argument
echo "$1 user account being created."

#A user is created with the name of the command line argument
sudo useradd -m "$1"

Cảnh báo: Nếu bạn không cung cấp tên người dùng thì nó sẽ báo lỗi do chúng ta chưa điền biến $1

Sau đó, chúng ta có thể kiểm tra xem tài khoản này đã được tạo chưa bằng lệnh awk -F: '{ print $1 }' /etc/passwd.

Yêu cầu tiếp theo của chúng ta là “Mật khẩu có thể được nhập dưới dạng đối số dòng lệnh.” Trước hết, chúng ta sẽ không bao giờ làm điều này trong môi trường sản xuất.

#! /usr/bin/bash

#A user can be passed in as a command line argument
echo "$1 user account being created."

#A user is created with the name of the command line argument
sudo useradd -m "$1"

#A password can be parsed as a command line argument.
sudo chpasswd <<< "$1":"$2"

Nếu sau đó chúng ta chạy tập lệnh này với hai tham số ./create_user.sh 90DaysOfDevOps password

Bạn có thể thấy từ hình ảnh bên dưới rằng chúng ta đã thực thi tập lệnh của mình, tập lệnh này đã tạo người dùng và mật khẩu của chúng ta, sau đó chúng ta chuyển sang người dùng đó theo cách thủ công và xác nhận bằng lệnh whoami.

Yêu cầu cuối cùng là “Thông báo tạo tài khoản thành công được hiển thị.” Chúng ta đã có dòng này ở dòng trên cùng của mã và có thể thấy ảnh chụp màn hình ở trên có dòng 90DaysOfDevOps user account being created được hiển thị.

Bây giờ tập lệnh này có thể được sử dụng để nhanh chóng tích hợp và thiết lập người dùng mới trên hệ thống Linux của chúng ta. Nhưng có lẽ thay vì một vài người trong lịch sử phải giải quyết vấn đề này và sau đó phải lấy cho người khác tên người dùng hoặc mật khẩu mới của họ, chúng tôi có thể thêm một số đầu vào của người dùng mà chúng tôi đã đề cập trước đó để nắm bắt các biến của chúng tôi.

#! /usr/bin/bash

echo "What is your intended username?"
read  username
echo "What is your password"
read  password

#A user can be passed in as a command line argument
echo "$username user account being created."

#A user is created with the name of the command line argument
sudo useradd -m $username

#A password can be parsed as a command line argument.
sudo chpasswd <<< $username:$password

Với các bước tương tác nhiều hơn,

Để kết thúc, chúng ta nên in ra một thông báo để nói rằng tài khoản người dùng mới đã được tạo xong.

Một điều tôi nhận thấy là chúng ta đang hiển thị mật khẩu trên đầu vào của mình, chúng ta có thể ẩn mật khẩu này bằng cách sử dụng cờ -s trong dòng mã read -s password

Nếu bạn muốn xóa người dùng mà bạn đã tạo cho mục đích thử nghiệm, bạn có thể làm điều đó với sudo userdel test_user

Tập lệnh mẫu

Một lần nữa, tôi không nói rằng đây sẽ là thứ mà bạn sẽ viết hàng ngày nhưng đó là thứ có thể sẽ làm nổi bật tính linh hoạt của những gì chúng ta có thể làm với tập lệnh shell.

Hãy nghĩ về bất kỳ nhiệm vụ lặp đi lặp lại nào mà bạn thực hiện hàng ngày, hàng tuần hoặc hàng tháng và cách bạn có thể tự động hóa để làm việc đó tốt hơn. Lựa chọn đầu tiên có thể sẽ là sử dụng tập lệnh bash trước khi chuyển sang thứ gì đó phức tạp hơn.

Tôi đã tạo một tệp bash rất đơn giản giúp tôi tạo cụm Kubernetes bằng cách sử dụng minikube trên máy cục bộ của mình cùng với các dịch vụ dữ liệu. Project Pace Nhưng tôi không cảm thấy điều này thích hợp để nêu ra ở đây vì chúng ta chưa đề cập đến Kubernetes.

Thiết lập máy trạm phát triển – những điều tuyệt vời

Đừng nhầm lẫn với việc thiết lập máy chủ Linux theo cách này, tôi chỉ muốn muốn thể hiện tính linh hoạt mà chúng ta có với các máy tính chạy Linux.

Tôi đã sử dụng máy tính chạy Linux gần một năm nay và tôi đã cấu hình nó theo cách tôi muốn từ góc nhìn và cảm nhận. Sử dụng máy ảo Ubuntu của chúng ta trên Virtual Box, chúng ta có thể xem một số tùy chỉnh mà tôi đã thực hiện cho các công việc hàng ngày của mình.

Tôi đã tổng hợp thành một video trên YouTube hướng dẫn phần còn lại để các bạn có thể theo dõi tốt hơn:

Cuối cùng, hệ thống của chúng ta sẽ trông giống như bên dưới:

Chúng ta cũng có thể thấy bash shell mặc định của mình bên dưới:

Phần lớn điều này có được nhờ dotfiles, thứ mà chúng ta sẽ trình bày trong phần cuối cùng của loạt bài về Linux này.

dotfiles

Đầu tiên, tôi muốn đi sâu vào dotfiles, tôi đã nói vào một ngày trước đây rằng Linux được tạo thành từ các tệp cấu hình.

Nói thêm rằng, tệp dotfile không chỉ được sử dụng để tùy chỉnh và làm cho màn hình của bạn trông đẹp mắt, mà nó còn giúp bạn tăng năng suất.

Như tôi đã đề cập, nhiều chương trình phần mềm lưu cấu hình của chúng trong các tệp dotfile này.

Mỗi tệp dotfile bắt đầu bằng . Bạn có thể đoán được cách đặt tên bắt nguồn từ đâu đúng không? (dot là “dấu chấm”)

Cho đến bây giờ, chúng ta đã sử dụng bash làm trình shell của mình, điều đó có nghĩa là bạn sẽ có .bashrc và .bash_profile trong thư mục chính của chúng ta. Bạn có thể xem bên dưới một vài tệp dotfile mà chúng ta có trên hệ thống.

Chúng ta sẽ thay đổi trình shell của mình, vì vậy sau này chúng ta sẽ thấy một dotfile cấu hình .zshrc mới.

Từ giờ bạn sẽ hiểu rằng nếu chúng ta đề cập đến dotfiles thì chúng là các tệp cấu hình. Chúng ta có thể sử dụng chúng để thêm alias cho dấu nhắc lệnh cũng như thêm các đường dẫn đến các vị trí khác nhau. Một số người chia sẻ dotfiles của họ một cách công khai. Bạn có thể tìm thấy trên GitHub của tôi MichaelCade/dotfiles, trong đó tệp .zshrc đã được tùy biến. Terminal tôi chọn là terminator cũng có một số tệp cấu hình trong thư mục và cũng có một số nền có thể được tùy chọn.

ZSH

Như tôi đã đề cập trong suốt quá trình tương tác với hệ thống, chúng ta đã sử dụng bash shell, shell mặc định với Ubuntu. ZSH rất giống với bash shell nhưng nó có một số ưu điểm so với bash.

Zsh có các tính năng như tự động hoàn thành câu lệnh với phím Tab, tìm kiếm tệp tự động, tích hợp biểu thức chính quy (regex) và có số lượng theme rất phong phú.

Chúng ta có thể sử dụng trình quản lý gói apt để cài đặt zsh trên hệ thống của mình. Hãy chạy sudo apt install zsh từ terminal của chúng ta. Tôi sẽ thực hiện việc này từ bên trong bảng điều khiển VM.

Khi lệnh cài đặt hoàn tất, bạn có thể chạy zsh bên trong terminal của mình, sau đó thao tác này sẽ bắt đầu tập lệnh cấu hình trình shell.

Tôi đã chọn cho câu hỏi trên và bây giờ chúng ta có thêm một số tùy chọn.

Bạn có thể thấy từ menu này rằng chúng ta có thể thực hiện một số tuỳ biến để làm cho ZSH được cấu hình theo nhu cầu của.

Nếu bạn thoát khỏi trình hướng dẫn bằng và sau đó sử dụng ls -al | grep .zshrc, bạn sẽ thấy chúng ta có một tệp cấu hình mới.

Bây giờ chúng ta muốn đặt zsh là trình shell mặc định của mình mỗi khi mở terminal của mình. Có thể thực hiện việc này bằng cách chạy lệnh sau để thay đổi shell chsh -s $( which zsh) sau đó chúng ta cần đăng xuất và đăng nhập lại đẻ các thay đổi được cập nhật.

Khi bạn đăng nhập lại và mở một terminal, nó sẽ giống như thế này. Chúng ta cũng có thể xác nhận trình shell của chúng ta hiện đã được thay đổi bằng cách chạy which $SHELL

Tôi thường thực hiện bước này trên mỗi máy tính để bàn Ubuntu mà tôi khởi tạo và nhìn chung thì cũng không cần làm gì hơn nữa vì zsh nhanh hơn một chút so với bash.

OhMyZSH

Tiếp theo, chúng ta muốn làm cho mọi thứ trông đẹp hơn một chút và cũng thêm một số chức năng giúp di chuyển dễ dàng hơn trong terminal.

OhMyZSH là một khung mã nguồn mở và miễn phí để quản lý cấu hình zsh của bạn. Có rất nhiều plugin, theme và nhiều thứ khác giúp trình shell zsh trở nên đẹp hơn rất nhiều.

Bạn có thể tìm hiểu thêm về ohmyzsh

Hãy cài đặt Oh My ZSH, chúng ta có một vài tùy chọn với curl wget hoặc fetch, chúng ta có sẵn hai tùy chọn đầu tiên trên hệ thống của mình nhưng tôi sẽ bắt đầu với curl

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Khi bạn đã chạy lệnh trên, bạn sẽ thấy một số đầu ra như bên dưới.

Bây giờ chúng ta có thể bắt đầu đưa cài đặt theme để trải nghiệm, có hơn 100 theme đi kèm với Oh My ZSH nhưng tôi sẽ luôn cài đặt các ứng dụng của mình với theme Dracula.

Tôi cũng muốn nói thêm rằng hai plugin này là gần như bắt buộc khi sử dụng Oh My ZSH.

git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
nano ~/.zshrc

chỉnh sửa các plugin để nhận các plugins mới plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Tiện ích mở rộng Gnome

Tôi cũng sử dụng các tiện ích mở rộng của Gnome và cụ thể là danh sách bên dưới

Tiện ích mở rộng Gnome

  • Caffeine
  • CPU Power Manager
  • Dash to Dock
  • Desktop Icons
  • User Themes

Cài đặt phần mềm

Danh sách các chương trình tôi cài đặt trên máy bằng apt

  • VSCode
  • azure-cli
  • containerd.io
  • docker
  • docker-ce
  • google-cloud-sdk
  • insomnia
  • packer
  • terminator
  • terraform
  • vagrant

Theme Dracula

Đây này là thứ duy nhất tôi sử dụng vào hiện tại. Trông rõ ràng, gọn gàng và mọi thứ đều rất dễ nhìn. Theme Dracula Nó cũng giúp bạn nếu bạn có nhiều chương trình khác mà bạn sử dụng trên máy của bạn và muốn chúng sử dụng theme Dracula.

Từ liên kết ở trên, chúng ta có thể tìm kiếm zsh trên và bạn sẽ tìm thấy ít nhất hai lựa chọn.

Thực hiện theo các hướng dẫn được liệt kê để cài đặt thủ công hoặc sử dụng git. Sau đó, bạn sẽ cần chỉnh sửa tệp cấu hình .zshrc của mình như bên dưới.

Tiếp theo, bạn sẽ muốn có Gnome Terminal Dracula theme cùng với tất cả các hướng dẫn có sẵn tại đây.

Sẽ mất nhiều thời gian để ghi lại từng bước nên tôi đã tạo một video

Tài liệu tham khảo

Nếu bạn đã đi tới đây, chúng ta hiện đã hoàn thành phần về Linux của Lộ trình học DevOps trong 12 ngày. Một lần nữa, tôi luôn chào đón các phản hồi và bổ sung cho các tài nguyên tại đây.

Ngày 3, chúng ta sẽ bắt đầu tìm hiểu về Mạng máy tính, chúng ta sẽ tìm cách trang bị cho mình kiến ​​thức và hiểu biết cơ bản về Mạng liên quan tới DevOps.

Hẹn gặp lại vào Ngày 3: Kiến thức về mạng (Network)

Các bài viết là bản tiếng Việt của tài liệu 90DaysOfDevOps của Micheal Cade và có qua sửa đổi, bổ sung. Tất cả đều có license [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License][cc-by-nc-sa]

Mọi thắc mắc xin hãy liên hệ
Email: [email protected]

(Nguồn: vntechies.dev)

Previous page 1 2

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button