SEARCH

安裝ssh:從入門到精通,安全遠程連接完整指南

安裝ssh:從入門到精通,安全遠程連接完整指南

在當今數字化的世界中,遠程管理伺服器和進行安全數據傳輸是IT專業人士和開發者日常工作的重要組成部分。SSH(Secure Shell)正是為此而生的一種網路協議,它允許用戶通過一個安全的加密通道在不安全的網路上執行命令、傳輸文件,並提供其他網路服務。無論是管理您的雲伺服器、樹莓派,還是只是想安全地訪問另一台計算機,安裝SSH都是邁出的第一步。本文將詳細指導您如何在各種主流操作系統上安裝SSH伺服器和客戶端,並提供重要的配置和安全建議。

什麼是SSH?為何需要安裝SSH?

SSH是一種加密的網路協議,用於安全地訪問遠程計算機。它通過在客戶端和伺服器之間建立一個加密的隧道來保護通信的機密性和完整性,有效防止中間人攻擊、數據竊聽和篡改。

為何需要安裝SSH?

  • 遠程伺服器管理: 大多數Linux伺服器不提供圖形界面,SSH是進行命令行管理的標準方式。
  • 安全文件傳輸: SSH提供了SCP(Secure Copy Protocol)和SFTP(SSH File Transfer Protocol),用於安全地在計算機之間傳輸文件。
  • 埠轉發和隧道: SSH可以用於創建安全的隧道,將網路流量從一個埠轉發到另一個埠,實現內網穿透或訪問受限服務。
  • 版本控制系統: Git等版本控制系統通常使用SSH進行代碼庫的身份驗證和傳輸。
  • 自動化腳本: SSH可以集成到自動化腳本中,實現無人值守的遠程操作。

在Linux系統上安裝SSH(OpenSSH Server)

Linux是SSH最常用的平台,因為它通常作為伺服器操作系統。大多數Linux發行版都預裝了OpenSSH客戶端,但您需要手動安裝OpenSSH伺服器。

1. Ubuntu/Debian系統安裝SSH

對於基於Debian的系統(如Ubuntu),安裝OpenSSH伺服器非常簡單。

  1. 更新包列表:
    sudo apt update
  2. 安裝OpenSSH伺服器:
    sudo apt install openssh-server

    這個命令會安裝OpenSSH伺服器及其所有必要的依賴項。安裝完成後,SSH服務通常會自動啟動並設置為開機自啟。

  3. 檢查SSH服務狀態:
    sudo systemctl status ssh

    您應該看到「Active: active (running)」的輸出,這表明SSH服務正在運行。

  4. 配置防火牆(UFW):

    如果您正在使用UFW(Uncomplicated Firewall),您需要允許SSH流量通過防火牆。默認SSH埠是22。

    sudo ufw allow ssh

    或者,您可以指定埠號:

    sudo ufw allow 22/tcp

    然後啟用防火牆(如果尚未啟用):

    sudo ufw enable

    並檢查防火牆狀態:

    sudo ufw status

2. CentOS/RHEL/Fedora系統安裝SSH

對於基於Red Hat的系統(如CentOS、RHEL、Fedora),使用yumdnf進行安裝。

  1. 安裝OpenSSH伺服器:
    sudo yum install openssh-server openssh-clients

    或者對於較新的系統:

    sudo dnf install openssh-server openssh-clients
  2. 啟動並設置SSH服務開機自啟:
    sudo systemctl start sshd
    sudo systemctl enable sshd
  3. 檢查SSH服務狀態:
    sudo systemctl status sshd

    確保服務狀態為「Active: active (running)」。

  4. 配置防火牆(firewalld):

    CentOS/RHEL通常使用firewalld作為默認防火牆。

    sudo firewall-cmd --permanent --add-service=ssh

    或指定埠:

    sudo firewall-cmd --permanent --add-port=22/tcp

    然後重新載入防火牆規則使更改生效:

    sudo firewall-cmd --reload

在Windows系統上安裝SSH(OpenSSH Server)

Windows 10(1803版本及以上)和Windows Server 2019及以上版本已內置OpenSSH伺服器和客戶端功能。對於舊版本,您可以使用WSL或第三方工具。

1. 通過「可選功能」安裝OpenSSH伺服器(Windows 10/Server 2019+)

  1. 打開設置:

    點擊「開始」菜單,選擇「設置」(齒輪圖標)。

  2. 進入應用和功能:

    選擇「應用」 -> 「應用和功能」 -> 「可選功能」。

  3. 添加OpenSSH伺服器:

    點擊「添加功能」,在列表中找到「OpenSSH 伺服器」,點擊「安裝」。


    注意: "OpenSSH 客戶端"通常默認已安裝,它允許您從Windows連接到其他SSH伺服器。

  4. 啟動SSH服務:

    安裝完成後,打開「服務」管理器(在搜索欄輸入services.msc並回車)。

    找到名為「OpenSSH SSH Server」的服務,右鍵點擊選擇「屬性」。

    將「啟動類型」設置為「自動」,然後點擊「啟動」按鈕,最後點擊「確定」。

  5. 配置防火牆:

    Windows Defender防火牆通常會為SSH自動創建入站規則,但您可以通過以下PowerShell命令手動確認或添加:

    New-NetFirewallRule -DisplayName "SSH Server (Port 22)" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow

2. 使用Windows Subsystem for Linux (WSL) 安裝SSH

WSL允許您在Windows上運行一個完整的Linux發行版。您可以在WSL中像在普通Linux系統一樣安裝SSH伺服器。

  1. 安裝WSL:

    在管理員PowerShell中運行:

    wsl --install

    這會安裝WSL並默認安裝Ubuntu發行版。

  2. 進入WSL環境:

    打開「開始」菜單,搜索「Ubuntu」並打開。您將進入一個Linux命令行界面。

  3. 在WSL中安裝SSH:

    按照上述「Ubuntu/Debian系統安裝SSH」的步驟,在WSL的Linux環境中安裝OpenSSH伺服器。

    sudo apt update
    sudo apt install openssh-server
  4. 配置埠(重要!):

    由於WSL的埠轉發機制,SSH服務在WSL中默認偵聽埠22,但Windows可能已經使用了該埠。建議您更改WSL內部SSH伺服器的埠,例如改為2222,以避免衝突。

    編輯WSL內的SSH配置文件:

    sudo nano /etc/ssh/sshd_config

    找到#Port 22這一行,將其改為:

    Port 2222

    保存並退出(Ctrl+O,Enter,Ctrl+X)。

  5. 重啟WSL內的SSH服務:
    sudo systemctl restart ssh
  6. 從Windows訪問WSL內的SSH:

    您現在可以從Windows的PowerShell或CMD使用SSH客戶端連接到WSL內的SSH伺服器(通常是localhost或127.0.0.1,以及您設置的自定義埠)。

    ssh username@localhost -p 2222

在macOS系統上安裝SSH

macOS系統默認預裝了SSH客戶端,因此您無需額外安裝SSH客戶端即可連接到遠程伺服器。要啟用SSH伺服器功能(允許其他設備連接到您的Mac),您只需進行簡單的設置。

  1. 打開系統設置:

    點擊屏幕左上角的蘋果菜單,選擇「系統設置」。

  2. 進入「通用」 -> 「共享」:

    在左側菜單中選擇「通用」,然後在右側找到「共享」。

  3. 啟用「遠程登錄」:

    在「共享」設置中,找到「遠程登錄」選項,並勾選旁邊的複選框以啟用它。這會啟動Mac上的OpenSSH伺服器。

    您可以點擊右側的「i」圖標,選擇允許所有用戶訪問,或僅允許特定用戶訪問。


    提示: 您可以通過終端查看Mac的IP地址,然後從其他設備使用該IP和您的Mac用戶名進行連接。

SSH伺服器配置與安全優化

僅僅安裝SSH服務是不夠的,為了增強安全性,您還需要對SSH伺服器進行一些關鍵配置。

編輯SSH伺服器配置文件 (sshd_config)

SSH伺服器的主要配置文件是/etc/ssh/sshd_config(Linux)或C:ProgramDatasshsshd_config(Windows)。在修改此文件之前,建議先備份。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

使用文本編輯器(如nanovi)打開配置文件:

sudo nano /etc/ssh/sshd_config

以下是一些重要的配置項:

  1. 更改默認SSH埠(強烈推薦):

    默認SSH埠是22。更改為非標準埠可以減少自動化攻擊(機器人掃描默認埠)的風險。

    找到以下行(可能被註釋掉,即前面有#):

    #Port 22

    將其修改為例如2222,並取消註釋:

    Port 2222
  2. 禁用Root用戶登錄:

    直接使用Root賬戶登錄會帶來巨大風險。通常建議使用普通用戶登錄,然後通過sudo命令執行管理任務。

    找到並修改或添加以下行:

    PermitRootLogin no
  3. 禁用密碼登錄(推薦使用SSH密鑰認證):

    SSH密鑰認證比密碼認證更安全。一旦您設置了SSH密鑰認證並確認可以正常登錄,就可以禁用密碼登錄以進一步提高安全性。

    找到並修改或添加以下行:

    PasswordAuthentication no
  4. 限制允許登錄的用戶:

    可以明確指定哪些用戶被允許通過SSH登錄。

    AllowUsers your_username another_user

    這將只允許your_usernameanother_user登錄。

修改配置文件后,務必重啟SSH服務以使更改生效:

sudo systemctl restart ssh

如果您更改了埠,請務必更新防火牆規則以允許新埠的流量。

SSH密鑰認證:更安全的登錄方式

SSH密鑰認證是一種比密碼認證更安全的登錄方式。它使用一對密鑰:一個公鑰(Public Key)和一個私鑰(Private Key)。公鑰放在伺服器上,私鑰保存在您的客戶端計算機上。當您嘗試連接時,伺服器會使用您的公鑰驗證您是否擁有匹配的私鑰。

1. 在客戶端生成SSH密鑰對

在您的本地計算機(客戶端)上執行此操作。

ssh-keygen -t rsa -b 4096
  • -t rsa:指定密鑰類型為RSA。
  • -b 4096:指定密鑰長度為4096位,更安全。

在生成過程中,系統會提示您輸入保存密鑰的路徑和設置一個密碼短語(passphrase)。建議為私鑰設置一個強密碼短語,這將為您的私鑰提供額外一層保護。

生成后,您會在~/.ssh/目錄下找到兩個文件:

  • id_rsa(私鑰):絕不能分享給任何人!
  • id_rsa.pub(公鑰):可以安全地複製到伺服器上。

2. 將公鑰複製到SSH伺服器

方法一:使用ssh-copy-id(推薦)

這是最簡單安全的方法,它會將您的公鑰添加到伺服器的~/.ssh/authorized_keys文件中,並設置正確的許可權。

ssh-copy-id username@your_server_ip -p 2222

(將username替換為您的伺服器用戶名,your_server_ip替換為伺服器IP,2222替換為您的SSH埠)

系統會提示您輸入伺服器上該用戶的密碼,輸入正確后,公鑰就會被自動複製過去。

方法二:手動複製公鑰

如果ssh-copy-id不可用,您可以手動複製公鑰:

  1. 在本地客戶端查看公鑰內容:
    cat ~/.ssh/id_rsa.pub

    複製輸出的所有內容。

  2. 通過SSH密碼登錄到伺服器:
    ssh username@your_server_ip -p 2222
  3. 在伺服器上創建或編輯authorized_keys文件:

    確保~/.ssh目錄存在且許可權正確(drwx------700)。如果不存在,創建它:

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh

    然後,將您複製的公鑰內容添加到~/.ssh/authorized_keys文件中(如果文件不存在則創建)。

    echo "YOUR_PUBLIC_KEY_CONTENT_HERE" >> ~/.ssh/authorized_keys

    替換YOUR_PUBLIC_KEY_CONTENT_HERE為您剛才複製的公鑰內容。

  4. 設置authorized_keys文件許可權:
    chmod 600 ~/.ssh/authorized_keys

    正確的許可權對於SSH密鑰認證至關重要。

3. 禁用密碼認證(可選,但強烈推薦)

一旦您確認可以使用SSH密鑰成功登錄伺服器,就可以在sshd_config中禁用密碼認證,進一步提升安全性。

PasswordAuthentication no

修改後,重啟SSH服務

sudo systemctl restart ssh

連接到SSH伺服器

當您完成了安裝SSH伺服器並進行了必要的配置后,就可以從客戶端連接到它了。

在您的本地計算機(Linux、macOS或Windows的PowerShell/CMD)上打開終端或命令提示符,使用以下命令:

ssh username@your_server_ip -p your_ssh_port
  • username:您在伺服器上的用戶名。
  • your_server_ip:伺服器的IP地址或域名。
  • your_ssh_port:您在sshd_config中設置的SSH埠(如果不是默認的22)。

例如:

ssh [email protected] -p 2222

如果是首次連接到該伺服器,系統會提示您確認伺服器的指紋,輸入「yes」即可。

SSH常見問題 (FAQ)

如何知道SSH是否安裝成功並正在運行?

在Linux上,您可以使用sudo systemctl status ssh (Debian/Ubuntu) 或 sudo systemctl status sshd (CentOS/RHEL) 命令來檢查SSH服務的狀態。如果顯示「Active: active (running)」,則表示SSH服務正在運行。在Windows上,打開「服務」管理器,查找「OpenSSH SSH Server」服務,確保其狀態為「正在運行」。

為何我無法連接到SSH伺服器?

這可能是由多種原因造成的。常見的原因包括:防火牆阻擋了SSH埠(22或您自定義的埠),SSH服務沒有運行,用戶名或密碼/密鑰不正確,伺服器IP地址或埠號輸入錯誤,或者伺服器上的sshd_config文件配置有誤。檢查防火牆設置、SSH服務狀態、並仔細核對連接信息通常能解決問題。

SSH埠可以更改嗎?如何更改?

是的,SSH埠可以更改。更改SSH默認埠(22)是一種常見的安全實踐,可以減少自動掃描和攻擊。您需要編輯SSH伺服器的配置文件/etc/ssh/sshd_config(Linux)或C:ProgramDatasshsshd_config(Windows),找到並修改Port這一行(例如改為Port 2222),然後保存文件並重啟SSH服務。同時,別忘了更新防火牆規則以允許新埠的流量。

SSH密鑰認證比密碼更安全嗎?

是的,SSH密鑰認證通常被認為比密碼認證更安全。密鑰對(公鑰和私鑰)的長度更長,且難以被暴力破解。此外,私鑰通常受到密碼短語的保護,即使私鑰泄露,沒有密碼短語也無法使用。相比之下,密碼更容易受到字典攻擊或暴力破解。

如果忘記SSH密碼(用於用戶登錄)怎麼辦?

如果您忘記了用於SSH登錄的用戶密碼,並且沒有設置SSH密鑰認證,您將無法通過SSH登錄。在這種情況下,您需要通過伺服器提供商的控制台(如雲服務商的控制台)或物理訪問伺服器來重置用戶密碼。一旦重置,您就可以再次使用新密碼或通過配置SSH密鑰來登錄。

總結

安裝SSH是遠程管理和安全通信的基石。通過本文的詳細指導,您應該已經掌握了在不同操作系統上安裝SSH伺服器和客戶端的方法,並了解了如何進行基本的配置和安全優化,尤其是SSH密鑰認證的重要性。遵循這些步驟和最佳實踐,您將能夠建立一個安全、高效的遠程訪問環境,為您的伺服器管理和日常工作提供強有力的保障。

安裝ssh