SSH Server

by 資工三 111110517 范揚玄

指令

安裝 ssh 伺服器

sudo apt install openssh-server

套件查詢

dpkg -l | grep ssh

ssh 伺服器狀態查詢/控制

systemctl status ssh start stop restart reload enable disable

上個指令是否成功

echo $?

生成 ssh 密鑰

ssh-keygen ssh-copy-id wrr606@UB2

產生名為 file 檔案

touch file touch a{00..99}.cpp

傳送 file 檔案 / 下載 file 檔案

scp file wrr606@UB2: scp wrr606@UB2:file .

使用主機名代替 IP

加上下行

vim /etc/hosts
192.168.242.131 R2

0.0.0.0

在伺服端/雲端表示 任意介面 (「監聽所有可用的介面」或「接受任意 IP 連接」)
在 PC 上表示 尚未取得 IP

NFS Server

步驟

UB1:Server
UB2:client

UB1:安裝 Server 端

apt install -y nfs-kernel-server

UB1:新增要共享的資料夾

mkdir /mynfs

UB1:調整資料夾權限

chown -R nobody:nogroup /mynfs

UB1:加入下行

vim /etc/exports
/mynfs *(rw,sync,no_subtree_check,all_squash)

UB1:重啟 nfs-kernel-server

systemctl restart nfs-kernel-server

UB2:安裝 client 端

apt install nfs-common -y

UB2:新增要共享的資料夾

mkdir /mydata

UB2:關聯到 UB1 的資料夾

mount -t nfs -o rw,resvport 192.168.242.130:/mynfs /mydata

若要取消關聯

umount /mydata

插入新硬碟

參考教學:https://reurl.cc/xv20Ve

VMWare 操作

插入 USB

關機狀態下,調整成 USB 3.1 後再插入 USB

新增虛擬硬碟

image
選擇 Add 新增硬體,並選擇 Hard Disk

步驟

查看掛載點

lsblk

查看磁碟使用情況

df -h

查看插入的所有硬碟

ls /dev/sd*

分割磁碟

fdisk /dev/sdb 輸入 n 按 Enter 輸入 p 按 Enter 輸入 1 按 Enter 按 Enter 輸入 w 再按 Enter

用 fdisk 確認分割區

fdisk -l /dev/sdb

格式化磁碟

mkfs -t ext4 /dev/sdb1

掛載硬碟

mount /dev/sdb1 /mydisk

開機自動掛載

查詢硬碟 UUID

blkid

將 UUID 複製貼上

vim /etc/fstab
UUID=fa7f7fe7-e7ac-4b16-8352-0713428eda08 /mydisk ext4 defaults 0 1

重開機後確認是否成功掛載

df -h

MySQL

參考教學:https://blog.tarswork.com/post/mariadb-install-record

步驟

Server 端

安裝金鑰

sudo apt-get install apt-transport-https curl sudo mkdir -p /etc/apt/keyrings sudo curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

加入儲存庫

vim /etc/apt/sources.list.d/mariadb.sources
# MariaDB 11.1 repository list - created 2023-11-08 06:16 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/11.1/ubuntu
URIs: https://ftp.ubuntu-tw.org/mirror/mariadb/repo/11.1/ubuntu
Suites: jammy
Components: main main/debug
Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp

安裝 MariaDB

apt-get update apt install mariadb-server systemctl status mariadb mysql_secure_installation

編輯 MariaDB 設定檔

vim /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0

新增資料庫權限

mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'user' WITH GRANT OPTION; FLUSH PRIVILEGES;

關閉防火牆並重開

systemctl stop ufw systemctl disable ufw service mysql restart

Client 端

安裝客戶端

apt install mysql-client

遠端連入資料庫

mysql -h 192.168.242.130 -u root -p

指令

查看資料庫

show databases;

創建資料庫

create database testdb;

使用資料庫

use testdb;

創建資料表

create table addrbook(name varchar(50) not null, phone char(10));

插入資料

INSERT INTO addrbook(name, phone) VALUES ("tom", "0912123456"); INSERT INTO addrbook(name, phone) VALUES ("mary", "0912123567");

使用 SQL 語法查詢資料

SELECT name,phone FROM addrbook;

查看 CPU 使用率

apt install dstat dstat -c -n -d 10

監控系統

top -------------------------- apt install iotop iotop

Apache

參考教學:https://docs.ossii.com.tw/books/ubuntu-server-2004-apache-mariadb-php

步驟

安裝 apache

apt -y install apache2 apache2-utils

確認啟用情況

systemctl status apache2

image

安裝 PHP

apt install software-properties-common add-apt-repository ppa:ondrej/php apt update -y apt install php8.1 libapache2-mod-php8.1 php8.1-gd php8.1-mysql php8.1-curl php8.1-mbstring php8.1-intl -y apt install php8.1-gmp php8.1-bcmath php8.1-imagick php8.1-xml php8.1-zip -y a2enmod php8.1 systemctl restart apache2

測試 PHP 版本資訊

vim /var/www/html/info.php
<?php phpinfo(); ?>

image

連線去資料庫提取資料

vim /var/www/html/test.php
<?php $servername="127.0.0.1"; $username="root"; $password="user"; $dbname="testdb"; $conn = new mysqli($servername, $username, $password, $dbname); if($conn->connect_error){ die("connection failed: " . $conn->connect_error); } else{ echo "connect OK!" . "<br>"; } $sql="select name,phone from addrbook"; $result=$conn->query($sql); if($result->num_rows>0){ while($row=$result->fetch_assoc()){ echo "name: " . $row["name"] . "\tphone: " . $row["phone"] . "<br>"; } } else { echo "0 record"; } ?>

image

Apache 網頁啟用密碼驗證

參考教學:https://xenby.com/b/104-教學對網頁啟用密碼驗證-apache

步驟

安裝 apache2-utils

apt-get install apache2-utils

新增使用者

sudo htpasswd -c /etc/apache2/.htpasswd username001

使用 vim 修改設定檔

vim /etc/apache2/sites-enabled/000-default.conf
<Directory "/var/www/html"> AuthType Basic AuthName "You need to login" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory>

重啟伺服器

systemctl restart apache2

image

Python Flask

步驟

安裝 python

apt install python3-pip -y

安裝 Flask

pip3 install flask

執行 run.py

# run.py from flask import Flask app = Flask("test") @app.route('/') def hello_world(): return '<h2>Hello, World!</h2>' @app.route('/test') def hello_world2(): return '<h2>Test</h2>' if __name__ == '__main__': app.run(host='0.0.0.0', port=3000, debug=True)
python3 run.py

使用者管理

指令

新增使用者

useradd -m Function -s /bin/bash

更改使用者密碼

passwd Function

刪除使用者及其目錄

userdel -r Function

新增部門

groupadd teacher groupadd english

新增成員並加入部門(-g 主要部門 -G 次要部門)

useradd -g teacher -G english Sam

顯示使用者訊息

id Sam

新增成員並加入賦予 sudo 權限

useradd -G sudo Sam

切換使用者

su Sam

Shell 腳本

創建 Shell 腳本

vim test.sh
#!/user/bin/bash touch {1..3}

使用 Bash 執行

bash a.sh

硬連結(Hard Link) 與 符號連結(Symbolic Link)

硬連結(Hard Link)

  • 類似 C++ 的 Reference。
  • 無論修改哪一個,另一個也會同步變化。
  • 刪除原始檔案,硬連結仍然可以正常訪問檔案數據。
  • 硬連結不能跨越不同的文件系統(例如,不能在 /home掛載硬碟 之間創建硬連結)。
  • 不能指向資料夾。

範例

ln test.txt test_hardlink.txt

符號連結(Symbolic Link)

  • 類似 Windows 的捷徑。
  • 符號連結指向檔案的路徑。
  • 如果原始檔案被刪除,符號連結會變成「斷開的連結」或「死連結」,無法再正常訪問。
  • 符號連結可以跨越不同的文件系統,也可以指向資料夾。

範例

ln -s test.txt test_symboliclink.txt

單引號 ' 和 雙引號 "

單引號 '

  • 所見及所得
  • 特殊字符不會生效

雙引號 "

  • 可印出指令
  • 雙引號內的內容會進行變數替換和特殊字符解釋

監控使用者

查看使用者

w

pts: 使用 ssh 連線登入
tty: 使用虛擬終端登入

記憶體使用率

free -h
last

更改 host 名稱

更改 host 為 UB1

hostnamectl set-hostname UB1

SAMBA 分享

安裝 SAMBA 伺服器

apt install samba samba-common -y

新增資料夾

mkdir sharea shareb

調整權限為 777

chmod 777 a b

新增測試用的帳號

adduser Sam adduser Tom

設定密碼

smbpasswd -a Sam smbpasswd -a Tom

修改配置檔,新增下列文字(路徑是絕對位置,不是相對位置

vim /etc/samba/smb.conf
[sharea] path = /home/user/sharea comment = guest access folder writable = yes browseable = yes guest ok = yes [shareb] path = /home/user/shareb comment = have auth can access writable = yes browseable = yes valid users=Sam,Tom write list=Sam,Tom

重啟 Samba 伺服器

systemctl restart smbd

Windows 檔案總管輸入 \\192.168.242.130(R1 IP)
image

將虛擬機設定為路由

以 R1 當作路由
未命名

VMWare 設定

R1: NAT、LAN Segment(LAN10)、LAN Segment(LAN20)
H1: LAN Segment(LAN10)
H2: LAN Segment(LAN20)

CMD 部分

H1: 192.168.10.1

ip addr add 192.168.10.1/24 dev ens33 ifconfig ens33 0 ip route add default via 192.168.10.254

H2: 192.168.20.1

ip addr add 192.168.20.1/24 dev ens33 ifconfig ens33 0 ip route add default via 192.168.20.254

R1: 192.168.10.254 192.168.20.254

ip addr add 192.168.10.254/24 dev ens37 ip addr add 192.168.20.254/24 dev ens38 ifconfig ens37 0 ifconfig ens38 0
echo 1 > /proc/sys/net/ipv4/ip_forward

相互 ping 的通就是成功了

DHCP Server

以 R1 當作路由
未命名

步驟

以上文 「將虛擬機設定為路由」 接續

參考教學:https://www.kjnotes.com/linux/118

R1:

安裝 DHCP 套件

apt install isc-dhcp-server -y

在配置檔加入下列文字:

vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.1 192.168.10.100; option subnet-mask 255.255.255.0; option routers 192.168.10.254; option broadcast-address 192.168.10.255; default-lease-time 600; max-lease-time 7200; } subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.1 192.168.20.100; option subnet-mask 255.255.255.0; option routers 192.168.20.254; option broadcast-address 192.168.20.255; default-lease-time 600; max-lease-time 7200; }

重啟套件

systemctl restart isc-dhcp-server

NAT 網路

網路分布:
未命名

以上文 「DHCP Server」 接續

網卡:
R1: NAT、LAN Segment(LAN10)、LAN Segment(LANR1R2)
R2: NAT、LAN Segment(LAN20)、LAN Segment(LANR1R2)
H1: LAN Segment(LAN10)
H2: LAN Segment(LAN20)

步驟

  1. 在 Ubuntu 中設定每個節點的每個網卡 IP 至上圖位置

  2. R1、R2 都需按照上文 「DHCP Server」 安裝 DHCP 套件並開啟路由功能

echo 1 > /proc/sys/net/ipv4/ip_forward
  1. R1:

在配置檔加入下列文字:

vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.1 192.168.10.100; option subnet-mask 255.255.255.0; option routers 192.168.10.254; option broadcast-address 192.168.10.255; default-lease-time 600; max-lease-time 7200; }

重啟套件

systemctl restart isc-dhcp-server

配置 12.1.1.1

ip addr add 12.1.1.1/24 dev ens38

設定轉發

ip route add 192.168.20.0/24 via 12.1.1.2
  1. R2:

在配置檔加入下列文字:

vim /etc/dhcp/dhcpd.conf
subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.1 192.168.20.100; option subnet-mask 255.255.255.0; option routers 192.168.20.254; option broadcast-address 192.168.20.255; default-lease-time 600; max-lease-time 7200; }

重啟套件

systemctl restart isc-dhcp-server

配置 12.1.1.2

ip addr add 12.1.1.2/24 dev ens38

設定轉發

ip route add 192.168.10.0/24 via 12.1.1.1

使用 ping 測試 H1 是否可以 ping 到 H2