一、什麼是SSH服務?¶
SSH(Secure Shell)是一種安全的網絡協議,用於在不安全的網絡環境中(比如互聯網)安全地訪問遠程服務器。它替代了早期不安全的Telnet、FTP等服務,通過加密傳輸數據,防止密碼或命令被中間人竊取,是Linux服務器遠程管理的標配工具。
二、爲什麼選擇SSH?¶
- 安全性高:數據傳輸全程加密(默認使用AES、RSA等加密算法),防止密碼泄露或會話劫持。
- 跨平臺兼容:支持Windows、Mac、Linux等系統的客戶端,可通過命令行或圖形化工具(如Xshell、FinalShell)連接。
- 功能豐富:除了遠程登錄,還支持文件傳輸(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(公鑰)
- 將公鑰複製到目標服務器:
ssh-copy-id 用戶名@服務器IP # 自動將公鑰追加到目標服務器的~/.ssh/authorized_keys
# 首次執行會提示輸入目標服務器密碼,之後即可免密登錄
- 免密登錄驗證:
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
七、常見問題與解決¶
-
無法連接?檢查以下步驟:
- 服務是否運行:sudo systemctl status sshd
- 端口是否開放:sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS)
- 防火牆攔截:開放22端口(如sudo ufw allow 22)或新端口(如sudo ufw allow 2222) -
登錄被拒絕?
- 密碼錯誤:檢查用戶名和密碼是否正確。
- 配置文件問題:PermitRootLogin設爲yes但密碼正確,需確認是否密碼登錄被禁用。 -
免密登錄失敗?
- 權限問題:目標服務器~/.ssh目錄權限應爲700,authorized_keys權限應爲600。
- 公鑰未正確複製:手動檢查~/.ssh/authorized_keys是否包含公鑰內容。
八、總結¶
SSH是Linux服務器遠程管理的基石,掌握其安裝、配置和使用是運維/開發必備技能。核心要點:
- 服務端安裝後確保sshd運行正常。
- 客戶端使用ssh命令快速登錄,免密登錄提升效率。
- 通過修改配置文件(端口、禁止root登錄)增強安全性。
建議初學者從基礎命令開始練習,逐步嘗試免密登錄和端口修改,遇到問題優先檢查服務狀態和防火牆,排查路徑清晰化!