Linux 遠程連接解析:SSH 協議理論與應用

Linux 遠程連接解析:SSH 協議理論與應用

在這里插入圖片描述

在網絡互聯的時代,遠程管理服務器已成為常態。SSH(Secure Shell)作為一種安全的網絡協議,憑借其加密機制和靈活的功能,成為 Linux 系統遠程操作的事實標準。本文將從協議原理到實戰操作,全面剖析 SSH 技術,幫助你理解其背后的工作機制,掌握從基礎連接到高級配置的全流程。

一、SSH 協議:遠程安全通信的基石

1. SSH 協議的誕生與意義

在 SSH 出現之前,遠程管理主要依賴 Telnet、FTP 等協議,但這些協議明文傳輸數據,密碼和操作指令在網絡中裸奔,極易被竊聽或篡改(“中間人攻擊”)。1995 年,芬蘭學者 Tatu Yl?nen 為解決這一問題開發了 SSH 協議,通過端到端加密實現了安全的遠程通信,逐漸取代了傳統協議。

如今,SSH 已發展到第 2 版(SSH-2),成為 Linux、Unix 系統遠程管理的標配,支持遠程登錄、命令執行、文件傳輸等功能。

2. SSH 協議的核心組成

SSH 協議并非單一協議,而是由三個子協議協同工作:

  • 傳輸層協議(SSH-TRANS)
    負責建立加密的網絡連接,完成服務器身份驗證、數據加密和壓縮。它是整個 SSH 通信的基礎,確保后續所有數據傳輸的安全性。
  • 用戶認證協議(SSH-AUTH)
    建立在傳輸層之上,用于驗證客戶端用戶的身份(如密碼認證、密鑰認證)。只有通過認證,客戶端才能獲得服務器的操作權限。
  • 連接協議(SSH-CONN)
    認證通過后,負責將加密的連接劃分為多個 “邏輯通道”,支持同時進行多項操作(如一個通道執行命令,另一個通道傳輸文件),實現多任務并行。

3. SSH 的加密機制:雙重保障的安全體系

SSH 的安全性源于其混合加密策略,結合了對稱加密、非對稱加密和哈希算法的優勢:

(1)非對稱加密:驗證身份與交換密鑰
  • 服務器身份驗證
    服務器在首次啟動時會生成一對公私鑰(默認存于 /etc/ssh/ 目錄,如 ssh_host_rsa_keyssh_host_rsa_key.pub)。客戶端首次連接時,服務器會發送公鑰,客戶端驗證后將公鑰存入 ~/.ssh/known_hosts 文件(后續連接直接比對,防止 “中間人攻擊”)。
  • 會話密鑰協商
    為避免非對稱加密效率低的問題,SSH 僅用它來安全交換對稱加密的密鑰。客戶端生成一個隨機的 “會話密鑰”,用服務器公鑰加密后發送給服務器,服務器用私鑰解密,雙方從此使用該會話密鑰進行對稱加密通信。
(2)對稱加密:高效加密傳輸數據

會話密鑰生成后,客戶端和服務器會使用對稱加密算法(如 AES、ChaCha20)加密所有傳輸的數據(包括命令、輸出、文件內容等)。對稱加密速度快,適合大量數據傳輸,而會話密鑰僅在本次連接中有效,進一步降低了泄露風險。

(3)哈希算法:確保數據完整性

SSH 還使用哈希算法(如 SHA-256)對傳輸的數據進行 “簽名”,生成消息認證碼(MAC)。接收方通過驗證 MAC 確認數據未被篡改,防止傳輸過程中被惡意修改。

4. SSH 的認證機制:兩種登錄方式的原理

SSH 支持多種認證方式,最常用的是密碼認證密鑰認證,兩者的安全原理和適用場景不同:

(1)基于密碼的認證
  • 原理:客戶端發送用戶名和密碼,服務器驗證密碼是否與 /etc/shadow 中存儲的哈希值匹配。
  • 優點:簡單易操作,適合臨時登錄。
  • 缺點:密碼可能被暴力破解(通過反復嘗試弱密碼),且每次登錄都需輸入密碼,效率低。
(2)基于密鑰的認證
  • 原理:依賴 “非對稱密鑰對”(公鑰 + 私鑰)。私鑰僅存于客戶端,公鑰存于服務器的 ~/.ssh/authorized_keys 文件中。登錄時,服務器用公鑰加密一段隨機數據,客戶端用私鑰解密后發回,服務器驗證解密結果是否正確,無需傳輸密碼。
  • 優點:安全性極高(私鑰不傳輸,難以被破解),支持無密碼登錄,適合自動化腳本或頻繁登錄場景。
  • 缺點:配置步驟稍復雜,需妥善保管私鑰(私鑰泄露 = 賬戶被盜)。

二、SSH 服務的工作流程:從連接到交互的全過程

一次完整的 SSH 連接包含 5 個階段,每個階段都有明確的分工:

  1. 版本協商階段
    • 客戶端向服務器發送 SSH 版本信息(如 SSH-2.0-OpenSSH_8.0),服務器返回自己的版本。
    • 雙方確認使用相同的主版本(如 SSH-2),否則連接失敗。
  2. 密鑰與算法協商階段
    • 服務器向客戶端發送自己的公鑰(用于身份驗證)和支持的加密算法列表(如 AES、SHA-256 等)。
    • 客戶端選擇雙方都支持的算法,并生成一個隨機的 “會話密鑰”,用服務器公鑰加密后發送給服務器。
    • 服務器用私鑰解密得到會話密鑰,從此雙方用該密鑰進行對稱加密通信。
  3. 服務器身份驗證階段
    • 客戶端驗證服務器公鑰是否在 ~/.ssh/known_hosts 中(首次連接時需手動確認,防止中間人攻擊)。
    • 驗證通過后,確認連接的是目標服務器,而非偽造的 “釣魚” 服務器。
  4. 用戶身份認證階段
    • 服務器要求客戶端提供身份憑證(密碼或密鑰):
      • 若為密碼認證:客戶端加密密碼后發送,服務器解密并驗證。
      • 若為密鑰認證:服務器用客戶端公鑰加密隨機數據,客戶端用私鑰解密并返回結果,服務器驗證解密是否正確。
    • 認證失敗則斷開連接,成功則進入下一步。
  5. 會話交互階段
    • 認證通過后,客戶端可請求打開 “通道”(如終端會話、文件傳輸通道),服務器分配通道 ID 并確認。
    • 雙方通過加密通道傳輸數據(命令、輸出、文件等),直到客戶端發送斷開請求(如 exit 命令)。

三、SSH 相關工具的技術細節

SSH 協議衍生出多個實用工具,除了基礎的 ssh 登錄命令,還有 sftpscp 等文件傳輸工具,它們共享 SSH 的加密機制,無需額外配置安全措施。

1. SFTP:基于 SSH 的文件傳輸協議

SFTP(SSH File Transfer Protocol)是 SSH 協議的擴展,專為文件傳輸設計,功能類似 FTP 但更安全。它的核心特點:

  • 全加密傳輸:所有操作(登錄、上傳、下載)都通過 SSH 加密通道進行,替代了明文傳輸的 FTP。
  • 交互式操作:支持類似 FTP 的命令(lscdputget 等),適合手動管理文件。
  • 權限控制:依賴系統用戶權限,客戶端只能操作自己有權限的文件,安全性可控。

2. SCP:基于 SSH 的 “一鍵式” 文件復制

SCP(Secure Copy)是簡化版的文件傳輸工具,基于 SSH 協議實現,無需交互界面,適合腳本自動化操作:

  • 原理:建立 SSH 連接后直接復制文件,完成后自動斷開,效率高于 SFTP。
  • 遞歸復制:通過 -r 參數可復制目錄(包括子文件和子目錄),底層通過 cp 命令實現。
  • 跨平臺支持:不僅能在 Linux 之間傳輸,還支持與 Windows(如通過 PuTTY 的 pscp 工具)互傳文件。

四、基礎遠程連接:用 SSH 登錄服務器

1. 安裝并啟動 SSH 服務端

SSH 服務端程序為 openssh-server,客戶端工具包含在 openssh-clients 中。以 CentOS 系統為例:

# 安裝 SSH 服務端和客戶端(一步到位)
yum -y install openssh openssh-server openssh-clients# 啟動 SSH 服務
systemctl start sshd# 設置開機自啟(確保重啟后服務自動運行)
systemctl enable sshd# 檢查服務狀態(確認是否正常運行)
systemctl status sshd

安裝完成后,SSH 服務默認監聽 22 端口,可通過 netstat -tuln | grep 22 驗證端口是否開放。

1. 最基本的 SSH 連接

只要知道目標服務器的 IP 地址和用戶名,就能通過以下命令遠程登錄:

# 格式:ssh 用戶名@服務器IP
ssh root@172.25.0.183

執行后會提示輸入目標用戶的密碼,輸入正確后即可進入遠程服務器的命令行界面。

2. 連接時的小技巧

  • 指定端口:如果 SSH 服務修改了默認端口(比如改為 2222),連接時需用 -p 指定端口:

    ssh root@172.25.0.183 -p 2222
    
  • 首次連接提示:第一次連接新服務器時,會出現類似提示:

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

    這是因為客戶端首次識別服務器的密鑰,輸入 yes 并回車即可(后續連接不會再提示)。

五、文件傳輸:不止于登錄的 “附加技能”

SSH 不僅能遠程登錄,還自帶文件傳輸工具。常用的有 sftp(交互式傳輸)和 scp(命令行直接傳輸),無需額外安裝,安全又方便。

1. SFTP:交互式文件傳輸

SFTP(SSH File Transfer Protocol)是基于 SSH 的文件傳輸協議,操作類似 FTP,但所有數據都經過加密。

# 連接遠程服務器(和 SSH 登錄格式相同)
sftp root@172.25.0.183

連接成功后進入 SFTP 交互界面,常用命令:

  • 上傳文件put 本地文件路徑 遠程目錄
    例:把本地 /tmp/aa.txt 傳到遠程服務器的 /var 目錄:

    bash

    put /tmp/aa.txt /var
    
  • 下載文件get 遠程文件路徑 本地目錄
    例:把遠程服務器的 /tmp/cc.log 下載到本地 /var 目錄:

    get /tmp/cc.log /var
    
  • 其他常用命令

    • ls:查看遠程目錄文件
    • lls:查看本地目錄文件(加 l 表示本地)
    • cd 目錄:切換遠程目錄
    • lcd 目錄:切換本地目錄
    • exitquit:退出 SFTP 界面

2. SCP:命令行 “一鍵式” 傳輸

SCP(Secure Copy)是基于 SSH 的文件復制工具,無需進入交互界面,直接在命令行完成傳輸,適合腳本自動化操作。

上傳本地文件到遠程服務器
# 格式:scp 本地文件 用戶名@服務器IP:遠程目錄
scp /tmp/aa.txt root@172.25.0.183:/var
從遠程服務器下載文件到本地
# 格式:scp 用戶名@服務器IP:遠程文件 本地目錄
scp root@172.25.0.183:/tmp/cc.log /var
傳輸目錄(加 -r 參數遞歸復制)
# 上傳本地目錄到遠程
scp -r /tmp/testdir root@172.25.0.183:/var# 下載遠程目錄到本地
scp -r root@172.25.0.183:/tmp/testdir /var

六、SSH 連接的 “安全密碼”:加密與認證機制

SSH 的安全性源于其復雜的加密和認證流程,即使在公共網絡中也能保證數據不被竊聽或篡改。

1. 加密方式:雙重保障

  • 對稱加密:用于加密傳輸的數據。連接建立時,客戶端和服務器會協商生成一個 “會話密鑰”,后續所有數據都用這個密鑰加密(雙方共享,效率高)。
  • 非對稱加密:用于驗證服務器身份和傳輸會話密鑰。服務器有一對公私鑰,客戶端通過公鑰驗證服務器身份,確保連接的是目標服務器而非 “中間人”。

2. 認證方式:兩種登錄選擇

基于密碼認證

最常用的方式,輸入用戶名和密碼即可登錄。優點是簡單,缺點是密碼可能被暴力破解(建議定期更換復雜密碼)。

基于密鑰認證

更安全的方式,通過 “密鑰對”(公鑰 + 私鑰)認證。私鑰保存在客戶端,公鑰存放在服務器,無需輸入密碼即可登錄,且不怕暴力破解。

七、進階:配置密鑰認證,告別密碼登錄

密鑰認證是企業級服務器的首選登錄方式,步驟如下:

1. 在客戶端生成密鑰對

# 生成 RSA 密鑰對(一路回車,無需設置密碼,或按提示設置密鑰密碼增加安全性)
ssh-keygen -t rsa# 生成后,在 ~/.ssh 目錄下會生成兩個文件:
# - id_rsa:私鑰(重要!妥善保管,不可泄露)
# - id_rsa.pub:公鑰(可公開,需要上傳到服務器)

2. 上傳公鑰到服務器

使用 ssh-copy-id 工具一鍵上傳公鑰(確保客戶端已安裝 openssh-clients):

# 格式:ssh-copy-id -i 公鑰路徑 用戶名@服務器IP
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.25.0.183

執行后輸入服務器密碼,公鑰會自動添加到服務器的 ~/.ssh/authorized_keys 文件中(這個文件存儲所有允許登錄的客戶端公鑰)。

3. 驗證密鑰登錄

ssh root@172.25.0.183

此時無需輸入密碼,直接登錄成功,說明密鑰認證配置完成!

八、擴展技巧:讓遠程操作更高效

1. 遠程調用圖形化程序

如果服務器有圖形化界面(如安裝了桌面環境),可通過 -X 參數在客戶端顯示服務器的圖形程序:

# 登錄時添加 -X,允許遠程圖形轉發
ssh -X root@172.25.0.183# 例如,在遠程服務器打開文本編輯器 gedit,窗口會顯示在客戶端
gedit
2. 限制 SSH 登錄(提高安全性)

編輯 SSH 配置文件 /etc/ssh/sshd_config,可限制登錄權限:

# 禁止 root 直接登錄(推薦!登錄后再 su - 切換)
PermitRootLogin no# 只允許指定用戶登錄(如只允許 user1 和 user2)
AllowUsers user1 user2@192.168.1.0/24  # 后面可加 IP 限制,只允許特定網段# 修改默認端口(減少被掃描的概率)
Port 2222  # 改為非默認端口

修改后重啟服務生效:systemctl restart sshd

總結

SSH 不僅是遠程登錄工具,更是一套完整的遠程管理生態。從基礎的 ssh 命令登錄,到 sftp/scp 的文件傳輸,再到安全的密鑰認證,掌握這些技能能讓你輕松應對各種遠程操作場景。記住:安全永遠是第一位的,優先使用密鑰認證,并合理配置 SSH 服務限制,讓遠程連接既高效又安全。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91324.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu22.04系統入門 linux入門 簡單命令基礎復習 實現以及實踐

以下有免費的4090云主機提供ubuntu22.04系統的其他入門實踐操作 地址:星宇科技 | GPU服務器 高性能云主機 云服務器-登錄 相關兌換碼星宇社區---4090算力卡免費體驗、共享開發社區-CSDN博客 兌換碼要是過期了,可以私信我獲取最新兌換碼!&a…

軟考中級-信息安全工程師-每日一學(1)

前提概要本文章主要用于分享軟考中級-信息安全工程師-學習,以下是一些個人理解,請大家結合參考其他文章中的相關信息及個人經驗進行歸納和補充,內容會存在一定錯誤,希望讀者多多評論批評,本人在此先說感謝啦。1.密碼學…

EEG手工特征提取總結

目錄一、引言EEG信號簡介EEG特征提取的重要性本次匯報目的與內容概述二、EEG信號核心特征時域特征 (Time-Domain Features)頻域特征 (Frequency-Domain Features)三、EEG信號高級特征時頻域特征 (Time-Frequency Domain Features)空間域特征 (Spatial-Domain Features)復雜動力…

React 路由守衛

下面,我們來系統的梳理關于 React Router 路由守衛 的基本知識點:一、路由守衛概述 1.1 什么是路由守衛 路由守衛是一種在用戶導航到特定路由之前或離開特定路由時執行邏輯的機制。它允許開發者控制用戶訪問權限、驗證條件或執行數據預加載等操作。 1.2 …

7月31日作業

1&#xff1a;請使用函數模板&#xff0c;寫一個能夠針對所有數據類型的數據的快速排序函數 并多寫幾個數組做測試代碼#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector…

客戶服務自動化:如何用CRM減少50%人工工單?

通過CRM系統實現客戶服務自動化&#xff0c;企業可以顯著減少人工工單的數量&#xff0c;提升整體服務效率。那么如何利用CRM系統實現客戶服務自動化&#xff1f;幫助企業從根本上解決人工工單處理的難題&#xff0c;提升服務質量&#xff0c;優化資源配置&#xff0c;最終實現…

常用設計模式系列(十四)—模板方法模式

常用設計模式系列&#xff08;十四&#xff09;—模板方法模式 第一節 前言 之前我完成了創建型設計模式和結構型設計模式&#xff0c;我們今天將踏入設計模式的第三章&#xff1a;行為型設計模式&#xff0c;你是否還記得什么是行為型設計模式嗎&#xff1f;行為型模式&#x…

DoRA詳解:從LoRA到權重分解的進化

DoRA??是一種用于??大語言模型&#xff08;LLM&#xff09;微調??的技術&#xff0c;全稱為 ??"Weight-Decomposed Low-Rank Adaptation"??&#xff08;權重分解的低秩自適應&#xff09;。它是對現有微調方法&#xff08;如 ??LoRA??&#xff09;的改…

RocksDB關鍵設計詳解

0 說明 近日工作中使用了 RocksDB。RocksDB 的優點此處無需多說&#xff0c;它的一個 feature 是其有很多優化選項用于對 RocksDB 進行調優。欲熟悉這些參數&#xff0c;必須對其背后的原理有所了解&#xff0c;本文主要整理一些 RocksDB 的 wiki 文檔&#xff0c;以備自己參考…

Kotlin -> 普通Lambda vs 掛起Lambda

1. 普通Lambda vs 掛起Lambda的本質區別 1.1 普通Lambda&#xff08;同步執行&#xff09; val lambda: (Int) -> String { it.toString() }// 編譯器生成&#xff1a; class Lambda$1 : Function1<Int, String> {override fun invoke(p1: Int): String {return p1.t…

Apache Ignite 中如何配置和啟用各類監控指標

這段文檔是關于 Apache Ignite 中如何配置和啟用各類監控指標&#xff08;Metrics&#xff09; 的詳細說明。核心思想是&#xff1a;“指標收集有性能開銷&#xff0c;因此默認不開啟所有指標&#xff0c;需要你按需手動開啟。” 下面我們來逐層拆解、通俗易懂地理解這些內容。…

uniapp x swiper/image組件mode=“aspectFit“ 圖片有的閃現后黑屏

部分安卓機針對大寫.JPG 有的豎圖正常&#xff0c;橫圖/正方形不對。解決方案&#xff1a;加border-radius: 1rpx;就行<!-- 圖片預覽彈出框 --><fui-backdrop v-model:visible"imgPreviewVisible" :closable"true" onclick"imgPreviewVisibl…

conda安裝jupter

conda自帶的jupter本來在base里沒有在pytorch環境中 安裝jupter conda install nb_conda 此擴展程序在 Jupyter 文件瀏覽器中添加了一個 Conda 選項卡。選擇 Conda 選項卡將顯示&#xff1a; 當前存在的 Conda 環境列表當前配置的通道中可用的 Conda 包列表&#xff08;htt…

嵌入式操作系統快速入門(1):快速入門操作系統常見基礎概念

快速體會操作系統常見基礎概念 1 初識基本概念 1.1 操作系統 一個軟件程序&#xff1b;用于解決計算機多任務執行時的資源爭搶問題&#xff1b;管理計算機中的各種資源&#xff0c;確保計算機正常完成各種工作&#xff08;任務&#xff09;&#xff0c;解決多任務環境中任務的調…

網絡安全-同形異義字攻擊:眼見并非為實(附案例詳解)

什么是同形異義字攻擊&#xff1f;對人眼而言&#xff0c;一切看起來完全正常。但實際上&#xff0c;例如單詞 Ηоmоgraph 并不完全等同于單詞 Homograph。它們之間的差異非常細微&#xff0c;難以察覺。Ηоmоgraph 實際上包含了幾個非拉丁字母。在本例中&#xff0c;我們將…

windows服務器 maven 配置環境變量,驗證maven環境變量是否配置成功

前置條件&#xff1a;先確認對應版本的jdk已安裝配置好&#xff0c;可使用java -version檢測; 我使用的apache-maven-3.6.3是對應jdk1.8 1.找到系統變量配置窗口 以windows server2019為例&#xff0c;右鍵計算機屬性&#xff0c; 高級系統設置–》環境變量–》系統變量2.新建M…

安裝 docker compose v2版 筆記250731

安裝 docker compose v2版 筆記250731 簡述 v2版是插件形式 確認系統要求, 已安裝 Docker Engine&#xff08;版本 20.10.5 或更高&#xff09; 安裝方式可分為 apt 或 yum 安裝 (能自動升級) apt install docker-compose-pluginyum install docker-compose-plugin 手動二…

PHP 5.5 Action Management with Parameters (English Version)

PHP 5.5 Action Management with Parameters (English Version) Here’s a PHP 5.5 compatible script that uses URL parameters instead of paths for all operations: <?php // Start session for persistent storage session_start();// Initialize the stored actio…

GR-3(4B) 技術報告--2025.7.23--字節跳動 Seed

0. 前言 前兩天字節發布了GR-3&#xff0c;粗略的看了一下&#xff0c;在某些方面超過了SOTA pi0&#xff0c;雖然不開源&#xff0c;但是也可以來看一看。 官方項目頁 1. GR-3模型 1.1 背景 在機器人研究領域&#xff0c;一直以來的目標就是打造能夠幫助人類完成日常任務…

Linux網絡編程:UDP 的echo server

目錄 前言&#xff1a; 一、服務端的實現 1、創建socket套接字 2、綁定地址信息 3、執行啟動程序 二、用戶端的實現 總結&#xff1a; 前言&#xff1a; 大家好啊&#xff0c;前面我們介紹了一些在網絡編程中的一些基本的概念知識。 今天我們就借著上節課提到的&#…