1. 簡介
透過在Ubuntu上使用SSH,您可以從遠端安全地存取和操作伺服器或個人電腦。本篇文章將詳細解說SSH的基礎概念、如何在Ubuntu上安裝SSH伺服器、安全性對策以及故障排除,讓即使是初學者也能輕鬆理解。
什麼是SSH?
SSH(Secure Shell)是一種用於透過網路安全連接遠端電腦的協議。與傳統的Telnet或FTP不同,SSH的通信內容會經過加密,大幅降低數據被竊聽或篡改的風險。
SSH在Ubuntu中的主要用途
在Ubuntu上,SSH主要用於以下場景:
- 遠端伺服器管理: 遠端控制Ubuntu伺服器
- 檔案傳輸: 透過SCP或SFTP進行安全的檔案交換
- 埠轉發: 建立更安全的遠端連線
本篇文章將學到的內容
- SSH的基本概念與運作方式
- 如何在Ubuntu上安裝SSH伺服器
- SSH連線設定與故障排除
- SSH的安全性強化措施
2. SSH的基本概念
為了有效使用SSH,理解其基本概念是非常重要的。本章將說明SSH的運作方式,以及不同的驗證方法。
SSH的運作方式
SSH是一種協議,用於在客戶端與伺服器之間建立安全的連線。預設情況下,它使用TCP的22號埠,並透過加密來確保通信安全。
主要功能
- 遠端登入: 在伺服器上執行指令
- 檔案傳輸: 使用SCP或SFTP進行安全的數據傳輸
- 埠轉發: 透過SSH連接其他服務
SSH的驗證方式
SSH主要有以下兩種驗證方式:
密碼驗證
- 透過輸入使用者名稱與密碼進行登入
- 操作簡單,但容易受到暴力破解攻擊
公開金鑰驗證
- 使用公開金鑰與私密金鑰進行身份驗證
- 安全性較高,為推薦的驗證方式
SSH的優勢
- 數據加密: 確保通信內容安全
- 遠端管理更方便: 可從任何地方存取伺服器
- 提升安全性: 有效防止未經授權的存取
3. 在Ubuntu上安裝SSH伺服器
在Ubuntu上使用SSH之前,您需要先安裝OpenSSH伺服器。本章將說明如何安裝及進行基本設定。
安裝OpenSSH伺服器
在Ubuntu上,您可以使用以下指令來安裝OpenSSH伺服器:
sudo apt update
sudo apt install openssh-server
安裝完成後,請確認SSH服務是否已啟動:
sudo systemctl status ssh
啟動與管理SSH服務
您可以使用以下指令來手動啟動或停止SSH服務:
# 啟動SSH
sudo systemctl start ssh
# 設定開機自動啟動SSH
sudo systemctl enable ssh
# 停止SSH
sudo systemctl stop ssh
設定UFW(簡單防火牆)
如果UFW(Uncomplicated Firewall)已啟用,SSH的連線可能會被阻擋。請使用以下指令來允許SSH連線:
sudo ufw allow ssh
sudo ufw enable
4. 設定SSH連線
為了確保SSH的安全性,您需要進行適當的設定。本章將說明如何設定公開金鑰驗證。
產生金鑰對
請在客戶端執行以下指令,以產生公開金鑰與私密金鑰:
ssh-keygen -t rsa -b 4096
預設情況下:
– 私密金鑰將存放於 ~/.ssh/id_rsa
– 公開金鑰將存放於 ~/.ssh/id_rsa.pub
將公開金鑰複製到伺服器
請使用以下指令將公開金鑰傳送到SSH伺服器:
ssh-copy-id 使用者名稱@伺服器的IP地址
或者,您也可以手動傳輸:
scp ~/.ssh/id_rsa.pub 使用者名稱@伺服器的IP地址:~/
在伺服器端,請執行以下指令來正確配置公開金鑰:
mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub
修改sshd_config設定
請開啟SSH的設定檔,進行安全性調整:
sudo nano /etc/ssh/sshd_config
請確認或修改以下設定:
# 禁用密碼登入(僅允許公開金鑰驗證)
PasswordAuthentication no
# 禁止root用戶登入
PermitRootLogin no
# 修改SSH埠號(例如:改為2222)
Port 2222
修改後,請重新啟動SSH服務:
sudo systemctl restart ssh
5. 執行SSH連線
當Ubuntu上的SSH伺服器設定完成後,您需要從客戶端進行連線。本章將說明基本的SSH連線方法,以及在修改埠號後的連線方式。
基本的SSH連線指令
在SSH客戶端上,您可以使用以下指令來連線到遠端伺服器:
ssh 使用者名稱@伺服器的IP地址
例如,假設伺服器的IP地址為 192.168.1.10
,而使用者名稱為 ubuntu
,則連線指令如下:
ssh ubuntu@192.168.1.10
首次連線時,系統會顯示伺服器的指紋,請輸入「yes」以接受連線。
當SSH埠號變更後的連線方式
如果您的伺服器使用的不是預設的22號埠,例如修改為「2222」,請使用 -p
參數指定埠號:
ssh -p 2222 ubuntu@192.168.1.10
指定私密金鑰來連線
如果您已設定公開金鑰驗證,可以使用 -i
參數指定私密金鑰:
ssh -i ~/.ssh/id_rsa ubuntu@192.168.1.10
透過SSH執行遠端指令
您可以在不登入伺服器的情況下直接執行遠端指令:
ssh ubuntu@192.168.1.10 "ls -lah /home/ubuntu"
此方式適用於自動化腳本或遠端操作。
使用SCP傳輸檔案
透過SSH,您可以在本地端與遠端伺服器之間傳輸檔案。
本地端 → 遠端伺服器
scp 檔案名稱 使用者名稱@伺服器的IP地址:遠端目錄
範例:
scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/
遠端伺服器 → 本地端
scp 使用者名稱@伺服器的IP地址:遠端檔案名稱 本地端目錄
範例:
scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./
使用SFTP管理檔案
SFTP提供更友善的介面來管理遠端伺服器上的檔案:
sftp ubuntu@192.168.1.10
登入後,您可以使用以下指令:
ls # 列出檔案
cd # 切換目錄
put 檔案名 # 上傳檔案到遠端伺服器
get 檔案名 # 下載遠端檔案到本地端
exit # 退出SFTP
—
6. SSH連線故障排除
在使用SSH時,可能會遇到無法連線的情況。本章將介紹常見的問題及其解決方案。
常見的SSH連線錯誤及解決方法
1. SSH伺服器未啟動
請檢查SSH伺服器的狀態:
sudo systemctl status ssh
解決方法:
- 如果SSH伺服器未啟動,請使用以下指令啟動:
sudo systemctl start ssh
- 設定開機自動啟動SSH:
sudo systemctl enable ssh
2. 防火牆(UFW)阻擋了SSH
如果UFW(Uncomplicated Firewall)啟用了,SSH連線可能會被阻擋。
解決方法:
- 檢查UFW的狀態:
sudo ufw status
- 允許SSH連線:
sudo ufw allow ssh
(如果使用了非預設埠,請執行 sudo ufw allow <埠號>/tcp
)
- 重新啟動UFW:
sudo ufw reload
3. 變更了SSH的埠號
如果您修改了SSH的預設埠號(22),請確認您正在使用正確的埠號進行連線。
解決方法:
- 在伺服器上檢查當前使用的SSH埠號:
sudo grep Port /etc/ssh/sshd_config
- 在客戶端指定正確的埠號:
ssh -p 2222 使用者名稱@伺服器的IP地址
4. SSH金鑰權限設定錯誤
如果使用公開金鑰驗證但無法登入,可能是金鑰的權限設定有誤。
解決方法:
- 修正私密金鑰的權限:
chmod 600 ~/.ssh/id_rsa
- 修正公開金鑰的權限:
chmod 644 ~/.ssh/authorized_keys
5. 遠端主機金鑰變更導致連線失敗
如果您看到「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」的錯誤訊息,表示伺服器的SSH金鑰已變更。
解決方法:
- 刪除舊的主機金鑰資訊:
ssh-keygen -R 伺服器的IP地址
- 再次嘗試SSH連線:
ssh 使用者名稱@伺服器的IP地址
7. 強化SSH安全性
SSH是一個強大的遠端存取工具,但如果沒有適當的安全措施,可能會成為駭客攻擊的目標。本章將介紹強化SSH安全性的最佳做法。
1. 禁用密碼驗證,使用公開金鑰驗證
預設情況下,SSH允許密碼驗證,但這容易受到暴力破解攻擊。建議改用公開金鑰驗證,並禁用密碼驗證來提高安全性。
設定步驟
- 編輯
sshd_config
設定檔
sudo nano /etc/ssh/sshd_config
- 修改或新增以下設定:
PasswordAuthentication no
PubkeyAuthentication yes
- 重新啟動SSH服務
sudo systemctl restart ssh
⚠️ **請確認您的公開金鑰驗證已經設定完成後再執行此步驟,以避免被鎖定在伺服器之外!**
2. 修改SSH埠號
SSH的預設埠號是22,但攻擊者通常會掃描此埠號,修改它可以降低被攻擊的風險。
設定步驟
- 打開SSH設定檔:
sudo nano /etc/ssh/sshd_config
- 修改
Port
設定,例如更改為2222:
Port 2222
- 允許新的埠號通過防火牆:
sudo ufw allow 2222/tcp
- 重新啟動SSH服務:
sudo systemctl restart ssh
- 測試新的埠號是否可用:
ssh -p 2222 使用者名稱@伺服器的IP地址
3. 禁止Root用戶直接登入
預設情況下,Root帳戶可以透過SSH登入,但這可能會帶來安全風險。建議只允許一般使用者登入,然後透過 sudo
提升權限。
設定步驟
- 打開SSH設定檔:
sudo nano /etc/ssh/sshd_config
- 修改以下設定:
PermitRootLogin no
- 重新啟動SSH服務:
sudo systemctl restart ssh
4. 使用Fail2Ban防止暴力攻擊
Fail2Ban是一款可以監控SSH登入嘗試,並在多次失敗後封鎖攻擊IP的工具。
安裝與設定
- 安裝Fail2Ban:
sudo apt install fail2ban -y
- 複製設定檔:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 編輯
jail.local
設定檔:
sudo nano /etc/fail2ban/jail.local
- 找到
[sshd]
,確認或修改以下設定:
[sshd]
enabled = true
maxretry = 5
bantime = 600
findtime = 600
maxretry
: 允許失敗的登入嘗試次數bantime
: 違規IP的封鎖時間(秒)findtime
: 在此時間內maxretry
次登入失敗將導致封鎖
- 重新啟動Fail2Ban:
sudo systemctl restart fail2ban
- 檢查Fail2Ban的狀態:
sudo fail2ban-client status sshd
—
8. 常見問題(FAQ)
在使用SSH時,可能會遇到一些疑問或問題,本章將針對常見問題提供解答。
Q1: SSH連線時出現「連線被拒絕」的錯誤,該怎麼辦?
**可能原因與解決方法:**
- SSH伺服器未啟動
sudo systemctl status ssh
**解決方法:** 若SSH未啟動,請執行:
sudo systemctl start ssh
- 防火牆阻擋了SSH
**解決方法:** 允許SSH通過UFW:
sudo ufw allow ssh
- SSH埠號被更改
**解決方法:** 使用正確的埠號:
ssh -p 2222 使用者名稱@伺服器的IP地址
9. 總結
本篇文章詳細介紹了如何在Ubuntu上安裝與使用SSH,包括從基本概念到進階的安全強化設定。以下是關鍵要點的回顧,以及進一步學習的資源。
文章重點回顧
1. SSH的基本概念與運作方式
- SSH是一種安全的遠端連線協議,能夠加密通信內容。
- 相比於Telnet或FTP,SSH提供更高的安全性。
- 驗證方式主要有密碼驗證和公開金鑰驗證。
2. 如何在Ubuntu上安裝SSH伺服器
- 透過
sudo apt install openssh-server
安裝OpenSSH伺服器。 - 使用
systemctl status ssh
確認SSH服務的狀態。 - 開啟UFW防火牆,允許SSH連線:
sudo ufw allow ssh
。
3. SSH連線與設定
- 使用
ssh 使用者名稱@伺服器的IP地址
來建立連線。 - 公開金鑰驗證提供更高的安全性。
- 修改
sshd_config
設定,可禁用密碼驗證以增強安全性。
4. SSH的故障排除
- 檢查SSH服務是否運行:
systemctl status ssh
。 - 如果埠號變更,請使用
ssh -p 2222 使用者名稱@IP
進行連線。 - 確保
~/.ssh/authorized_keys
的權限設定正確。
5. 強化SSH安全性
- 禁用密碼驗證,改用公開金鑰驗證。
- 修改SSH埠號(例如改為2222)。
- 安裝Fail2Ban 來防止暴力破解攻擊。
- 限制SSH的存取IP,允許特定IP連線。
6. FAQ中的主要問題
- SSH連線被拒絕:請確認SSH服務已啟動並檢查UFW防火牆設定。
- 公開金鑰驗證無法使用:請確認
authorized_keys
檔案的權限。 - SSH會話超時:調整
ClientAliveInterval
設定,避免自動斷線。
進一步學習的資源
📚 **官方文件**
🛠 **推薦工具**
- PuTTY(適用於Windows的SSH客戶端)
- 下載PuTTY
- MobaXterm(高級SSH客戶端)
- MobaXterm官方網站
🎥 **推薦影片**
- 在YouTube上搜尋「Ubuntu SSH 設定」,可以找到許多教學影片。
作成した動画を友だち、家族、世界中の人たちと共有…
下一步該學什麼?
在掌握SSH的基礎後,您可以進一步學習以下進階主題:
✅ **使用Ansible進行SSH自動化管理**
- 當您管理多台伺服器時,可以透過Ansible利用SSH自動化管理任務。
✅ **SSH隧道與埠轉發**
- 透過SSH建立安全的遠端桌面連線,甚至用來模擬VPN。
✅ **監控SSH登入記錄與安全防護**
- 使用
fail2ban
或logwatch
來即時監控未授權的登入嘗試。
結語
感謝您閱讀本篇文章!🎉
透過正確的SSH設定,您可以大幅提升伺服器的安全性與管理效率。
如果您對進階應用有興趣,例如「SSH自動化管理」或「進階伺服器安全防護」,請持續關注相關學習資源!
祝您使用SSH愉快!🖥️🔐