SSH (Secure Shell)詳解



Secure ShellSSH)是一種加密?網絡協議,用于在不安全的網絡上安全地運行網絡服務。

SSH通過客戶端 - 服務器體系結構中的不安全網絡提供安全通道,將SSH客戶端應用程序與SSH服務器相連接

常見的應用程序包括遠程命令行登錄和遠程命令執行,但任何網絡服務都可以通過SSH進行安全保護。

協議規范區分了兩個主要版本,分別稱為SSH-1和SSH-2。最著名的示例應用程序是用戶遠程登錄計算機系統。

該協議最明顯的應用是在類似Unix的操作系統訪問shell帳戶,但它在Windows上也有一些有限的用途在2015年,微軟宣布他們將在未來的版本中包含對SSH的本地支持。

SSH被設計為替代Telnet不安全的遠程shell協議,如Berkeley?rloginrshrexec協議。這些協議明文形式發送信息,特別是密碼使它們易于使用數據包分析進行截取和披露SSH使用加密旨在通過不安全的網絡(如Internet)提供數據的機密性和完整性,盡管Edward Snowden泄漏的文件表明國家安全局有時可以解密SSH,允許他們讀取SSH會話的內容。

2017年7月6日,政府透明度組織維基解密確認,美國中央情報局開發的工具可以安裝在運行Microsoft?WindowsGNU / Linux操作系統的計算機上,以攔截受害系統上SSH客戶端啟動的SSH連接。



定義

如果需要,SSH使用公鑰加密驗證遠程計算機并允許它對用戶進行身份驗證。[有幾種使用SSH的方式;?一種是使用自動生成的公私密鑰對來簡單地加密網絡連接,然后使用密碼認證登錄。

另一種方法是使用手動生成的公私密鑰對來執行認證,允許用戶或程序登錄而不必指定密碼。在這種情況下,任何人都可以生成一對不同的密鑰(公共和私人)。公鑰被放置在所有必須允許訪問匹配私鑰所有者的計算機上(所有者保密私鑰)。雖然身份驗證基于私鑰,但身份驗證過程中永遠不會通過網絡傳輸密鑰本身。SSH只驗證提供公鑰的同一個人是否擁有匹配的私鑰。在SSH的所有版本中它來驗證未知是重要的公共密鑰,即關聯與身份的公共密鑰,然后再接受它們為有效的。在未經驗證的情況下接受攻擊者的公鑰將授權未經授權的攻擊者作為有效用戶。

密鑰管理

類Unix系統上,授權公鑰列表通常存儲在允許遠程登錄的用戶的主目錄中,文件為?/ .ssh / authorized_keys。這個文件只有在除了所有者和根以外的任何東西都不能被寫入的情況下,才受到SSH的尊重。當遠程端存在公鑰并且本地端存在匹配的私鑰時,不再需要輸入密碼(某些軟件(如消息傳遞接口(MPI)堆棧)可能需要此無密碼訪問權限才能運行正確)。但是,為了增加安全性,可以使用密碼鎖定私鑰本身。

私鑰也可以在標準位置查找,其完整路徑可以指定為命令行設置(ssh?選項-i)。SSH-凱基工具產生公鑰和私鑰,總是成對出現。

SSH還支持通過自動生成的密鑰加密的基于密碼的身份驗證。在這種情況下,攻擊者可以模仿合法的服務器端,請求密碼并獲取它(中間人攻擊)。但是,這只有在雙方之前從未認證過的情況下才有可能,因為SSH記住了服務器端以前使用的密鑰。SSH客戶端在接受新的,以前未知的服務器的密鑰之前發出警告。密碼認證可以被禁用。

用法

SSH通常用于登錄遠程機器并執行命令,但它也支持隧道轉發?TCP端口X11連接;?它可以使用關聯的SSH文件傳輸(SFTP)或安全副本(SCP)協議傳輸文件[2]?SSH使用客戶端 - 服務器模型。

標準TCP端口?22已被分配用于接觸SSH服務器。

SSH?客戶端程序通常用于建立到接受遠程連接的SSH?守護程序的連接。兩者通常都存在于大多數現代操作系統中,包括macOS,大多數LinuxOpenBSDFreeBSDNetBSDSolarisOpenVMS值得注意的是,Windows是少數幾個默認不包含SSH的現代桌面/服務器操作系統之一。專有免費軟件開源(例如PuTTY和作為Cygwin?一部分OpenSSH版本)存在各種復雜性和完整性的版本。本地Linux文件管理器(例如Konqueror)可以使用FISH協議通過拖放功能提供分割窗格GUI。開源Windows程序WinSCP?使用PuTTY作為后端提供了類似的文件管理(同步,復制,遠程刪除)功能。WinSCP?和PuTTY?都可以直接從USB驅動器運行,而無需在客戶機上安裝。在Windows中設置SSH服務器通常需要安裝(例如,通過安裝Cygwin[)。?Windows 10版本1709中,可以使用官方的OpenSSH Win32端口。

SSH在云計算中非常重要,可以解決連接問題,避免直接在Internet上暴露基于云的虛擬機的安全問題。SSH隧道可以通過互聯網提供安全路徑,通過防火墻到虛擬機。

歷史和發展

版本1.x?

1995年,芬蘭赫爾辛基科技大學的研究員TatuYl?nen設計了第一個版本的協議(現在稱為SSH-1),并在他的大學網絡上發起了密碼嗅探攻擊?SSH的目標是取代早期的rloginTELNET,ftp?rsh協議,它們不提供強認證,也不保證機密性。Yl?nen將其實??施作為免費軟件發布在1995年7月,該工具迅速流行起來。到1995年底,SSH用戶群已增至50個國家的20,000名用戶。

1995年12月,Yl?nen成立了SSH通信安全公司,以推廣和開發SSH。原始版本的SSH軟件使用了各種免費軟件,例如GNU libgmp,但由SSH Communications Security發布的更新版本演變為日益專有的軟件

據估計,到2000年,用戶數量已增長到200萬。

版本2.x?

“Secsh”是負責SSH協議第2版的IETF工作組的官方Internet工程任務組(IETF)名稱。2006年,該協議的修訂版本SSH-2被采納為標準。該版本與SSH-1不兼容。SSH-2通過SSH-1提供安全性和功能改進。例如,通過Diffie-Hellman密鑰交換通過消息認證碼進行強大的完整性檢查,可以提供更好的安全性SSH-2的新功能包括通過單個SSH連接運行任意數量的shell會話。由于SSH-2在SSH-1上的優越性和普及性,一些實現例如Lsh?Dropbear?僅支持SSH-2協議。

版本1.99?

在2006年1月,在版本2.1建立之后,RFC 4253指出,支持2.0和以前版本的SSH的SSH服務器應該將它的版本識別為1.99。這不是一個真正的版本,而是一種識別向后兼容性的方法

OpenSSH和OSSH?

在1999年,開發人員想要一個免費的軟件版本,然后回到原來的1.2.12版本的原始SSH程序中,該程序是在開源許可證下最后發布的Bj?rnGr?nvall的OSSH隨后從該代碼庫開發而來。此后不久,OpenBSD的開發分叉Gr?nvall的代碼,并在其上做了廣泛的工作,創造OpenSSH的,它隨2.6版本的OpenBSD。從這個版本開始,一個“可移植性”分支形成了將OpenSSH移植到其他操作系統。

截至2005年OpenSSH是最受歡迎的SSH實現中的一種,在大量操作系統中默認使用。OSSH同時已經過時。OpenSSH繼續保持并支持SSH-2協議,已經從OpenSSH 7.6版本的代碼庫中刪除了對SSH-1的支持。

用途

通過SSH?隧道傳輸X11應用程序的示例:用戶'josh'已經從本地機器'foofighter'連接到遠程機器'tengwar'以運行xeyes
使用運行在Windows上的PuTTY通過SSH?登錄到OpenWrt

SSH是一種協議,可用于許多平臺上的許多應用程序,包括大多數Unix變體(LinuxBSD包括Apple的?macOSSolaris)以及Microsoft Windows下面的一些應用程序可能需要僅與特定SSH客戶端或服務器兼容的功能。例如,使用SSH協議來實現VPN是可能的,但目前只有OpenSSH服務器和客戶端實現。

  • 要登錄到遠程主機上的shell(替換Telnetrlogin
  • 為了在遠程主機上執行單個命令(替換rsh
  • 為了設置自動(無密碼)登錄到遠程服務器(例如,使用OpenSSH?
  • 安全的文件傳輸
  • 結合rsync備份,有效且安全地復制和鏡像文件
  • 轉發隧道的端口(不要與混淆VPN,其路由不同網絡之間的數據包,或?2個廣播域到一個)。
  • 用作完整的加密VPN。請注意,只有OpenSSH服務器和客戶端支持此功能。
  • 對于從遠程主機轉發X(可能通過多個中間主機)
  • 用于通過與支持SOCKS協議的?SSH客戶端的加密代理連接來瀏覽網頁
  • 使用SSHFS將本地計算機上的目錄作為文件系統安全地掛載到遠程服務器
  • 用于通過上述一種或多種機制自動遠程監控和管理服務器。
  • 用于支持SSH的移動或嵌入式設備上的開發。

文件傳輸協議

Secure Shell協議用于多種文件傳輸機制。

  • 安全拷貝(SCP),通過SSH?RCP協議發展而來
  • rsync,旨在比SCP更有效
  • SSH文件傳輸協議(SFTP),一種安全的FTP替代品(不要與SSHFTPS上的FTP混淆
  • 1998年發布的通過shell協議傳輸的文件(又名FISH),通過SSH?Unix shell命令演變而來
  • 快速和安全協議(FASP),又名Aspera,使用SSH進行控制,使用UDP端口進行數據傳輸。

建筑

SSH-2二進制包的示意圖。

SSH-2協議具有內部架構(在RFC 4251中定義),具有良好分離的層,即:

  • 傳輸層(RFC 4253)。該層處理初始密鑰交換以及服務器認證,并設置加密,壓縮和完整性驗證。它向上層公開了一個用于發送和接收每個大小最多為32,768字節的明文數據包的接口(實現中可以允許使用更多的接口)。傳輸層還安排密鑰重新交換,通常在1 GB數據傳輸后或1小時后(以先發生者為準)。
  • 所述用戶認證層(RFC 4252)。該層處理客戶端認證并提供多種認證方法。身份驗證是由客戶端驅動的:當系統提示您輸入密碼時,可能是SSH客戶端提示,而不是服務器。服務器僅響應客戶端的身份驗證請求。廣泛使用的用戶認證方法包括以下內容:
    • 密碼:一種簡單密碼驗證的方法,包括允許更改密碼的設施。并非所有的程序都使用這種方法
    • publickey基于公共密鑰的身份驗證方法,通常至少支持DSARSA密鑰對,其他實現也支持X.509證書。
    • 鍵盤交互RFC 4256):一種通用的方法,其中服務器發送一個或多個提示輸入信息,客戶端顯示它們并發回用戶鍵入的響應。用于提供一次性密碼認證,如S / KeySecurIDPAM是底層的主機認證提供者時,由某些OpenSSH配置使用,以有效地提供密碼認證,有時導致無法使用僅支持普通密碼認證方法的客戶端登錄
    • GSSAPI身份驗證方法,它提供了一種可擴展的方案,可使用Kerberos 5NTLM等外部機制執行SSH身份驗證,為SSH會話提供單一登錄功能。這些方法通常通過用于組織的商業SSH實現來實現,但OpenSSH確實有一個可用的GSSAPI實現。
  • 連接層(RFC 4254)。該層定義了提供SSH服務的頻道,頻道請求和全局請求的概念。一個SSH連接可以同時托管多個通道,每個通道都可以雙向傳輸數據。通道請求用于中繼通道特定的帶外數據,例如,更改的終端窗口大小或服務器端進程的退出代碼。SSH客戶端請求使用全局請求轉發的服務器端端口。標準渠道類型包括:
    • 外殼為端子殼,SFTP和exec請求(包括SCP轉移)
    • direct-tcpip用于客戶端到服務器的轉發連接
    • forwarded-tcpip用于服務器到客戶端的轉發連接
  • SSHFP?DNS記錄(RFC 4255)規定,才能在驗證主機的真實性,以幫助主機公鑰指紋。

這種開放式體系結構提供了相當大的靈活性,允許將SSH用于超出安全shell的各種用途。傳輸層的功能本身就與傳輸層安全(TLS)相當;?用戶認證層具有高度可擴展的自定義認證方法;?并且連接層提供了將多個輔助會話復用到單個SSH連接的能力,這一功能與BEEP相當,并且在TLS中不可用。

增強功能

這些旨在提高SSH產品的性能:

  • SSH-over-?SCTP:支持SCTP而不是TCP作為面向連接的傳輸層協議
  • ECDSA:支持橢圓曲線DSA而不是DSA或RSA進行簽名。
  • ECDH:支持橢圓曲線Diffie-Hellman,而不是簡單的Diffie-Hellman來進行加密密鑰交換。
  • UMAC:對UMAC而不是支持HMACMAC?/完整性。

轉自**百科

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

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

相關文章

股票配對收益

import pandas as pd import numpy as npimport matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 字體設置 import matplotlib matplotlib.rcParams[axes.unicode_minus]False # 負號顯示問題from arch.unitroot import ADF …

YUV420、YUV422、RGB24轉換

//平面YUV422轉平面RGB24 static void YUV422p_to_RGB24(unsigned char *yuv422[3], unsigned char *rgb24, int width, int height) { int R,G,B,Y,U,V; int x,y; int nWidth width>>1; //色度信號寬度 for (y0;y<height;y) { for (x0;x<width;x) { …

最長非下降子序列(O(nlogn))(offer收割)

題目 如題 思路 核心思想是&#xff0c;維護一個數組ends&#xff0c;它記錄了長度為k的子序列的末尾元素的最小值。聽起來很抽象&#xff0c;我們不妨手動演示一遍整個過程。 假設數組a{2,9,4,27,29,15,7}&#xff0c;令length表示當前找到的最長非下降子序列的長度。初始時le…

[Python]小甲魚Python視頻第026課(字典:當索引不好用時2)課后題及參考解答

# -*- coding: utf-8 -*- """ Created on Fri Mar 8 10:32:20 2019author: Administrator """"""測試題&#xff1a;0. Python的字典是否支持一鍵&#xff08;Key&#xff09;多值&#xff08;Value&#xff09;&#xff1f;不支…

2021-08-12 畫蠟燭線

畫蠟燭線 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ochl import matplotlib.pyplot as plt from matplotlib.pylab import date2num# 先畫日K線 fig, axes plt.subplots(nrows1, ncols1, figsize(20, …

替換字符串列表中字符串

//替換字符串列表中字符串 procedure StringsReplace(var S : TStrings; OldPattern, NewPattern: string; Flags: TReplaceFlags);var i : integer; tmpstr : string;begin for i : 0 to S.Count -1 do begin tmpstr : S[i]; s[i] : StringReplace(tmpstr, Ol…

TCP/IP協議族 詳解(TCP/IP四層模型、OSI七層模型)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 TCP/IP協議族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;簡稱TCP/IP。由于在網絡通訊協…

RGB 24和YUY2相互轉換

YUY2經常用于電視制式以及許多攝像頭的輸出格式.而我們在處理時經常需要將其轉化為RGB進行處理,這里簡單介紹下YUY2(YUV)與RGB之間相互轉化的關系: http://msdn2.microsoft.com/en-us/library/ms893078.aspx YUY2(YUV) To RGB: C Y - 16 D U - 128 E V - 128 R clip((…

通達信獲取數據

#python第三方庫pytdx獲取 from pytdx.hq import TdxHq_API api TdxHq_API() # 數據獲取接口一般返回list結構&#xff0c;如果需要轉化為pandas Dataframe接口&#xff0c;可以使用 api.to_df 進行轉化 with api.connect(119.147.212.81, 7709): # 返回普通list data …

ICMP (互聯網控制消息協議 )是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 互聯網控制消息協議&#xff08;英語&#xff1a;Internet Control Message Protocol&#xff0c;縮寫&#xff1a;ICMP&#xff09;是互…

股票數據相關性分析

導入相關包 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import akshare as ak from sklearn import cluster, covariance, manifold %matplotlib inline #Jupyter Notebook顯示圖形專用 plt…

分享一個輔助分析內存泄漏的腳本

最近給系統做了一點優化&#xff0c;前幾天去查看系統監控&#xff0c;想看看上線前后cpu使用率曲線變化情況。查看的時候意外發現上線前后內存占用相差不少&#xff0c;20%以上。 本來我沒怎么在意這個問題&#xff0c;因為我們系統會在運行過程中緩存部分數據內容。但客戶覺得…

windows Virtualbox下配置Ubuntu,且用ssh連接

1、軟件介紹 1&#xff09;virtualbox 5.2.22 2&#xff09;Ubuntu 18.04 3&#xff09;git bash 2、virtualbox設置 安裝完Ubuntu后點擊該鏡像的設置&#xff0c;依次點擊“網絡”——“端口轉發” 將主機端口設置為一個閑置端口&#xff0c;子系統端口也就是Ubuntu端口設置…

專訪劉偉:軟件開發人員的內功修煉之道

摘要&#xff1a;數學修養對軟件開發之路起著什么作用&#xff1f;碼農如何修煉自己的內功并成長為優秀的軟件開發員&#xff1f;帶著相關思考&#xff0c;社區之星第10期采訪了中南大學副教授——劉偉。他對數學修養、設計模式、軟件架構和重構方面的獨特見解&#xff0c;相信…

多線程數據下載(akshare)

import akshare as ak import pandas as pd from multiprocessing.dummy import Pool as ThreadPool import datetime import timedef get_hs300_stock_codes():獲取滬深300股票代碼列表:return:hs300ak.index_stock_cons_sina("000300")codeshs300[code]codescodes.…

MongoDB 4.6.1 c++ driver 編譯

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主同意不得轉載。https://blog.csdn.net/sheismylife/article/details/25512251 這個版本號已經和之前不一樣了。有專門的github的項目。https://github.com/mongodb/mongo-cxx-driver首先獲取源碼&#xff1a;git cl…

地址解析協議 (ARP) 是什么

地址解析協議 (ARP) 是通過解析網路層地址來找尋數據鏈路層地址的一個在網絡協議包中極其重要的網絡傳輸協議。 ARP是通過網絡地址(例&#xff1a;IPv4)來定位MAC地址 (也稱為乙太地址)。 ARP已經在很多網路層和數據鏈接層之間得以實現&#xff0c;包括IPv4&#xff0c;Chaosn…

04.React事件 方法、 React定義方法的幾種方式 獲取數據 改變數據 執行方法傳值...

2019獨角獸企業重金招聘Python工程師標準>>> 一.基本用法 在以類繼承的方式定義的組件中&#xff0c;為了能方便地調用當前組件的其他成員方法或屬性&#xff08;如&#xff1a;this.state&#xff09;&#xff0c;通常需要將事件處理函數運行時的 this 指向當前組件…

代碼之美——Doom3源代碼賞析

摘要&#xff1a;Dyad作者、資深C工程師Shawn McGrathz在空閑時翻看了Doom3的源代碼&#xff0c;發出了這樣的驚嘆&#xff1a;“這是我見過的最整潔、最優美的代碼&#xff01;”“Doom 3的源代碼讓我對那些優秀的程序員刮目相看。”因此有了本文。 背景介紹&#xff1a; Doom…

UDP:用戶數據報協議 是什么

用戶數據報協議&#xff08;英語&#xff1a;User Datagram Protocol&#xff0c;縮寫為UDP&#xff09;&#xff0c;又稱用戶數據報文協議&#xff0c;是一個簡單的面向數據報的傳輸層協議&#xff0c;正式規范為RFC 768。在TCP/IP模型中&#xff0c;UDP為網絡層以上和應用層以…