之前有介紹過如何使用 VirtualBox 建立 Ubuntu 虛擬機,在 Ubuntu 安裝完成後,我們可以直接在 VirtualBox 的視窗中,透過圖像化介面直接操作 Ubuntu 主機,但通常伺服器都會託管在雲端機房,我們根本無法接觸到實體螢幕。因此,學會遠端連線操作伺服器是一件非常重要的事情。
在管理伺服器時,通常會使用遠端連線功能來登入主機,SSH (Secure Shell) 是目前最安全且最流行的連線工具。無論你是要部署 Web 應用程式、管理雲端虛擬機,還是設定自動化部署腳本,SSH 都是這一切操作的核心。
在開始連線之前,我們必須確保目標伺服器 (Server 端) 已經安裝並啟動了 SSH 服務,打開 Ubuntu 的終端機並輸入 systemctl status ssh 來確認 ssh 的服務狀態。
- 如果出現 service could not be found. 代表還沒安裝 SSH,先使用
apt update更新套件庫後,再透過apt install openssh-server安裝 OpenSSH Server。 - 如果是出現 Active: inactive (dead) 代表SSH Server 已安裝,但被停用了,使用
systemctl start ssh就可以啟動服務。
安裝完 SSH 並成功啟動服務後,確認服務狀態會顯示 Active: active (running),代表你的伺服器已經準備好接受連線了!輸入 ip addr 記下伺服器的ip位址,就可以開始連線了。
在 Windows 上打開命令提示字元 (cmd) 或 PowerShell 輸入 ssh user@ip ,這時通常會出現 ssh: connect to host 10.0.2.15 port 22: Connection timed out ,這是因為 VirtualBox 預設的網路架構會採用 NAT 模式,也就是只允許虛擬機往外連線,不允許從外部連入虛擬機,我們有幾種方法可以解決這個問題。
方法一:透過通訊埠轉發的方式,將封包轉發給虛擬機。
打開虛擬機的設定,切換到 Expert 分頁,左側選單點選網路,選擇 NAT,按下連接埠轉送,新增一個轉送規則,主機 ip 輸入 127.0.0.1,客體 ip 則是輸入 ip addr 顯示的ip位址
完成後,按下確認關閉視窗,這時再使用 ssh user@127.0.0.1 重新連線並輸入密碼,出現 Welcome to Ubuntu 24.04 LTS 的訊息,就表示已經成功連進伺服器了。
方法二:將網路架構改為橋接介面卡模式
打開虛擬機的設定,左側選單點選網路,選擇橋接介面卡,接著按下確定即可。
這個方法能讓虛擬機直接模擬成區網內的一台實體電腦,它會從你的路由器 (Router) 獲得一個與你電腦同網段的 ip,這時使用 ip addr 就會看到虛擬機透過路由器取得的 ip,用 ssh user@ip 就能直接連線了。
橋接介面卡的設定方式簡單,但如果是在網路受限的環境下,就會因為無法透過路由器取得 ip,導致沒有網路連線,這時候就要改使用 方法一:透過通訊埠轉發 的方式進行連線。
透過前面的步驟,我們已經可以使用遠端連線登入主機,但這僅僅是第一步,因為在網際網路的世界中,針對 SSH 的暴力破解攻擊每分每秒都在發生。如果你維持預設設定並使用簡易密碼,伺服器就像是一扇沒鎖緊的門,隨時面臨被入侵的風險,為了確保伺服器的安全,通常會再完成幾個安全性的設定。
一、禁止 Root 帳號直接登入 (強烈建議)
root 是 Linux 系統中權限最高的帳號,也是駭客的首要目標。我們應該禁止遠端直接以 root 身分登入,改由一般使用者登入後,再視需求使用 sudo 提升權限。
設定方式:
編輯設定檔 nano /etc/ssh/sshd_config,找到 PermitRootLogin 將其改為 PermitRootLogin no,儲存設定後,可以使用 sshd -t 測試設定檔的內容是否正確,沒出現錯誤的話再使用 systemctl restart ssh 重啟服務
二、改用 SSH 金鑰登入 (非常推薦)
要使用 SSH 金鑰登入,就得先製作金鑰,在 Windows 上打開命令提示字元 或 PowerShell,輸入 ssh-keygen -t ed25519 -C "your_email@example.com" ,使用 Ed25519 演算法建立加密金鑰,它比傳統的 RSA 更快更安全,現在的系統基本上都有支援,但如果有相容舊系統的需求,也可以改用 RSA 搭配 4096 位元的金鑰長度 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ,
選好加密演算法後,接下來會詢問存檔位置,直接按 Enter 存到 ~/.ssh/ 即可。接著會詢問是否要設定「密碼短語 (Passphrase)」,若追求方便可直接按 Enter 跳過,若想雙重保險則可輸入密碼。完成後會得到兩把鑰匙,建議修改這兩把鑰匙的檔名,方便之後進行金鑰管理。
進入伺服器,編輯 SSH 設定檔 nano /etc/ssh/sshd_config,找到 PubkeyAuthentication 將其改為 PubkeyAuthentication yes,儲存設定後重啟服務。
將剛剛透過 ssh-keygen 產生的公鑰放進 ~/.ssh/authorized_keys 內即可。如果你有多個裝置需要連上伺服器,最好是幫每個裝置產生專屬的金鑰,再將不同裝置的公鑰以行為單位,放到 authorized_keys 內。當使用者透過金鑰登入時,就會逐一比對該使用者 authorized_keys 所記錄的公鑰,只要有一把配對成功,就能登入。
以上的步驟完成後,就可以透過 ssh -i "path/to/private_key" user@ip 直接使用金鑰登入,不需要輸入密碼。
但每次連線都需要輸入這麼長一串指令非常不方便,這時可以為連線建立設定檔。 Windows 可以在 C:\Users\user_name\.ssh\ 目錄,新增一個名為config 的檔案,加上以下內容:Host my-server HostName x.x.x.x Port 22 User ubuntu IdentityFile ~/.ssh/id_ed25519
Host 設定連線的別名,HostName 則是指伺服器 ip ,Port 設定連線埠號,User 選擇登入的帳號,IdentityFile 設定使用的金鑰。
設定完成後,就可以使用 ssh my-server 進行連線了,這樣就不用輸入一大串的參數了。
成功使用金鑰登入後,就可以將密碼登入關閉,避免伺服器被有心人士破解密碼。
編輯 SSH 設定檔 nano /etc/ssh/sshd_config,找到 PasswordAuthentication 將其改為 PasswordAuthentication no 並重啟服務,這時就會發現已經無法透過 ssh user@ip 的方式登入了。
三、修改預設埠號
(敬請期待)