如何設定SSH連線

之前有介紹過如何使用 VirtualBox 建立 Ubuntu 虛擬機,在 Ubuntu 安裝完成後,我們可以直接在 VirtualBox 的視窗中,透過圖像化介面直接操作 Ubuntu 主機,但通常伺服器都會託管在雲端機房,我們根本無法接觸到實體螢幕。因此,學會遠端連線操作伺服器是一件非常重要的事情。

在管理伺服器時,通常會使用遠端連線功能來登入主機,SSH (Secure Shell) 是目前最安全且最流行的連線工具。無論你是要部署 Web 應用程式、管理雲端虛擬機,還是設定自動化部署腳本,SSH 都是這一切操作的核心。

在開始連線之前,我們必須確保目標伺服器 (Server 端) 已經安裝並啟動了 SSH 服務,打開 Ubuntu 的終端機並輸入 systemctl status ssh 來確認 ssh 的服務狀態。

  1. 如果出現 service could not be found. 代表還沒安裝 SSH,先使用 apt update 更新套件庫後,再透過 apt install openssh-server 安裝 OpenSSH Server。
  2. 如果是出現 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 的方式登入了。

三、修改預設埠號

(敬請期待)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端