SSH

一笼痹、作用

ssh(Security Shell)是用來實現(xiàn)安全遠程管理的一個協(xié)議鳍置。相比于telnet,使用ssh能夠有效地解決信息泄露的問題排截。

二、算法及交互過程

ssh建立連接主要有以下五個步驟:
①協(xié)商ssh版本
②協(xié)商將要使用的各種算法
③通過Diffie-Hellman算法得到之后通信所使用的密鑰
④認證階段,服務器對客戶端進行身份驗證
⑤認證成功之后匾寝,客戶端請求發(fā)起會話搬葬,服務器確認之后即可開始信息交互


2.1.協(xié)商ssh版本

①客戶端向服務器發(fā)起連接請求,ssh協(xié)議基于TCP艳悔,默認端口為22
②服務器把自己的ssh協(xié)議版本號發(fā)送給客戶端
③客戶端知道了服務器所使用的版本后急凰,選擇相同或者能夠兼容服務器的版本,將版本信息發(fā)送給服務器
④服務器判斷是否支持客戶端要使用的版本猜年,如果支持抡锈,將進入算法和密鑰的協(xié)商階段,否則關閉此連接


2.2.算法協(xié)商

①客戶端發(fā)送自己支持的公鑰算法列表乔外,加密算法列表床三,MAC算法列表壓縮算法列表


②服務器回復ack報文確認杨幼,并發(fā)送自己支持的各種算法列表


③雙方開始協(xié)商要使用的各種算法撇簿,這里的協(xié)商以客戶端為主 ,按客戶端各算法列表從左至右開始匹配(例如加密算法中差购,最左邊的aes128-cbc的優(yōu)先級是最高的)四瘫,如果服務器支持相應的算法,則匹配成功欲逃,如果匹配到最后都不支持找蜜,則協(xié)商失敗

2.3.密鑰協(xié)商

由于使用的是SSH2.0版本,會話密鑰的協(xié)商方式使用Diffie-Hellman算法稳析。這里簡單地介紹一下這個算法:
Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一種密鑰交換算法洗做,它的有效性依賴于計算離散對數(shù)的難度

現(xiàn)客戶端A要和服務器B交換密鑰:
服務器B規(guī)定一個素數(shù)P,一個整數(shù)G彰居,G是P的原根
客戶端生成自己的私用密鑰a(a<q)诚纸,并計算公開密鑰e=G^a mod P,把e發(fā)送給服務器B
服務器生成自己的私用密鑰b(b<q)陈惰,并計算公開密鑰f=G^b mod P咬清,把f發(fā)送給客戶端A
客戶端A可以通過自己的私用密鑰a和服務器的公開密鑰f算出共享密鑰 K=f^a mod P
服務器B可以通過自己的私用密鑰b和客戶端的公開密鑰e算出共享密鑰 K=e^b mod P

二者計算的結果K值是一致的,從而完成了密鑰交換
a和b對其他人是保密的奴潘,攻擊者只能離散對數(shù)來確定密鑰

大致協(xié)商過程如下,由客戶端首先發(fā)起請求


客戶端發(fā)出的第一個報文說明了密鑰交互參數(shù):Min影钉、Number of Bits画髓、Max

服務器端收到客戶端DH請求后,設定P和G發(fā)送給客戶端平委,P是一個大素數(shù)奈虾,滿足客戶端剛剛發(fā)來的那些要求,G是大于1的數(shù),通常取2或者5

客戶端收到P和G后肉微,生成自己的私鑰a匾鸥,并根據(jù)a計算出自己的公鑰e,并把e發(fā)送給服務器端

服務器也會生成自己的私鑰b并計算出公鑰f碉纳,收到客戶端發(fā)來的e后勿负,利用b和e生成共享密鑰K,接著把f發(fā)給客戶端劳曹,用于客戶端計算共享密鑰K

KEX DH host key是服務器的主機公鑰(通常是RSA)
KEX DH H Signature是服務器用主機私鑰對計算出的哈希值H進行簽名的結果
H的值是將客戶端初始報文奴愉、服務器初始報文、客戶端DH公鑰铁孵、服務器DH公鑰等參數(shù)進行哈希的結果

客戶端接受到f之后锭硼,計算出共享密鑰K,然后服務器一樣計算出H的值蜕劝,并用服務器的公鑰解密KEX DH H Signature檀头,將結果與自己計算的H值比較,如果一致岖沛,就會向服務器發(fā)送New Keys報文暑始,雙方密鑰交換成功。計算出的H作為會話ID烫止,K作為之后通信過程中的加密密鑰

2.4.認證及交互階段

共享密鑰協(xié)商成功之后蒋荚,數(shù)據(jù)報文都被加密,只能看到加密后的結果:



認證方式有兩種:

  • 用戶名密碼認證
    客戶端發(fā)起認證請求馆蠕,服務器回復其公鑰
    客戶端使用服務器的公鑰將其用戶名密碼加密后發(fā)給服務器
    服務器使用自己的私鑰解密期升,驗證結果
  • 公鑰私鑰認證
    客戶端發(fā)送登錄的ip和用戶名,服務器識別該客戶端的公鑰(在authorized_keys文件中)互躬,利用該公鑰加密一段隨機字符串發(fā)送剛給客戶端
    客戶端使用私鑰解密播赁,得到隨機字符串后發(fā)送給服務器
    服務器收到該字符串,若與其之前生成的一致吼渡,即說明公私鑰匹配容为,認證成功
    注:要使用該認證方式需要事先在客戶端生成公私鑰,并把公鑰存放在服務器上

三寺酪、SSH相關應用

3.1.Linux的下ssh

linux系統(tǒng)中坎背,一般默認都安裝了ssh客戶端及服務端。ssh服務的相關進程是sshd寄雀,可以使用servcie sshd status(CentOS6)查看當前該服務的運行狀態(tài)得滤。

3.1.1.ssh client
  • 最簡單的登錄:ssh user@ip,如ssh root@1.1.1.1
ssh命令有關參數(shù):
-A:開啟認證代理連接轉發(fā)功能
-a:關閉認證代理連接轉發(fā)功能
-b:使用本地指定地址作為對應連接的源ip
-f:后臺執(zhí)行ssh指令
-i:指定身份文件
-p:指定遠程服務器端口
-N:不執(zhí)行遠程指令

  • 如果遠程服務器默認端口不是22(可以設置一個高位端口盒犹,比如10024)懂更,則需要指定端口:ssh user@ip -p 10024

如果我們要經(jīng)常使用某個遠程主機眨业,可以通過配置$HOME/.ssh/config文件更方便地進行連接

vim ~/.ssh/config  #當前是root用戶
Host test
    StrictHostKeyChecking no  #第一次連接新的主機時,自動接收公鑰沮协,無需提示龄捡。
    HostName 1.1.1.1
    Port 22
    ForwardAgent yes   
    User root
    Controlpath ~/.ssh/ssh-%r@%h:%p.sock

以后只需要ssh test即可.

ssh客戶端的讀取順序如下
①命令行
②$HOME/.ssh/config
③/etc/ssh/ssh_config(所有用戶使用的配置文件)

3.1.2. ssh server

配置文件:/etc/ssh/sshd_config

Port 22    #ssh監(jiān)聽的端口,可以寫多個
ListenAddress 10.104.45.112   #可以指定監(jiān)聽的具體地址慷暂,默認是注釋的聘殖,表示監(jiān)聽0.0.0.0
Protocol 2   #使用sshv2
PasswordAuthentication yes    #密碼認證
X11Forwarding yes   #允許本地主機上執(zhí)行遠程主機的GUI程序
PermitRootLogin yes  #允許root登錄
AllowUsers xxx #只允許xxx用戶登錄的用戶
...

修改完配置文件之后,需要重啟服務才能生效

3.2.利用ssh反向代理訪問內(nèi)網(wǎng)主機

如果要遠程訪問一臺內(nèi)網(wǎng)主機呜呐,有兩種方式:

  • 通過靜態(tài)NAT或PAT將內(nèi)網(wǎng)主機的地址/端口映射到公網(wǎng)
  • 借助一臺公網(wǎng)服務器就斤,利用ssh反向代理來訪問內(nèi)網(wǎng)主機
3.2.1.方法一:靜態(tài)NAT或PAT

一般只有企業(yè)的網(wǎng)絡管理員能使用這種方法,可以通過靜態(tài)NAT將內(nèi)網(wǎng)主機的地址轉化為一個公網(wǎng)地址(一般擁有大量公網(wǎng)地址才會這么做)蘑辑,或者使用PAT將內(nèi)網(wǎng)主機的端口映射到公網(wǎng)地址的某個端口洋机,這里就簡單地給出路由器上的配置:

#靜態(tài)NAT:將內(nèi)網(wǎng)主機地址192.168.1.100映射為公網(wǎng)地址1.1.1.1
Cisco Router:
ip nat inside source static 192.168.1.100 1.1.1.1 
HuaWei Router:
nat static global 1.1.1.1 inside 192.168.1.100

#PAT:內(nèi)網(wǎng)主機的22端口映射到公網(wǎng)地址22122端口
Cisco Router:
ip nat inside source static tcp 192.168.1.100 22 1.1.1.1 22122 
HuaWei Router:
nat static protocol tcp global current-interface 22122 inside 192.168.1.100 22
3.2.2.方法二:ssh反向代理

大部分情況下,我們無法管理公網(wǎng)地址洋魂,接下來介紹第二種方法绷旗,此方法需要借助一臺公網(wǎng)服務器:

公網(wǎng)主機A: ip——1.1.1.1  sshd端口——22
內(nèi)網(wǎng)主機B: ip——192.168.1.100  sshd端口——22

首先在內(nèi)主機B上:

ssh -NfR 1234:localhost:22 root@1.1.1.1 
將A的1234端口和B的22端口綁定

接著在外網(wǎng)主機A上:

netstat -ano | grep 1234
tcp  0  0 127.0.0.1:1234     0.0.0.0:*    LISTEN  off (0.00/0/0)
可以看到本地在監(jiān)聽1234端口
接著使用以下命令就可以從公網(wǎng)主機A上訪問內(nèi)網(wǎng)主機B了
ssh localhost -p 1234

通過以上方式,已經(jīng)可以實現(xiàn)我們的需求副砍,接下來可以做一些優(yōu)化:

  • 使用公私鑰登錄衔肢,無需在登錄的時候輸入密碼
第一步:在內(nèi)網(wǎng)服務器B上生成公私鑰
ssh-keygen -t rsa   #一直按回車,使用默認選項即可
成功后在~/.ssh/目錄下就會生成id_rsa(私鑰)和id_rsa.pub (公鑰文件)

第二步:將B的公鑰放到外網(wǎng)主機A的~/.ssh/authorized_keys
ssh root@1.1.1.1 'mkdir -p ~/.ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
或者使用
ssh-copy-id root@1.1.1.1
  • 使用autossh維護反向連接
yum install -y autossh
...
autossh -M 8888 -NR 1234:localhost:22 root@1.1.1.1 -p 22
autossh的命令跟ssh差不多豁翎,默認后臺運行角骤,所以無需加-f
-M選項表示維護程序監(jiān)聽8888端口,保證連接的可用性心剥,如果斷掉邦尊,則會重新連接
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市优烧,隨后出現(xiàn)的幾起案子蝉揍,更是在濱河造成了極大的恐慌,老刑警劉巖畦娄,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件又沾,死亡現(xiàn)場離奇詭異,居然都是意外死亡熙卡,警方通過查閱死者的電腦和手機杖刷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驳癌,“玉大人滑燃,你說我怎么就攤上這事∥蛊猓” “怎么了不瓶?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灾杰。 經(jīng)常有香客問我蚊丐,道長,這世上最難降的妖魔是什么艳吠? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任麦备,我火速辦了婚禮,結果婚禮上昭娩,老公的妹妹穿的比我還像新娘凛篙。我一直安慰自己,他們只是感情好栏渺,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布呛梆。 她就那樣靜靜地躺著,像睡著了一般磕诊。 火紅的嫁衣襯著肌膚如雪填物。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天霎终,我揣著相機與錄音,去河邊找鬼。 笑死佣谐,一個胖子當著我的面吹牛荒叼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播广凸,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼阅茶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炮障?” 一聲冷哼從身側響起目派,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胁赢,沒想到半個月后企蹭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡智末,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年谅摄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片系馆。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡送漠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出由蘑,到底是詐尸還是另有隱情闽寡,我是刑警寧澤代兵,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站爷狈,受9級特大地震影響植影,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涎永,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一思币、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羡微,春花似錦谷饿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至启涯,卻和暖如春贬堵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背结洼。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工黎做, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人松忍。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓蒸殿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸣峭。 傳聞我的和親對象是個殘疾皇子宏所,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 概述 SSH是(Secure SHell protocol) 的簡寫莫换,安全外殼協(xié)議(SSH)是一種在不安全網(wǎng)絡上提...
    技術學習閱讀 52,280評論 9 41
  • 1. SSH是什么 簡單說霞玄,SSH是一種網(wǎng)絡協(xié)議,用于計算機之間的遠程加密登錄拉岁。 SSH 為 Secure She...
    園游小會閱讀 2,136評論 1 4
  • SSH簡介 傳統(tǒng)的網(wǎng)絡服務程序坷剧,比如FTP,POP喊暖,Telnet惫企,本質(zhì)上都是不安全的,因為它們在網(wǎng)絡上用明文傳送數(shù)...
    大蟒傳奇閱讀 6,867評論 9 80
  • 上課回來后陵叽,第二天清晨愛人出差去山西了狞尔。項目進廠丛版,要走一周的時間。我自己在家休整了一天偏序,一邊沉浸在學習的收獲成長中...
    道荷閱讀 720評論 0 0
  • @Miss凌妹妹 一 對于一個準備涉足市場營銷策劃的人來講硼婿,首先市場營銷策劃的目的應該明白,很顯然是給企業(yè)帶來銷量...
    Miss凌妹妹閱讀 1,083評論 0 3