檢視原始碼 SSH 協定簡介
SSH 是一種用於在不安全的網路上進行安全遠端登入和其他安全網路服務的協定。
範圍與目的
SSH 提供客戶端和伺服器之間單一、全雙工且以位元組為導向的連線。該協定還提供隱私性、完整性、伺服器驗證和中間人攻擊保護。
ssh
應用程式是 Erlang 中 SSH 傳輸、連線和驗證層協定的實作。它提供以下功能:
先決條件
假定讀者熟悉 Erlang 程式語言、OTP 的概念,並且對公鑰有基本了解。
協定概述
在概念上,SSH 協定可以劃分為四層
---
title: SSH Protocol Architecture
---
block-beta
columns 2
l1["SSH Client/Server Applications"]:2
l2a["Connection Protocol"] l2b["Authentication Protocol"]
l3["Transport Protocol"]:2
l4["TCP/IP Stack"]:2
傳輸協定
SSH 傳輸協定是一種安全的低階傳輸。它提供強大的加密、密碼學主機驗證和完整性保護。至少支援訊息驗證碼 (MAC) 和加密演算法。詳細資訊,請參閱 ssh
中的 ssh
手冊頁。
驗證協定
SSH 驗證協定是一種在 SSH 傳輸層協定上執行的通用使用者驗證協定。ssh
應用程式支援的使用者驗證方式如下:
- 使用公鑰技術。支援 RSA 和 DSA,但不支援 X509 憑證。
- 使用鍵盤互動驗證。這適用於不需要客戶端端任何特殊軟體支援的互動式驗證方法。所有驗證資料都是從鍵盤輸入的。
- 使用純密碼驗證方案。在此,純文字密碼在透過網路傳送之前會先加密。
在 ssh:connect/3,4 和 ssh:daemon/2,3 中提供了多種用於驗證處理的配置選項。
可透過實作 ssh
中的以下行為來自訂公鑰處理:
連線協定
SSH 連線協定透過傳輸管道提供應用程式支援服務,例如通道多路複用、流量控制、遠端程式執行、訊號傳播和連線轉送。可以在 ssh
的模組 ssh_connection
中找到用於處理 SSH 連線協定的函式。
通道
所有終端機工作階段、轉送的連線等都是通道。多個通道多路複用到單個連線中。所有通道都經過流量控制。這表示在收到訊息以指示有視窗空間可用之前,不會將任何資料傳送到通道對等端。初始視窗大小指定可以在不調整視窗的情況下傳送到通道對等端的通道資料位元組數。通常,SSH 客戶端會開啟通道,傳送資料(命令),接收資料(控制資訊),然後關閉通道。ssh_client_channel
行為處理 SSH 通道管理的通用部分。這使得撰寫您自己的使用流量控制的 SSH 客戶端/伺服器處理程序變得很容易,從而可以更加關注應用程式邏輯。
通道有以下三種形式:
- 子系統 - 可作為 SSH 伺服器一部分執行的具名服務,例如 SFTP (ssh_sftpd),預設內建於 SSH 精靈(伺服器)中,但可以停用。可以將 Erlang
ssh
精靈配置為執行任何 Erlang 實作的 SSH 子系統。 - Shell - 互動式 Shell。預設情況下,Erlang 精靈執行 Erlang Shell。可以透過提供您自己的讀取-求值-列印迴圈來自訂 Shell。您也可以提供自己的命令列介面 (CLI) 實作,但這需要更多工作。
- Exec - 單次遠端執行命令。請參閱函式
ssh_connection:exec/4
以取得更多資訊。
在哪裡尋找更多資訊
有關 SSH 協定的詳細資訊,請參閱以下請求評論 (RFC):