在Ubuntu上活用SSH!連線、變更埠、公開金鑰驗證設定指南

目次

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允許密碼驗證,但這容易受到暴力破解攻擊。建議改用公開金鑰驗證,並禁用密碼驗證來提高安全性。

設定步驟

  1. 編輯 sshd_config 設定檔
sudo nano /etc/ssh/sshd_config
  1. 修改或新增以下設定:
PasswordAuthentication no
PubkeyAuthentication yes
  1. 重新啟動SSH服務
sudo systemctl restart ssh

⚠️ **請確認您的公開金鑰驗證已經設定完成後再執行此步驟,以避免被鎖定在伺服器之外!**

2. 修改SSH埠號

SSH的預設埠號是22,但攻擊者通常會掃描此埠號,修改它可以降低被攻擊的風險。

設定步驟

  1. 打開SSH設定檔:
sudo nano /etc/ssh/sshd_config
  1. 修改 Port 設定,例如更改為2222:
Port 2222
  1. 允許新的埠號通過防火牆:
sudo ufw allow 2222/tcp
  1. 重新啟動SSH服務:
sudo systemctl restart ssh
  1. 測試新的埠號是否可用:
ssh -p 2222 使用者名稱@伺服器的IP地址

3. 禁止Root用戶直接登入

預設情況下,Root帳戶可以透過SSH登入,但這可能會帶來安全風險。建議只允許一般使用者登入,然後透過 sudo 提升權限。

設定步驟

  1. 打開SSH設定檔:
sudo nano /etc/ssh/sshd_config
  1. 修改以下設定:
PermitRootLogin no
  1. 重新啟動SSH服務:
sudo systemctl restart ssh

4. 使用Fail2Ban防止暴力攻擊

Fail2Ban是一款可以監控SSH登入嘗試,並在多次失敗後封鎖攻擊IP的工具。

安裝與設定

  1. 安裝Fail2Ban:
sudo apt install fail2ban -y
  1. 複製設定檔:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. 編輯 jail.local 設定檔:
sudo nano /etc/fail2ban/jail.local
  1. 找到 [sshd],確認或修改以下設定:
[sshd]
enabled = true
maxretry = 5
bantime = 600
findtime = 600
  • maxretry: 允許失敗的登入嘗試次數
  • bantime: 違規IP的封鎖時間(秒)
  • findtime: 在此時間內 maxretry 次登入失敗將導致封鎖
  1. 重新啟動Fail2Ban:
sudo systemctl restart fail2ban
  1. 檢查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 設定,避免自動斷線。

進一步學習的資源

📚 **官方文件**

🛠 **推薦工具**

🎥 **推薦影片**

  • 在YouTube上搜尋「Ubuntu SSH 設定」,可以找到許多教學影片。

作成した動画を友だち、家族、世界中の人たちと共有…

下一步該學什麼?

在掌握SSH的基礎後,您可以進一步學習以下進階主題:

✅ **使用Ansible進行SSH自動化管理**

  • 當您管理多台伺服器時,可以透過Ansible利用SSH自動化管理任務。

✅ **SSH隧道與埠轉發**

  • 透過SSH建立安全的遠端桌面連線,甚至用來模擬VPN。

✅ **監控SSH登入記錄與安全防護**

  • 使用 fail2banlogwatch 來即時監控未授權的登入嘗試。

結語

感謝您閱讀本篇文章!🎉
透過正確的SSH設定,您可以大幅提升伺服器的安全性與管理效率。

如果您對進階應用有興趣,例如「SSH自動化管理」或「進階伺服器安全防護」,請持續關注相關學習資源!

祝您使用SSH愉快!🖥️🔐

相關文章