一、什麼是SSH服務?

SSH(Secure Shell)是一種安全的網絡協議,用於在不安全的網絡環境中(比如互聯網)安全地訪問遠程服務器。它替代了早期不安全的Telnet、FTP等服務,通過加密傳輸數據,防止密碼或命令被中間人竊取,是Linux服務器遠程管理的標配工具。

二、爲什麼選擇SSH?

  1. 安全性高:數據傳輸全程加密(默認使用AES、RSA等加密算法),防止密碼泄露或會話劫持。
  2. 跨平臺兼容:支持Windows、Mac、Linux等系統的客戶端,可通過命令行或圖形化工具(如Xshell、FinalShell)連接。
  3. 功能豐富:除了遠程登錄,還支持文件傳輸(SCP/SFTP)、端口轉發、X11轉發等高級功能。

三、SSH服務的組成

  • 服務端(sshd):運行在目標服務器上,負責監聽22號端口(默認),處理客戶端的連接請求,驗證用戶身份並提供服務。
  • 客戶端(ssh):運行在本地設備上,通過命令行工具發起連接,如ssh命令用於遠程登錄,scp用於文件傳輸。

四、安裝SSH服務(以常見Linux發行版爲例)

1. Ubuntu/Debian系
# 安裝SSH服務端(sshd)
sudo apt update && sudo apt install openssh-server -y

# 啓動服務並設置開機自啓
sudo systemctl enable --now sshd
2. CentOS/RHEL系
# 安裝SSH服務端
sudo yum install openssh-server -y

# 啓動服務並設置開機自啓
sudo systemctl enable --now sshd
3. 驗證服務狀態
# 檢查服務是否運行
sudo systemctl status sshd

# 查看端口是否監聽(默認22端口)
sudo netstat -tuln | grep 22  # 或 ss -tuln | grep 22

五、客戶端基礎使用

1. 基本登錄命令

格式:ssh 用戶名@服務器IP
示例:

# 登錄名爲root的服務器,IP爲192.168.1.100
ssh root@192.168.1.100

首次連接會提示確認主機密鑰,輸入yes並回車:

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxx.
Are you sure you want to continue connecting (yes/no)? yes

然後輸入目標服務器密碼即可登錄。

2. 進階:免密登錄(強烈推薦)

免密登錄無需重複輸入密碼,通過密鑰對驗證身份,步驟如下:
1. 生成本地密鑰對(僅需在客戶端執行):

ssh-keygen -t ed25519  # 生成ED25519算法的密鑰對(比RSA更安全)
# 一路回車,默認生成到 ~/.ssh/id_ed25519(私鑰)和 id_ed25519.pub(公鑰)
  1. 將公鑰複製到目標服務器
ssh-copy-id 用戶名@服務器IP  # 自動將公鑰追加到目標服務器的~/.ssh/authorized_keys
# 首次執行會提示輸入目標服務器密碼,之後即可免密登錄
  1. 免密登錄驗證
ssh 用戶名@服務器IP  # 無需密碼直接登錄

六、服務端配置(sshd_config)

SSH服務的核心配置文件爲/etc/ssh/sshd_config,修改後需重啓服務生效:

sudo vim /etc/ssh/sshd_config  # 編輯配置文件

常用配置項說明
- Port 22:修改SSH端口(如改爲2222,避免默認端口暴露風險),需同時在防火牆開放新端口。
- PermitRootLogin yes:是否允許root直接登錄(不推薦!建議設爲no,用普通用戶+sudo提權)。
- PasswordAuthentication yes:是否允許密碼登錄(若用免密登錄,可設爲no)。
- AllowUsers 用戶名:僅允許指定用戶登錄(如AllowUsers alice)。

修改後重啓服務

sudo systemctl restart sshd

七、常見問題與解決

  1. 無法連接?檢查以下步驟
    - 服務是否運行:sudo systemctl status sshd
    - 端口是否開放:sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS)
    - 防火牆攔截:開放22端口(如sudo ufw allow 22)或新端口(如sudo ufw allow 2222

  2. 登錄被拒絕?
    - 密碼錯誤:檢查用戶名和密碼是否正確。
    - 配置文件問題:PermitRootLogin設爲yes但密碼正確,需確認是否密碼登錄被禁用。

  3. 免密登錄失敗?
    - 權限問題:目標服務器~/.ssh目錄權限應爲700authorized_keys權限應爲600
    - 公鑰未正確複製:手動檢查~/.ssh/authorized_keys是否包含公鑰內容。

八、總結

SSH是Linux服務器遠程管理的基石,掌握其安裝、配置和使用是運維/開發必備技能。核心要點:
- 服務端安裝後確保sshd運行正常。
- 客戶端使用ssh命令快速登錄,免密登錄提升效率。
- 通過修改配置文件(端口、禁止root登錄)增強安全性。

建議初學者從基礎命令開始練習,逐步嘗試免密登錄和端口修改,遇到問題優先檢查服務狀態和防火牆,排查路徑清晰化!

小夜