<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SSH 只能用于遠程 Linux 主機?那說明你見識太小了!

          共 5274字,需瀏覽 11分鐘

           ·

          2020-09-05 02:29

          來源:DevOps技術(shù)棧


          今天為大家分享一篇關(guān)于SSH 的介紹和使用方法的文章。本文從SSH是什么出發(fā),講述了SSH的基本用法,之后在遠程登錄、端口轉(zhuǎn)發(fā)等多種場景下進行獨立的講述,希望能對大家有所幫助。

          什么是SSH?


          SSH是一種網(wǎng)絡(luò)協(xié)議,用于計算機之間的加密登錄。最早的時候,互聯(lián)網(wǎng)通信都是明文通信,一旦被截獲,內(nèi)容就暴露無疑。1995年,芬蘭學(xué)者Tatu Ylonen設(shè)計了SSH協(xié)議,將登錄信息全部加密,成為互聯(lián)網(wǎng)安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經(jīng)成為Linux系統(tǒng)的標準配置。


          SSH登錄原理



          SSH基本用法


          語法:

          ssh?-p?22?user@host
          參數(shù):
          -p:指定端口號。
          user:登錄的用戶名。
          host:登錄的主機。
          默認的端口號為22,當(dāng)端口號為22的時候,可以省略,直接使用如下方式:
          ssh user@host
          此外,如果本地正在使用的用戶名與遠程登錄的用戶名一致,登錄用戶名也是可以省略的,即如下:
          ssh host


          SSH遠程登錄實例


          現(xiàn)在我有兩臺linux虛擬機,上面安裝都是centOS6.5,ip分別為192.168.13.135和192.168.13.138,如下圖:




          現(xiàn)在,我需要操作的是通過SSH在192.168.13.138上面,登錄到192.168.13.135上面。

          首先,我們可以使用如下命令,查看兩臺機器是否啟用了ssh。

          netstat -ntlp |grep ssh
          使用如下命令進行連接。
          ssh -p 22 [email protected]
          若在本機上是首次登錄該遠程主機,則會出現(xiàn)如下界面。
          大致意思就是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續(xù)連接嗎?輸入yes即可。
          然后輸入密碼,即可連接ok了。
          要想退出,直接輸入exit即可。


          SSH端口轉(zhuǎn)發(fā)


          SSH 不僅僅能夠自動加密和解密 SSH 客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù),同時,SSH 還能夠提供了一個非常有用的功能,那就是端口轉(zhuǎn)發(fā),即將TCP 端口的網(wǎng)絡(luò)數(shù)據(jù),轉(zhuǎn)發(fā)到指定的主機某個端口上,在轉(zhuǎn)發(fā)的同時會對數(shù)據(jù)進行相應(yīng)的加密及解密。如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用,但是允許 SSH 的連接,那么也是能夠通過使用SSH轉(zhuǎn)發(fā)后的端口進行通信。轉(zhuǎn)發(fā),主要分為本地轉(zhuǎn)發(fā)與遠程轉(zhuǎn)發(fā)兩種類型。
          1.轉(zhuǎn)發(fā)的參數(shù)
          -C:壓縮數(shù)據(jù)-f :后臺認證用戶/密碼,通常和-N連用,不用登錄到遠程主機。-N :不執(zhí)行腳本或命令,通常與-f連用。-g :在-L/-R/-D參數(shù)中,允許遠程主機連接到建立的轉(zhuǎn)發(fā)的端口,如果不加這個參數(shù),只允許本地主機建立連接。-L : 本地端口:目標IP:目標端口-D : 動態(tài)端口轉(zhuǎn)發(fā)-R : 遠程端口轉(zhuǎn)發(fā)-T :不分配 TTY 只做代理用-q :安靜模式,不輸出 錯誤/警告 信息
          2.本地轉(zhuǎn)發(fā)
          有本地網(wǎng)絡(luò)服務(wù)器的某個端口,轉(zhuǎn)發(fā)到遠程服務(wù)器某個端口。說白了就是,將發(fā)送到本地端口的請求,轉(zhuǎn)發(fā)到目標端口。格式如下:
          ssh -L 本地網(wǎng)卡地址:本地端口:目標地址:目標端口 用戶@目標地址。
          現(xiàn)在我們利用本地轉(zhuǎn)發(fā)來解決一個問題,比如我們有兩臺機器,如下:
          centos A(192.168.13.139)
          centos B(192.168.13.142)
          現(xiàn)在,centos B(192.168.13.142)機器上面安裝了mysql,并設(shè)置了運行任何主機連接,如下:
          此時,在centos A(192.168.13.139)上面是可以連上centos B(192.168.13.142)的mysql,如下:
          那么,現(xiàn)在我開始centos B(192.168.13.142)限制不允許外部ip連接,僅僅讓127.0.0.1連接,如下:
          此時,centos A(192.168.13.139)上面怎么連接上centos B(192.168.13.142)的mysql呢?
          此時,我們還是使用上面的mysql連接方式,肯定會報錯,如下:
          當(dāng)然在centos B(192.168.13.142)mysql還是可訪問的。
          這個時候,我們就可以使用本地端口轉(zhuǎn)發(fā)了,將本地的某個端口,映射到centos B(192.168.13.142)機器上面的,如下:
          ssh -L 127.0.0.1:3306:127.0.0.1:3306 [email protected]
          因為本地網(wǎng)卡地址是可以省略的,上面的轉(zhuǎn)發(fā),可以簡寫為:
          ssh -L 3306:127.0.0.1:3306 [email protected]
          當(dāng)然,ssh連接的時候,若兩臺機器的用戶名相同,也是可以省略的,即命令可以簡寫為:
          ssh -L 3306:127.0.0.1:3306 192.168.13.14
          上面的代碼就是將本地的3306端口,轉(zhuǎn)發(fā)到192.168.13.142的3306端口。因為centos B(192.168.13.142)上面的mysql使用的3606端口。當(dāng)然,我們首先得看看本地的3306端口是否被占用,如被占用,可以使用其他的端口。
          數(shù)據(jù)流向如圖:
          首先,centos A(192.168.13.139)上的應(yīng)用將數(shù)據(jù)發(fā)送到本地的127.0.0.1上面的3306端口。
          然后,centos A(192.168.13.139)將3306端口的數(shù)據(jù),通過SSH轉(zhuǎn)發(fā)到centos B(192.168.13.142)的3306端口。
          接著,centos B(192.168.13.142)將處理后的數(shù)據(jù),原路返回給centos A(192.168.13.139)。
          如果是首次通過ssh連接cetosB該機器,則會提示確認公鑰,并讓你選擇是否確定連接。
          此時,我們在centos A上面連接centos B上面的mysql,就可以這么寫了。
          bin/mysql -h127.0.0.1 -uroot -p
          如下:
          我們可以通過下面命令,在centosA查看ssh轉(zhuǎn)發(fā)監(jiān)聽的進程。
          3.遠程轉(zhuǎn)發(fā)
          由遠程服務(wù)器的某個端口,轉(zhuǎn)發(fā)到本地網(wǎng)絡(luò)的服務(wù)器某個端口。說白了,就是將發(fā)送到遠程端口的請求,轉(zhuǎn)發(fā)到目標端口。格式如下:
          ssh -R 遠程網(wǎng)卡地址:遠程端口:目標地址:目標端口
          下面三臺機器為例,如下:

          centos A(192.168.13.139)
          centos B(192.168.13.142)
          win7(10.18.78.135)

          假設(shè),win7(10.18.78.135)與centos B(192.168.13.142)不能直接連接,但是win7(10.18.78.135)與centos A(192.168.13.139)可以連接centos B(192.168.13.142)也可以centos A(192.168.13.139)連接,那么,我們就可以在centos A(192.168.13.139)上面使用遠程端口轉(zhuǎn)發(fā)了,讓win7(10.18.78.135)與centos B(192.168.13.142)進行通信。

          ssh -R 127.0.0.1:80:10.18.78.135:80 [email protected]
          即centos B(192.168.13.142)監(jiān)聽自己的80端口,然后將所有數(shù)據(jù),由centos A(192.168.13.139)發(fā)給win7(10.18.78.135)。


          SSH的遠程操作


          ssh遠程操作,主要用于在遠程的機器上面執(zhí)行某個操作,格式如下:
          ssh user@host 'command'
          案例1、在機器A(192.168.13.148)中查看機器B(192.168.13.149)的操作系統(tǒng)類型。

          在A機器上面執(zhí)行如下代碼:
          ssh [email protected] 'uname -a'
          案例2、將機器A(192.168.13.148)中test文件夾復(fù)制到B機器(192.168.13.149)。

          在A機器上面,執(zhí)行如下命令:
          tar -cz test | ssh [email protected] 'tar -xz'
          當(dāng)然,我們也可以使用scp命令或rz命令,傳輸文件。

          案例3、在機器A(192.168.13.148)處查看B機器(192.168.13.149)是否監(jiān)聽了1080端口。
          在A機器上面,執(zhí)行如下命令:
          ssh [email protected] 'netstat -tln |grep 1080'


          SSH的本地轉(zhuǎn)發(fā)


          本地轉(zhuǎn)發(fā),說白了,就是把發(fā)到本地的某個端口請求,轉(zhuǎn)發(fā)到遠程的某臺機器上面。格式如下:
          ssh?-L??[本地地址:]本地端口:遠程地址:遠程端口?遠程用戶@遠程地址
          案例1、在機器B(192.168.13.149)上面訪問機器A(192.168.13.148)的服務(wù)。
          現(xiàn)在,我們在A機器上面,啟動了Nginx服務(wù),如下:
          我們希望B機器也能夠這樣使用A機器上面的服務(wù)。需要把B機器上面80端口請求,轉(zhuǎn)發(fā)到A機器上面。目前在B機器這樣執(zhí)行,是報錯的,如下:
          需要在B機器上面,執(zhí)行如下代碼:
          ssh -f -N -L 127.0.01:80:192.168.13.148:80 [email protected]
          然后,在B機器上面,訪問A機器的服務(wù),就想訪問自身的服務(wù)一樣。


          SSH的遠程轉(zhuǎn)發(fā)


          遠程轉(zhuǎn)發(fā),即把發(fā)給遠程機器的某個端口請求,轉(zhuǎn)發(fā)到本地的機器上面。格式如下:
          ssh?-R?[遠程地址:]遠程端口:本地地址:本地端口?遠程用戶@遠程地址
          在上面的案例中,我們也可以通過遠程轉(zhuǎn)發(fā)來實現(xiàn)。即在A機器上面執(zhí)行如下代碼:
          sudo ssh -f -N -R 8081:127.0.0.1:80 [email protected]
          我們監(jiān)聽了B機器的8081端口,把該端口的請求,轉(zhuǎn)發(fā)到A機器上面。
          可以在B機器上面看到,我們的監(jiān)聽,如下:
          此時,執(zhí)行如下命令,就會被轉(zhuǎn)發(fā)到A機器的127.0.0.1的80端口,如下:
          1、利用遠程轉(zhuǎn)發(fā),實現(xiàn)代理功能
          目前B機器,只能在自己127.0.0.1的80端口監(jiān)聽并轉(zhuǎn)發(fā),如何讓B機器作為代理,轉(zhuǎn)發(fā)其他機器的請求到A機器上面呢?比如,現(xiàn)在有一臺機器C(192.168.13.143),C不能訪問A,但是能夠訪問B。如何讓C利用B來訪問A呢?
          此時,需要將B的監(jiān)聽,由127.0.0.1:8081,改為0:0.0.0:8081,修改sshd的配置/etc/ssh/sshd_config。
          vim /etc/ssh/sshd_config如果有GatewayPorts no改為GatewayPorts yes
          沒有,添加即可然后重啟sshd
          sudo?service?sshd?restart
          然后重新,設(shè)置動態(tài)轉(zhuǎn)發(fā),如下:
          ssh -f -g -N -R 8081:127.0.0.1:80 [email protected]
          可以看到,此時B機器,已經(jīng)監(jiān)聽了0:0.0.0:8081
          在C機器上面,我們通過curl模擬請求,利用B機器做代理,如下:
          curl -x 192.168.13.149:8081 127.0.0.1
          當(dāng)然,如果還有其他機器,也可以使用類似的方式,來請求A機器。


          SSH的動態(tài)轉(zhuǎn)發(fā)


          對于SSH的本地轉(zhuǎn)發(fā)和遠程轉(zhuǎn)發(fā),都需要將本地端口和遠程端口一一綁定,格式如下:
          ssh -D [本地地址:]本地端口號 遠程用戶@遠程地址
          比如,把發(fā)到B機器上面的請求,都轉(zhuǎn)發(fā)到A機器上面,讓A機器去執(zhí)行請求。


          SSH存在的問題


          如果有人截獲了登錄請求,然后冒充遠程主機,將偽造的公鑰發(fā)給用戶,那么用戶很難辨別真?zhèn)巍R驗椴幌駂ttps協(xié)議,SSH協(xié)議的公鑰是沒有證書中心(CA)公證的,也就是說,都是自己簽發(fā)的。
          可以設(shè)想,如果攻擊者插在用戶與遠程主機之間(比如在公共的wifi區(qū)域),用偽造的公鑰,獲取用戶的登錄密碼。再用這個密碼登錄遠程主機,那么SSH的安全機制就蕩然無存了。這種風(fēng)險就是著名的"中間人攻擊"(Man-in-the-middle attack)。


          總結(jié)


          本篇文章主要介紹了SSH的基本概念和實踐中常用的一些方法,并沒有涉及深層原理和優(yōu)化的知識,在底層實現(xiàn)和協(xié)議具體內(nèi)容還能繼續(xù)深入研究。,。

          - End -

          回復(fù)下方「關(guān)鍵詞」,獲取優(yōu)質(zhì)資源

          回復(fù)關(guān)鍵詞「python」,立即獲取進階必備書籍Python進階》電子版
          回復(fù)關(guān)鍵詞「Flask」,立即獲取Flask?教程
          回復(fù)關(guān)鍵詞「wx」,加入高質(zhì)量python交流群


          推薦:
          1. 七夕,程序員的表白代碼

          2. 最強神器工具:新一代多系統(tǒng)啟動 U 盤裝機解決方案

          3. 墻裂安利幾個珍藏已久的工具



          加微信送Python資料,接私活、職場建議
          高質(zhì)量交流學(xué)習(xí)群
          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄片黄片黄片黄片黄片黄片黄片 | 黄色.www | 日本精品在线视频 | 一级A片在线观看 | 亚洲成人娱乐网 |