SSH配置優化:提升本地內網Linux服務器遠程連接速度與穩定性

文章目錄

    • 引言
    • 一. 理解SSH連接過程與影響因素
    • 二. 服務器端SSH配置優化
    • 三. 客戶端SSH配置優化
    • 四. 高級技巧
    • 五. 內網穿透突破公網IP限制
    • 總結

引言

SSH (Secure Shell) 是一種網絡協議,用于加密的網絡服務,常用于遠程登錄和管理Linux服務器。對于本地內網的Linux服務器,即使網絡環境相對穩定,優化SSH配置仍然可以顯著提升遠程連接的速度和穩定性。本文將深入探討SSH配置優化的各個方面,涵蓋服務器端和客戶端的調整,以及一些高級技巧,幫助你打造更高效、更可靠的遠程連接體驗。

ssh2

一. 理解SSH連接過程與影響因素

在開始優化之前,我們需要了解SSH連接的基本過程。大致包括:

  1. 客戶端發起連接請求: 客戶端向服務器發送連接請求。
  2. 密鑰交換: 客戶端和服務器協商加密算法和密鑰。
  3. 認證: 客戶端使用用戶名、密碼或密鑰進行身份驗證。
  4. 數據傳輸: 經過加密的數據在客戶端和服務器之間傳輸。

影響SSH連接速度和穩定性的因素有很多,包括:

  • 網絡帶寬: 網絡速度是影響數據傳輸速度的關鍵因素。
  • 網絡延遲: 網絡延遲越高,連接體驗越差。
  • 加密算法: 不同的加密算法對CPU的消耗不同,也會影響連接速度。
  • SSH配置: 不合理的SSH配置會降低連接效率。
  • 服務器負載: 服務器負載過高會影響SSH服務的響應速度。

二. 服務器端SSH配置優化

  1. 選擇合適的加密算法:

    SSH支持多種加密算法,優先推薦AEAD加密模式(如aes256-gcm

    例如:Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com

  2. 優化密鑰交換算法:

    密鑰交換算法用于協商加密算法和密鑰。推薦使用Curve25519和X25519,它們具有更高的安全性、更快的速度和更低的CPU消耗。在/etc/ssh/sshd_config文件中,使用KexAlgorithms參數指定允許使用的密鑰交換算法。

    例如:KexAlgorithms curve25519-sha256,curve25519-sha384

  3. 禁用弱密碼認證:

    為了提高安全性,應該禁用弱密碼認證,強制使用密鑰認證。在/etc/ssh/sshd_config文件中,將PermitRootLogin設置為noPasswordAuthentication設置為no

  4. 限制用戶訪問:

    可以使用AllowUsersDenyUsers參數限制允許或禁止訪問SSH的用戶。

  5. 調整TCP KeepAlive參數:

    TCP KeepAlive用于檢測斷開的連接。調整ClientAliveIntervalClientAliveCountMax參數可以防止長時間閑置的連接被服務器斷開。

    例如:ClientAliveInterval 60ClientAliveCountMax 3

三. 客戶端SSH配置優化

  1. 使用密鑰認證:

    密鑰認證比密碼認證更安全、更方便。通過生成密鑰對,將公鑰復制到服務器,客戶端可以使用私鑰進行身份驗證。

  2. 啟用壓縮:

    啟用壓縮可以減少數據傳輸量,提高連接速度。在客戶端的SSH連接命令中,使用-C參數啟用壓縮。

    例如:ssh -C user@server

  3. 使用ControlMaster:

    ControlMaster允許客戶端復用SSH連接,避免每次連接都重新協商加密算法和密鑰。

    在客戶端的SSH配置文件(~/.ssh/config)中,添加以下配置:

    Host *ControlMaster autoControlPath ~/.ssh/control-%r@%h:%pControlPersist 10m
    

    這將在客戶端緩存SSH連接10分鐘。

  4. 優化MTU (Maximum Transmission Unit):

    調整MTU可以避免數據包分片,提高網絡效率。可以通過ping命令測試最佳MTU值。

四. 高級技巧

  1. 使用TCP窗口縮放:

    TCP窗口縮放允許更大的TCP窗口大小,提高網絡吞吐量。可以通過調整內核參數啟用TCP窗口縮放。

  2. 調整內核參數:

    可以通過調整內核參數(例如net.ipv4.tcp_tw_reusenet.ipv4.tcp_fin_timeout)優化TCP連接。

  3. 使用防火墻:

    防火墻可以限制對SSH服務器的訪問,提高安全性。

ssh

五. 內網穿透突破公網IP限制

即使經過上述優化,在沒有公網IP的情況下,遠程SSH連接仍然面臨挑戰。對于很多家庭或小型辦公環境,通常只能通過內網連接到服務器。這時,內網穿透技術就顯得尤為重要。

內網穿透的核心思想是建立一個位于具有公網IP的服務器(通常是云服務器)和你的內網服務器之間的安全隧道,使得外部網絡能夠訪問你的內網服務器。市面上有很多內網穿透工具,其中cpolar是一個簡單易用且功能強大的選擇。

使用cpolar 實現公網環境 SSH 遠程連接:

這里我們拿ssh連接ubuntu系統進行舉例:

  1. 首先我們需要在ubuntu系統中安裝ssh服務:

    sudo apt-get install openssh-server
    
  2. 安裝cpolar內網穿透工具

    在終端中使用一鍵腳本安裝命令:

    curl https://get.cpolar.sh | sudo sh
    

    Cpolar安裝和成功啟動服務后,在瀏覽器上輸入ubuntu主機IP加9200端口即:【http://localhost:9200】訪問Cpolar web UI管理界面。

  3. 創建公網地址

    點擊左側隧道管理——隧道列表

    可以看到安裝cpolar后,會自動創建一條ssh隧道。(如果要創建其他服務的公網地址需要點擊創建隧道進行配置)

    image-20240801133948736

    然后點擊下方的在線隧道列表,可以看到ssh的公網地址:

    image-20240801134056417

  4. 使用SSH客戶端來遠程連接Ubuntu,這里我使用的ssh客戶端是Xshell

    打開Xshell,點擊新建:

    • 名稱:自定義填寫
    • 協議:SSH
    • 主機:填寫cpolar剛才生成的tcp地址(復制tcp://后面)
    • 端口號:填寫生成的tcp地址:后面 (這里我是10898)

    點擊連接

    填寫Ubuntu用戶名、密碼點擊確定,可以看到遠程連接成功,任意設備使用該地址都可以遠程ssh連接本地Linux服務器!

    PS:以上步驟在cpolar中使用的是隨機臨時tcp端口地址,所生成的公網地址為隨機臨時地址,該公網地址24小時內會隨機變化。為其配置固定的公網地址和端口后不會變化,設置后將無需每天重復修改地址。

    配置固定tcp端口地址需要將Cpolar升級到專業版套餐或以上。

    配置固定TCP公網地址可以參考這篇文章:使用Cpolar配置固定TCP端口地址

總結

通過優化SSH配置,并結合內網穿透技術如cpolar,可以顯著提升本地內網Linux服務器遠程連接的速度和穩定性。本文介紹的優化方法涵蓋服務器端和客戶端的調整,以及一些高級技巧。選擇合適的優化方法,根據實際需求進行調整,并利用內網穿透技術,可以打造更高效、更可靠的遠程連接體驗。在進行配置更改后,務必重啟SSH服務以使更改生效。 記住,安全是首要考慮因素,在優化性能的同時,也要確保SSH服務器的安全。

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

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

相關文章

BERT - MLM 和 NSP

本節代碼將實現BERT模型的兩個主要預訓練任務:掩碼語言模型(Masked Language Model, MLM) 和 下一句預測(Next Sentence Prediction, NSP)。 1. create_nsp_dataset 函數 這個函數用于生成NSP任務的數據集。 def cr…

“實時滾動”插件:一個簡單的基于vue.js的無縫滾動

1、參考連接: 安裝 | vue-seamless-scroll 2、使用步驟: 第一步:安裝 yarn add vue-seamless-scroll 第二步:引入 import vueSeamlessScroll from vue-seamless-scroll/src 第三步:注冊 components: { vueSeamless…

【藍橋杯】賽前練習

1. 排序 import os import sysn=int(input()) data=list(map(int,input().split(" "))) data.sort() for d in data:print(d,end=" ") print() for d in data[::-1]:print(d,end=" ")2. 走迷宮BFS import os import sys from collections import…

pyTorch-遷移學習-學習率衰減-四種天氣圖片多分類問題

目錄 1.導包 2.加載數據、拼接訓練、測試數據的文件夾路徑 3.數據預處理 3.1 transforms.Compose數據轉化 3.2分類存儲的圖片數據創建dataloader torchvision.datasets.ImageFolder torch.utils.data.DataLoader 4.加載預訓練好的模型(遷移學習) 4.1固定、修改預訓練…

第十四屆藍橋杯大賽軟件賽國賽Python大學B組題解

文章目錄 彈珠堆放劃分偶串交易賬本背包問題翻轉最大階梯最長回文前后綴貿易航線困局 彈珠堆放 遞推式 a i a i ? 1 i a_ia_{i-1}i ai?ai?1?i, n 20230610 n20230610 n20230610非常小,直接模擬 答案等于 494 494 494 劃分 因為總和為 1 e 6 1e6…

Python 和 JavaScript兩種語言的相似部分-由DeepSeek產生

Python 和 JavaScript 作為兩種流行的編程語言,雖然在設計目標和應用場景上有差異(Python 偏向后端和腳本,JavaScript 偏向前端和動態交互),但它們的語法存在許多相似之處。以下是兩者在語法上的主要共同點及對比&…

改善 Maven 的依賴性

大家好,這里是架構資源棧!點擊上方關注,添加“星標”,一起學習大廠前沿架構! 建議使用mvn dependency:analyze命令來擺脫已聲明但未使用的依賴項: 還有另一個用例, mvn dependency:analyze 它可…

【SQL】子查詢詳解(附例題)

子查詢 子查詢的表示形式為:(SELECT 語句),它是IN、EXISTS等運算符的運算數,它也出現于FROM子句和VALUES子句。包含子查詢的查詢叫做嵌套查詢。嵌套查詢分為相關嵌套查詢和不想關嵌套查詢 WHERE子句中的子查詢 比較運算符 子查詢的結果是…

Stable Diffusion 擴展知識實操整合

本文的例子都是基于秋葉整合包打開的webui實現的 一、ADetailer——改善人臉扭曲、惡心 After detailer插件可以自動檢測生成圖片的人臉,針對人臉自動上蒙版,自動進行重繪,整個流程一氣呵成,因此可以避免許多重復的操作。除此之…

freertos內存管理簡要概述

概述 內存管理的重要性 在嵌入式系統中,內存資源通常是有限的。合理的內存管理可以確保系統高效、穩定地運行,避免因內存泄漏、碎片化等問題導致系統崩潰或性能下降。FreeRTOS 的內存管理機制有助于開發者靈活地分配和釋放內存,提高內存利用…

按規則批量修改文件擴展名、刪除擴展名或添加擴展名

文件的擴展名是多種多樣的,有些不同文件的擴展名之間相互是可以直接轉換的。我們工作當中最常見的就是 doc 與 docx、xls 與 xlsx、jpg 與 jpeg、html 與 htm 等等,這些格式在大部分場景下都是可以相互轉換 能直接兼容的。我們今天要介紹的就是如何按照一…

熱門面試題第15天|最大二叉樹 合并二叉樹 驗證二叉搜索樹 二叉搜索樹中的搜索

654.最大二叉樹 力扣題目地址(opens new window) 給定一個不含重復元素的整數數組。一個以此數組構建的最大二叉樹定義如下: 二叉樹的根是數組中的最大元素。左子樹是通過數組中最大值左邊部分構造出的最大二叉樹。右子樹是通過數組中最大值右邊部分構造出的最大…

MySQL學習筆記7【InnoDB】

Innodb 1. 架構 1.1 內存部分 buffer pool 緩沖池是主存中的第一個區域,里面可以緩存磁盤上經常操作的真實數據,在執行增刪查改操作時,先操作緩沖池中的數據,然后以一定頻率刷新到磁盤,這樣操作明顯提升了速度。 …

RNN、LSTM、GRU匯總

RNN、LSTM、GRU匯總 0、論文匯總1.RNN論文2、LSTM論文3、GRU4、其他匯總 1、發展史2、配置和架構1.配置2.架構 3、基本結構1.神經元2.RNN1. **RNN和前饋網絡區別:**2. 計算公式:3. **梯度消失:**4. **RNN類型**:(查看發展史)5. **…

django數據遷移操作受阻

錯誤信息: django.db.utils.OperationalError: (1227, Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation)根據錯誤信息分析,該問題是由于MySQL用戶 缺乏SYSTEM_VARI…

WinForm真入門(13)——ListBox控件詳解

WinForm ListBox 詳解與案例 一、核心概念 ?ListBox? 是 Windows 窗體中用于展示可滾動列表項的控件,支持單選或多選操作,適用于需要用戶從固定數據集中選擇一項或多項的場景?。 二、核心屬性 屬性說明?Items?管理列表項的集合,支持動…

局域網內文件共享的實用軟件推薦

軟件介紹 在日常辦公、學習或家庭網絡環境里,局域網內文件共享是個常見需求。有一款免費的局域網共享軟件非常適合這種場景。 這款局域網共享軟件使用起來非常簡單,不需要安裝,直接點擊就能使用。 它的操作流程簡單易懂,用戶只要…

ViewModel vs AndroidViewModel:核心區別與使用場景詳解

在 Android 的 MVVM 架構中,ViewModel 和 AndroidViewModel 都是用于管理 UI 相關數據的組件,但二者有一些關鍵區別: 1. ViewModel 基本用途:用于存儲和管理與 UI 相關的數據,生命周期與 Activity/Fragment 解耦&…

C語言--求n以內的素數(質數)

求n以內的素數,可以用試除法或者埃拉托斯特尼篩法(埃氏篩法) 文章目錄 試除法埃拉托斯特尼篩法(埃氏篩法)兩種方法測試運行效率 輸入:數字n 輸出:n以內所有的素數 不管是哪個方法,都…

Skynet.socket 函數族使用詳解

目錄 Skynet.socket 函數族使用詳解核心功能分類一、TCP 連接管理1. 監聽端口2. 建立連接3. 關閉連接 二、數據讀寫操作1. 阻塞式讀取2. 寫入數據2.1 socket.write(fd, data) 的返回值2.2 示例代碼2.3 關鍵注意事項2.4 與其他函數的區別2.5 底層原理2.6 總結 三、UDP 處理1. 創…