緯育 2026-0422
出自頂極製作所
熟悉各式網路相關工具的使用介紹
本次課程全面介紹了在 Linux 與 Windows 環境下,各種用於網路連線、檔案傳輸及下載的工具與技術。課程首先從 Linux 文字介面下的網路工具切入,涵蓋了文字網頁瀏覽器(如 Lynx、W3M)、遠端連線工具(SSH)、檔案下載工具(Wget、LFTP、SCP)以及網路測試與監控工具,目標是讓學員了解各工具的用途,以便日後能自行查詢使用。其中,SSH 被視為最重要的必會指令,並詳細解說其基本語法、首次連線流程及遠端執行指令的進階用法。 接著,課程轉向 Windows 環境,介紹如何啟用 OpenSSH 客戶端,並重點講解多款基於 SSH 的圖形化工具,如 PuTTY、Penyu anting 及功能更強大的 MTPuTTY,比較其分頁管理、連線儲存等優缺點。此外,課程也回顧了較舊的 Telnet 協定,說明其明文傳輸的低安全性特性,以及在區域網路(如連線印表機、BBS 站台 PTT)中的應用場景。 最後,課程深入探討了多種檔案傳輸方式。從傳統的 FTP 指令(如 GET、PUT)及其處理不同作業系統編碼問題的 BINARY 指令,到功能更強大的 LFTP 工具,再到加密的 FTPS 和 SFTP。講師特別強調了安裝 OpenSSH Server 會預設啟用 SFTP,可能帶來安全風險,並提出了權限管理的建議。課程也詳細介紹了常用的下載工具 Wget 及其續傳、背景執行等實用參數,以及基於 SSH 的安全單檔複製工具 SCP。講師同時也分享了關於網路輿論操作(網軍)的觀察,提醒學員對網路資訊保持警覺。
文字介面網路工具介紹
- 課程目標與方法
- 本次課程旨在介紹多種網路工具,重點在於讓學員知道這些工具的名稱及其用途。
- 由於時間限制,無法深入介紹每個工具的歷史,但鼓勵學員自行上網查找類似的工具,因為同類型工具非常多。
- 熟悉這些工具需要透過實習和練習,課程主要目的是介紹工具的功能與可達成的目的。
- 文字網頁瀏覽器
- 在 Linux 環境下,尤其是官方網站,網頁內容常以文字為主、圖片較少,因此適合使用文字型瀏覽器。
- Lynx:其中一種文字瀏覽器,使用方式為 lynx [網址]。
- W3M:講師個人較推薦的另一種文字瀏覽器,因為其排版更接近原始網頁的樣子。安裝指令為 apt install w3m。
- 操作方式:主要使用鍵盤的上下左右鍵進行導覽,按 Tab 鍵可以在不同連結或元素間切換。若要下載檔案,將游標移動到下載連結上按 Enter 即可。
- 適用情境:在無法使用圖形化介面,或進入禁止攜帶個人設備(如手機)的公司,需要臨時上網查詢資料時非常有用。
- 其他網路工具類型
- 下載/上傳工具:介紹了用於在文字介面下透過指令下載或上傳檔案的工具。
- 網路測試與查詢工具:包含網路測速、封包測試、網路掃描與網路監控(查看網路進出封包狀況)等工具。
遠端連線工具
- SSH 指令的重要性
- SSH 是 Linux 中專門用於遠端連線的指令,被講師強調為「一定要會的」工具。
- 不僅 Linux,Windows 10 及之後的版本、macOS、甚至手機作業系統(如 Android)都內建或可以安裝 SSH 客戶端。
- 基本語法與連線流程
- 簡易連線:ssh [IP位址]。當使用此方式時,系統會預設使用目前本機登入的帳號去嘗試登入遠端主機。
- 首次連線:第一次連線到某台主機時,系統會顯示該主機的 SHA 指紋 (fingerprint),並詢問是否信任。必須輸入 yes 才能繼續連線,之後就不會再詢問。
- 指定使用者連線 (建議用法):ssh [使用者名稱]@[IP位址]。這是講師最推薦的用法,可以明確指定要用哪個帳號登入遠端主機。例如,ssh root@192.168.100.20。
- 登入驗證:連線後,系統會提示輸入指定帳號在「遠端主機」上的密碼。
- 範例操作
- 從 Ubuntu 連線到 CentOS (IP: 192.168.100.20),若直接執行 ssh 192.168.100.20,系統會用 Ubuntu 當前的帳號去登入 CentOS。
- 正確指定帳號的方式為 ssh root@192.168.100.20,接著輸入 CentOS 的 root 密碼(如 123456)即可成功登入。
- 登入成功後,終端機畫面會切換到遠端主機的命令列環境,可以執行該系統的所有指令,如 cd、ls 等。
- 進階用法:遠端執行指令
- 語法:ssh [使用者名稱]@[IP位址] '[指令]'。
- 功能:此語法會在登入遠端主機後立即執行指定的指令,執行完畢後便會自動登出並跳回本機。
- 範例:ssh root@192.168.100.20 'cat /etc/passwd' 會連線到遠端主機,顯示 /etc/passwd 檔案的內容,然後立刻斷線。
- 在Windows中啟用OpenSSH Client
- 操作路徑:透過「設定」 -> 「系統」 -> 「選用功能」來管理。
- 安裝方法:在「查看可用功能」中找到 OpenSSH Client 並進行安裝。微軟已將許多Linux工具(如OpenSSH)整合至Windows的選用功能中,取代了過去在「程式和功能」中的安裝方式。
- 相關功能:此區塊也包含其他Windows功能,例如Hyper-V(Windows專業版內建的虛擬機)、TFTP Client、Telnet Client等。
- 正確安裝OpenSSH Client
- 目的區分:當使用者目的僅是連線到遠端伺服器時,應只安裝OpenSSH-Client。
- 常見錯誤:許多教學會指導使用者安裝完整的openssh-server套件(例如透過apt install openssh-server),這會讓本機同時安裝上伺服器端(SSH Server)與客戶端(SSH Client),導致本機也開啟了被遠端連線的服務,帶來不必要的安全風險。
- 正確指令:正確的做法是單獨安裝客戶端套件,例如在某些Linux發行版中,套件名稱可能為openssh-clients。
圖形化介面 (GUI) 連線工具
- PuTTY
- 基本用法:輸入遠端主機的IP位址(例如192.168.10.20)與Port(SSH預設為22)即可連線。
- 功能設定:可以調整外觀(Appearance)如字型大小,但操作上可能不如MobaXterm快速。
- 儲存連線設定:可以在設定完成後,為該連線命名(例如class-2)並儲存(Save),方便未來快速載入(Load)並連線。
- Penyu anting (P-uting)
- 特性:此工具是一個基於PuTTY核心的「外殼」程式,提供了一個看似更簡潔的中文介面。
- 核心:其所有功能與設定資訊完全來自PuTTY。它只是將PuTTY的複雜功能先行隱藏,連線後再提供設定選項。
- 狀態:講師測試時發現此工具似乎已無法正常使用,建議使用者若有興趣可尋找更新版本。
- MTPuTTY (Multi-Tabbed PuTTY)
- 特性:同樣是PuTTY的外殼程式,但提供了更強大的功能。
- 主要優點:
- 提供分頁功能,可以在單一視窗管理多個連線。
- 側邊欄可顯示已儲存的連線清單,方便快速點擊連線。
- 支援儲存帳號密碼,實現點擊兩下即可自動登入。
- 安全性考量:講師個人不偏好儲存密碼,因為一旦電腦被他人存取,所有連線將暴露風險。建議的做法是每次手動輸入密碼,或使用更安全的金鑰驗證。
- 其他選擇:講師提到業界也有其他工具如Xshell,使用者可依據個人偏好選擇。講師個人偏好簡單、免安裝、程式小的工具。
Telnet 工具與協定
- Telnet 介紹
- 定義:Telnet是一個早期的遠端連線工具與協定,在早期網際網路時代非常流行,例如用於登入BBS站台。
- 非明文傳輸:Telnet在傳輸過程中,帳號密碼均為明文(未加密),安全性極低。
- Port:其預設通訊埠為23。但Telnet工具不僅限於此,也可以用來連接其他服務的Port,例如FTP的21 Port。
- 使用 Telnet
- Windows啟用:在Windows中,Telnet客戶端預設不安裝,需至「選用功能」中手動勾選啟用。
- 連線指令:telnet [IP位址] [Port]。若不指定Port,預設為23。例如連線FTP伺服器:telnet 10.1.0.58 21。
- 操作限制:使用Telnet連線FTP時,雖可登入並執行USER、PASS、ls等基本指令,但無法執行需要開啟資料通道(Data Port)的指令(如檔案傳輸),因為Telnet本身無法控制客戶端開啟Port。
- 區域網路應用:現今主要應用於區域網路內,對一些不需高安全性的設備進行管理,例如印表機、交換器等。這些設備內部通常運行Linux系統,可透過Telnet進行基本設定與狀態查詢。
- 連線 PTT (telnet ptt.cc)
- PTT是台灣知名BBS站,使用Telnet協定連線。
- 安全性議題:雖然Telnet是明文傳輸,但PTT帳號被盜用的情況相對較少。講師推測原因是PTT會記錄使用者最近幾次的登入IP位址,盜用者容易被追查,從而降低了盜用動機。
- 脫離字元:在中文版作業系統中,標準的Telnet脫離指令 Ctrl + ] 無法正常觸發,導致使用者難以從Telnet提示符中退出。
- 講師分享:印表機破解經驗
- 背景:講師公司購買了一台印表機,廠商為保留後續維修服務的控制權,不願提供管理者密碼。
- 過程:講師透過網路搜尋該型號印表機的技術手冊(PDF),找到了原廠預設的重設(reset)密碼,並成功登入後台。
- 發現:登入後發現可以修改列印張數的計數器。講師打趣說,早知如此當初就該選擇租賃方案,透過修改計數來降低成本。
檔案傳輸與下載工具
- 基本FTP指令
- ftp指令是使用者必須掌握的基本技能之一,在命令列中輸入 ftp [網址或IP] 即可開始連線。
- PUT:上傳多個檔案。
- GET:下載多個檔案。
- mkdir:建立目錄(若有權限)。
- CD:切換目錄。
- BINARY:設定檔案傳輸模式為二進位。當本地作業系統與伺服器的編碼不同時,使用此指令可確保下載的檔案與伺服器上的檔案完全一致,避免亂碼問題。
- HELP:查詢可用的FTP指令。講師提到,不同FTP伺服器(如微軟FTP)的HELP指令輸出可能差異很大。
- LFTP 工具
- 介紹:LFTP是一個功能更強大的FTP客戶端工具,可透過yum install等方式安裝。
- 優點:
- 支援Tab鍵自動補全檔名與路徑,解決了傳統FTP指令列操作不便的問題。
- 支援HTTP和HTTPS協定自動下載。
- 操作方式:
- 連線:lftp [IP位址]。
- 登入:進入後使用user [帳號]指令進行登入。也可以在連線時使用lftp -u [帳號] [IP位址]直接登入,但密碼會記錄在歷史指令中,有安全風險。
- 指令:登入後的操作指令如ls、cd、get與傳統FTP相似。處理帶有空白的檔名時需使用單引號將檔名括起來。
- 安全FTP (FTPS & SFTP)
- 說明:當傳統FTP的明文傳輸不安全時,可使用加密的替代方案。
- FTPS:使用TLS進行加密。
- SFTP:使用SSH通道進行加密。
- SFTP 的特性與安全風險
- 自動安裝:安裝OpenSSH Server時,會強制附帶安裝SFTP Server。
- 指令:可使用sftp指令進行連線,連線方式與SSH類似,例如 sftp root@192.168.10.10。
- 預設權限風險:預設情況下,使用者透過SFTP登入後,不僅能存取自己的家目錄,還能切換到系統其他目錄(如根目錄 /)進行瀏覽和檔案操作,只要其帳號有對應的權限。這會帶來嚴重的安全隱患。
- 應對措施:講師提到其YouTube頻道有影片教學,內容包括:
1. 如何將SFTP Server功能關閉。 2. 如果仍需使用SFTP,如何設定將使用者鎖定在其自己的家目錄,防止其存取系統其他位置。
- Wget 下載工具
- 基本用法
- 最常用的方式是 wget [網址],直接下載網路上的檔案。
- 常用參數
- -c 或 --continue:續傳模式。如果下載中斷,再次執行指令會從上次中斷的地方繼續下載(需要伺服器支援)。
- -q 或 --quiet:安靜模式。執行時不會顯示下載進度條等資訊。
- -b 或 --background:背景執行。執行後會立即返回命令提示符,讓下載任務在背景進行。
- -t [次數] 或 --tries=[次數]:設定重試次數。-t 0 代表無限次重試。
- -w [秒數] 或 --wait=[秒數]:設定每次重試之間的等待時間。
- --user 和 --password:用於下載需要帳號密碼驗證的FTP或HTTP資源。指令格式為 wget ftp://[帳號]:[密碼]@[IP位址]/[檔案路徑]。
- 其他參數
- --spider:測試連結是否存在,但不會實際下載檔案。
- --limit-rate=[速度]:限制下載速度,例如 --limit-rate=100k。
- 基本用法
- SCP (Secure Copy) 工具
- 功能介紹
- SCP是基於SSH協定的安全檔案複製工具,用於在網路間加密傳輸單一檔案或目錄。
- 使用前提:遠端目標主機必須已安裝並啟用SSH Server。
- 指令格式:scp [來源] [目的]。
- 操作範例
- 下載檔案:將遠端檔案複製到本地。
- scp [使用者名稱]@[遠端IP]:[遠端檔案路徑] [本地路徑]
- 範例:scp root@192.168.10.10:/path/to/file.txt . (將遠端檔案下載到目前目錄)。
- 上傳檔案:將本地檔案複製到遠端。
- scp [本地檔案路徑] [使用者名稱]@[遠端IP]:[遠端路徑]
- 常用參數
- -P [埠號]:指定SSH埠號(大寫P)。
- -p:保留檔案的原始屬性(修改時間、存取時間、權限等)。
- -r:遞迴複製。當需要複製整個目錄及其內容時使用。
- 功能介紹
Shell Script 基本概念、結構與可讀性
- 定義與構成
- 將在 shell 下操作的多個指令集中於檔案,賦予可執行權限即可運作,無需編譯。
- 內容元素:內建/外部指令(外部相依需檢查)、變數(自訂與環境)、流程控制(if、case、for、while)。
- 標準頭部與註解規範
- 第一行必寫 shebang 指定直譯器,如 #!/bin/bash。
- 加入描述性註解(# description)、作者(# written by)、版本(# version),避免因缺乏註解造成維護困難。
- 建議於腳本末端加入執行狀態回覆(ESID/ESIS/ESIT),利於排程監控與控管。
- 可讀性與層次化
- 以空行與區塊分隔提升可讀性;縮排一致、每行清楚註解,避免將註解擠在行尾。
- 變數名稱語義化(如 varServer、varPort),在前段統一宣告並撰寫說明。
- 權限與相依
- 確保具備執行權限(chmod +x 或精準 chmod u+x),避免 a+x 帶來安全風險。
- 外部指令相依應於執行前檢查(如 command -v 或檔路徑),缺失時提供替代處理或提示。
Shebang 與執行方式
- Shebang 特性
# 為註解;但檔頭的「#!」於可執行檔識別具有特殊意義。
- 執行方法
- 直接以路徑執行:./script 或 /path/to/script,系統依 shebang 叫用對應直譯器。
- 以直譯器呼叫:/bin/bash script 或 sh script;即使檔案無 x 權限,只要可讀即可。
- 權限最佳實務
- 優先 chmod u+x;若誤設 a+x,先 chmod a-x 再精準賦予。
- 當下目錄通常不在 PATH,需以 ./檔名執行或移入 PATH 目錄。
系統中腳本與指令位置
- /bin 與 /usr/bin:公用程式所在;可能為編譯程式或腳本,現代系統多為一致或連結。
- /etc/init.d:傳統 SysV init 的服務腳本位置。開機流程:GRUB → Linux kernel → init → 執行此處腳本(畫面 OK 訊息對應服務啟動)。
- 檢視範例:cd /etc/init.d 可見 ssh 等服務腳本;每行 # 為註解,誤編輯可能造成行為異常。
- 將腳本變成系統指令:mv script 到 /bin 或 /sbin,去除 .sh(例如 /bin/hello),即可在任意目錄直接呼叫,後續可設計參數/選項。
原始碼保護與編譯(shc)
- shc 可將 Shell Script 轉為 C 原始碼並編譯為執行檔,產出 C 檔與二進位。
- 目的:遮蔽腳本中敏感資訊(帳號、密碼、路徑),部署時僅提供編譯檔。
- 提醒:非萬能保護,但作為基本遮蔽可行,鼓勵自行嘗試。
Hello World 與實務應用
- hello.sh 範例
- 內容:echo "Hello, 我的";頭部含 shebang、description、written by、version;結尾可加 ESID/ESIS。
- 執行流程:初始無 x,示範用直譯器執行與 chmod u+x 後 ./ 執行;可移至 /bin 或 /sbin 改名為 hello 直接呼叫。
- 自動化案例
- 帳號審核自動化:迴圈處理多筆,互動式 y/n 決定欄位值,輸出結果。
- 學生資料登錄:互動式逐項收集與確認後寫入,支援指定人數。
- 多樓層網路流量彙整:流程一致,寫成定期整理與報表腳本。
- 定期備份:以日期命名備份檔,加入排程。
- 遠端狀態輪詢:定期 ping/連線檢測多台主機,輸出或寄信,頻率依需求。
課堂節奏與操作提醒
- 練習時段:安排短時段操作(推估 10:15–10:25)建立與執行 hello.sh。
- 易錯重點:直接輸入檔名不可執行需用 ./ 或放入 PATH;權限精準設為 u+x;依首行與環境選擇 /bin/bash 或 sh。
變數宣告與命名
- 寬鬆行為差異:在講者示範的環境中,未宣告變數(如以 $MYNAME 展開)程式不會報錯;相較多數語言/環境,未宣告變數通常會錯。此差異影響健壯性,需依執行環境調整策略。
- 風險與命名原則:未宣告不錯使邏輯錯誤更潛藏,避免使用無語義名稱(如 MAR1、MAR2);採用具描述性的變數名並建立一致規範(駝峰或底線風格),以降低維護風險。
- 展開符號認知:變數前置符號(如 $)僅為展開語法,不屬於變數名本體,避免誤用。
使用者輸入介面設計(read)
- read -p 同列提示:read -p "提示" var 可在同一行顯示提示並接續輸入,適合短欄位(姓名、電話)。
- 分行提示再輸入:先 echo 提示,再以 read var 於下一行輸入,較寬鬆、適合長欄位(住址)。
- read -s 隱藏輸入:read -s var 在輸入時不回顯,常用於密碼;可與 -p 合用(read -s -p "Password: " pass)。避免在畫面顯露敏感資訊。
- 版面與體驗:短欄位偏同列;長欄位偏分行,減少誤判與視覺壓力。建議用「提示→讀取→回顯」即時驗證取值與展開。
字串輸出、變數插值與提示參數
- echo/print 與 -p:以 -p 參數輸出提示字串到終端,後接變數名以組合輸出;輸出時以冒號、逗點或空白分隔提示與值,提升可讀性。
- 轉義序列:\a 產生蜂鳴、
換行;設備喇叭關閉時 \a 無聲。可串接多段輸出與變數插值形成完整訊息。
程式中斷、結束與回傳碼
- Ctrl-C 中斷(SIGINT):按 Ctrl-C 使程式中斷,回傳碼為 130;以 echo $? 查詢。
- exit 與狀態碼:exit N 結束腳本並回傳 N;常見碼含 0(成功)、1/2(一般/語法錯誤)、126(非可執行或權限不足)、127(找不到指令)、130(被中斷)。未明確設定時預設為 0。
- $? 的使用:每個指令更新 $?;須在關鍵指令後立即檢查,避免被後續成功動作覆蓋。可用 if [ $? -eq 0 ] 或 [ $? -ne 0 ] 驅動流程。
- 範圍與回繞:exit code 範圍為 0–255,超過(如 256)會回繞至 0;測試建議以外部驅動次腳本並在外層觀測 $?。
互動式腳本:檔案檢查與錯誤處理
- 目標流程:讀入檔名;若存在則輸出內容;不存在則以 OR(||)顯示錯誤訊息。
- 錯誤輸出處理:將前段命令的 stderr 重導(常丟到 /dev/null)以隱藏系統錯誤訊息,改由自訂提示呈現,畫面更乾淨。
- 範例語意:cat 檔案 || echo "檔案不存在";成功不執行後段,失敗觸發提示。腳本結尾可用 exit 0 明確成功。
cat 指令與輸出控制
- 基本用途:cat 將檔案內容輸出到終端,分享畫面時便於快速展示。
- 合併檔案:cat 檔1 檔2 > 新檔名,注意輸入順序。
- 常用選項:-n 為每行加行號;-b 僅對非空白行編號。多數情境偏好 -n,能清楚定位行號。
良好 Shell Script 寫作規範
- 檔名風格:腳本檔名以 .sh 結尾,便於辨識(在 Unix 中點號是檔名一部分)。
- 變數取用:一律以引號包覆 "$var",避免空白與通配符問題。
- 函式範疇:函式內變數使用 local,避免污染全域。
- 選項風格:偏好長選項(--long-option)提升可讀性。
- 嚴格模式:在檔首加入 set -o nounset(未定義變數即停)與 set -o errexit(指令非 0 即停),提升穩定性與可預期行為。
- 條件判斷:建議使用 [],比 更健壯。將於後續詳解。
- 安全修補提醒:部分舊有 echo/字串注入手法因安全性修補已不可用,留意環境版本差異。