SSH只能用于遠(yuǎn)程Linux主機(jī)?那說(shuō)明你見識(shí)太小了吨岭!

來(lái)自公眾號(hào):DevOps技術(shù)棧

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

1 什么是SSH族檬? SSH是一種網(wǎng)絡(luò)協(xié)議,用于計(jì)算機(jī)之間的加密登錄化戳。最早的時(shí)候单料,互聯(lián)網(wǎng)通信都是明文通信,一旦被截獲点楼,內(nèi)容就暴露無(wú)疑扫尖。1995年,芬蘭學(xué)者Tatu Ylonen設(shè)計(jì)了SSH協(xié)議掠廓,將登錄信息全部加密换怖,成為互聯(lián)網(wǎng)安全的一個(gè)基本解決方案,迅速在全世界獲得推廣蟀瞧,目前已經(jīng)成為L(zhǎng)inux系統(tǒng)的標(biāo)準(zhǔn)配置沉颂。

2

SSH登錄原理

image

3

SSH基本用法

語(yǔ)法:

ssh -p 22 user@host

參數(shù):-p:指定端口號(hào)条摸。user:登錄的用戶名。host:登錄的主機(jī)铸屉。

默認(rèn)的端口號(hào)為22钉蒲,當(dāng)端口號(hào)為22的時(shí)候,可以省略彻坛,直接使用如下方式:

ssh user@host

此外顷啼,如果本地正在使用的用戶名與遠(yuǎn)程登錄的用戶名一致,登錄用戶名也是可以省略的昌屉,即如下:

ssh host

4

SSH遠(yuǎn)程登錄實(shí)例

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

image
image

現(xiàn)在躬厌,我需要操作的是通過SSH在192.168.13.138上面,登錄到192.168.13.135上面竞帽。首先扛施,我們可以使用如下命令,查看兩臺(tái)機(jī)器是否啟用了ssh抢呆。

netstat -ntlp |grep ssh
image

使用如下命令進(jìn)行連接煮嫌。

ssh -p 22 root@192.168.13.135

若在本機(jī)上是首次登錄該遠(yuǎn)程主機(jī)笛谦,則會(huì)出現(xiàn)如下界面抱虐。

image

大致意思就是,無(wú)法確認(rèn)host主機(jī)的真實(shí)性饥脑,只知道它的公鑰指紋恳邀,問你還想繼續(xù)連接嗎?輸入yes即可灶轰。

image

然后輸入密碼谣沸,即可連接ok了。

image

要想退出笋颤,直接輸入exit即可乳附。

image

5

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

SSH 不僅僅能夠自動(dòng)加密和解密 SSH 客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù),同時(shí)伴澄,SSH 還能夠提供了一個(gè)非常有用的功能赋除,那就是端口轉(zhuǎn)發(fā),即將TCP 端口的網(wǎng)絡(luò)數(shù)據(jù)非凌,轉(zhuǎn)發(fā)到指定的主機(jī)某個(gè)端口上举农,在轉(zhuǎn)發(fā)的同時(shí)會(huì)對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的加密及解密。如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用敞嗡,但是允許 SSH 的連接颁糟,那么也是能夠通過使用SSH轉(zhuǎn)發(fā)后的端口進(jìn)行通信航背。轉(zhuǎn)發(fā),主要分為本地轉(zhuǎn)發(fā)與遠(yuǎn)程轉(zhuǎn)發(fā)兩種類型棱貌。

1.轉(zhuǎn)發(fā)的參數(shù)

-C:壓縮數(shù)據(jù)
-f :后臺(tái)認(rèn)證用戶/密碼玖媚,通常和-N連用,不用登錄到遠(yuǎn)程主機(jī)键畴。
-N :不執(zhí)行腳本或命令最盅,通常與-f連用。
-g :在-L/-R/-D參數(shù)中起惕,允許遠(yuǎn)程主機(jī)連接到建立的轉(zhuǎn)發(fā)的端口涡贱,如果不加這個(gè)參數(shù),只允許本地主機(jī)建立連接惹想。
-L : 本地端口:目標(biāo)IP:目標(biāo)端口
-D : 動(dòng)態(tài)端口轉(zhuǎn)發(fā)
-R : 遠(yuǎn)程端口轉(zhuǎn)發(fā)
-T :不分配 TTY 只做代理用
-q :安靜模式问词,不輸出 錯(cuò)誤/警告 信息

2.本地轉(zhuǎn)發(fā)

有本地網(wǎng)絡(luò)服務(wù)器的某個(gè)端口,轉(zhuǎn)發(fā)到遠(yuǎn)程服務(wù)器某個(gè)端口嘀粱。說(shuō)白了就是激挪,將發(fā)送到本地端口的請(qǐng)求,轉(zhuǎn)發(fā)到目標(biāo)端口锋叨。格式如下:ssh -L 本地網(wǎng)卡地址:本地端口:目標(biāo)地址:目標(biāo)端口 用戶@目標(biāo)地址÷⒎郑現(xiàn)在我們利用本地轉(zhuǎn)發(fā)來(lái)解決一個(gè)問題,比如我們有兩臺(tái)機(jī)器娃磺,如下:centos A(192.168.13.139)centos B(192.168.13.142)

image

現(xiàn)在薄湿,centos B(192.168.13.142)機(jī)器上面安裝了mysql,并設(shè)置了運(yùn)行任何主機(jī)連接偷卧,如下:

image

此時(shí)豺瘤,在centos A(192.168.13.139)上面是可以連上centos B(192.168.13.142)的mysql,如下:

image

那么听诸,現(xiàn)在我開始centos B(192.168.13.142)限制不允許外部ip連接坐求,僅僅讓127.0.0.1連接,如下:

image

此時(shí)晌梨,centos A(192.168.13.139)上面怎么連接上centos B(192.168.13.142)的mysql呢桥嗤?

此時(shí),我們還是使用上面的mysql連接方式仔蝌,肯定會(huì)報(bào)錯(cuò)泛领,如下:

image

當(dāng)然在centos B(192.168.13.142)mysql還是可訪問的。

image

這個(gè)時(shí)候掌逛,我們就可以使用本地端口轉(zhuǎn)發(fā)了师逸,將本地的某個(gè)端口,映射到centos B(192.168.13.142)機(jī)器上面的,如下:

ssh -L 127.0.0.1:3306:127.0.0.1:3306 root@192.168.13.142

因?yàn)楸镜鼐W(wǎng)卡地址是可以省略的篓像,上面的轉(zhuǎn)發(fā)动知,可以簡(jiǎn)寫為:

ssh -L 3306:127.0.0.1:3306 root@192.168.13.142

當(dāng)然,ssh連接的時(shí)候员辩,若兩臺(tái)機(jī)器的用戶名相同盒粮,也是可以省略的,即命令可以簡(jiǎn)寫為:

ssh -L 3306:127.0.0.1:3306 192.168.13.14

上面的代碼就是將本地的3306端口奠滑,轉(zhuǎn)發(fā)到192.168.13.142的3306端口丹皱。因?yàn)閏entos B(192.168.13.142)上面的mysql使用的3606端口。當(dāng)然宋税,我們首先得看看本地的3306端口是否被占用摊崭,如被占用,可以使用其他的端口。

數(shù)據(jù)流向如圖:

image

首先,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該機(jī)器,則會(huì)提示確認(rèn)公鑰含友,并讓你選擇是否確定連接替裆。

image

此時(shí),我們?cè)赾entos A上面連接centos B上面的mysql唱较,就可以這么寫了扎唾。

bin/mysql -h127.0.0.1 -uroot -p

如下:

image

我們可以通過下面命令召川,在centosA查看ssh轉(zhuǎn)發(fā)監(jiān)聽的進(jìn)程南缓。

image

3.遠(yuǎn)程轉(zhuǎn)發(fā)

由遠(yuǎn)程服務(wù)器的某個(gè)端口,轉(zhuǎn)發(fā)到本地網(wǎng)絡(luò)的服務(wù)器某個(gè)端口荧呐。說(shuō)白了汉形,就是將發(fā)送到遠(yuǎn)程端口的請(qǐng)求,轉(zhuǎn)發(fā)到目標(biāo)端口倍阐。格式如下:ssh -R 遠(yuǎn)程網(wǎng)卡地址:遠(yuǎn)程端口:目標(biāo)地址:目標(biāo)端口下面三臺(tái)機(jī)器為例概疆,如下: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)上面使用遠(yuǎn)程端口轉(zhuǎn)發(fā)了概耻,讓win7(10.18.78.135)與centos B(192.168.13.142)進(jìn)行通信使套。

ssh -R 127.0.0.1:80:10.18.78.135:80 root@192.168.13.142

即centos B(192.168.13.142)監(jiān)聽自己的80端口罐呼,然后將所有數(shù)據(jù),由centos A(192.168.13.139)發(fā)給win7(10.18.78.135)侦高。

6

SSH的遠(yuǎn)程操作

ssh遠(yuǎn)程操作嫉柴,主要用于在遠(yuǎn)程的機(jī)器上面執(zhí)行某個(gè)操作,格式如下:

ssh user@host 'command'

案例1奉呛、在機(jī)器A(192.168.13.148)中查看機(jī)器B(192.168.13.149)的操作系統(tǒng)類型计螺。在A機(jī)器上面執(zhí)行如下代碼:

ssh  dequan@192.168.13.149  'uname -a'

案例2、將機(jī)器A(192.168.13.148)中test文件夾復(fù)制到B機(jī)器(192.168.13.149)瞧壮。在A機(jī)器上面登馒,執(zhí)行如下命令:

tar -cz test | ssh dequan@192.168.13.149 'tar -xz'

當(dāng)然,我們也可以使用scp命令或rz命令咆槽,傳輸文件谊娇。案例3、在機(jī)器A(192.168.13.148)處查看B機(jī)器(192.168.13.149)是否監(jiān)聽了1080端口罗晕。在A機(jī)器上面济欢,執(zhí)行如下命令:

ssh dequan@192.168.13.149 'netstat -tln |grep 1080'
image

7

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

本地轉(zhuǎn)發(fā),說(shuō)白了小渊,就是把發(fā)到本地的某個(gè)端口請(qǐng)求法褥,轉(zhuǎn)發(fā)到遠(yuǎn)程的某臺(tái)機(jī)器上面。格式如下:

ssh -L  [本地地址:]本地端口:遠(yuǎn)程地址:遠(yuǎn)程端口 遠(yuǎn)程用戶@遠(yuǎn)程地址

案例1酬屉、在機(jī)器B(192.168.13.149)上面訪問機(jī)器A(192.168.13.148)的服務(wù)半等。

現(xiàn)在,我們?cè)贏機(jī)器上面呐萨,啟動(dòng)了Nginx服務(wù)杀饵,如下:

image

我們希望B機(jī)器也能夠這樣使用A機(jī)器上面的服務(wù)。需要把B機(jī)器上面80端口請(qǐng)求谬擦,轉(zhuǎn)發(fā)到A機(jī)器上面切距。目前在B機(jī)器這樣執(zhí)行,是報(bào)錯(cuò)的惨远,如下:

image

需要在B機(jī)器上面谜悟,執(zhí)行如下代碼:

ssh -f -N -L 127.0.01:80:192.168.13.148:80 dequan@192.168.13.148

然后,在B機(jī)器上面北秽,訪問A機(jī)器的服務(wù)葡幸,就想訪問自身的服務(wù)一樣。

image

8

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

遠(yuǎn)程轉(zhuǎn)發(fā)贺氓,即把發(fā)給遠(yuǎn)程機(jī)器的某個(gè)端口請(qǐng)求蔚叨,轉(zhuǎn)發(fā)到本地的機(jī)器上面。格式如下:

ssh -R [遠(yuǎn)程地址:]遠(yuǎn)程端口:本地地址:本地端口 遠(yuǎn)程用戶@遠(yuǎn)程地址

在上面的案例中,我們也可以通過遠(yuǎn)程轉(zhuǎn)發(fā)來(lái)實(shí)現(xiàn)蔑水。即在A機(jī)器上面執(zhí)行如下代碼:

sudo ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149

我們監(jiān)聽了B機(jī)器的8081端口悄泥,把該端口的請(qǐng)求,轉(zhuǎn)發(fā)到A機(jī)器上面肤粱〉簦可以在B機(jī)器上面看到,我們的監(jiān)聽领曼,如下:

image

此時(shí)鸥鹉,執(zhí)行如下命令,就會(huì)被轉(zhuǎn)發(fā)到A機(jī)器的127.0.0.1的80端口庶骄,如下:

image

1毁渗、利用遠(yuǎn)程轉(zhuǎn)發(fā),實(shí)現(xiàn)代理功能

目前B機(jī)器单刁,只能在自己127.0.0.1的80端口監(jiān)聽并轉(zhuǎn)發(fā)灸异,如何讓B機(jī)器作為代理,轉(zhuǎn)發(fā)其他機(jī)器的請(qǐng)求到A機(jī)器上面呢羔飞?比如肺樟,現(xiàn)在有一臺(tái)機(jī)器C(192.168.13.143),C不能訪問A逻淌,但是能夠訪問B么伯。如何讓C利用B來(lái)訪問A呢?此時(shí)卡儒,需要將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è)置動(dòng)態(tài)轉(zhuǎn)發(fā)缀磕,如下:

ssh -f -g  -N -R 8081:127.0.0.1:80 dequan@192.168.13.149

可以看到,此時(shí)B機(jī)器糠亩,已經(jīng)監(jiān)聽了0:0.0.0:8081

image

在C機(jī)器上面虐骑,我們通過curl模擬請(qǐng)求准验,利用B機(jī)器做代理赎线,如下:

curl -x 192.168.13.149:8081 127.0.0.1
image

當(dāng)然,如果還有其他機(jī)器糊饱,也可以使用類似的方式垂寥,來(lái)請(qǐng)求A機(jī)器。

9

SSH的動(dòng)態(tài)轉(zhuǎn)發(fā) 對(duì)于SSH的本地轉(zhuǎn)發(fā)和遠(yuǎn)程轉(zhuǎn)發(fā),都需要將本地端口和遠(yuǎn)程端口一一綁定滞项,格式如下:

ssh -D [本地地址:]本地端口號(hào) 遠(yuǎn)程用戶@遠(yuǎn)程地址

比如狭归,把發(fā)到B機(jī)器上面的請(qǐng)求,都轉(zhuǎn)發(fā)到A機(jī)器上面文判,讓A機(jī)器去執(zhí)行請(qǐng)求过椎。

10

SSH存在的問題 如果有人截獲了登錄請(qǐng)求,然后冒充遠(yuǎn)程主機(jī)戏仓,將偽造的公鑰發(fā)給用戶疚宇,那么用戶很難辨別真?zhèn)巍R驗(yàn)椴幌駂ttps協(xié)議赏殃,SSH協(xié)議的公鑰是沒有證書中心(CA)公證的敷待,也就是說(shuō),都是自己簽發(fā)的仁热“褚荆可以設(shè)想,如果攻擊者插在用戶與遠(yuǎn)程主機(jī)之間(比如在公共的wifi區(qū)域)抗蠢,用偽造的公鑰举哟,獲取用戶的登錄密碼。再用這個(gè)密碼登錄遠(yuǎn)程主機(jī)迅矛,那么SSH的安全機(jī)制就蕩然無(wú)存了炎滞。這種風(fēng)險(xiǎn)就是著名的"中間人攻擊"(Man-in-the-middle attack)。

11

總結(jié)

本篇文章主要介紹了SSH的基本概念和實(shí)踐中常用的一些方法诬乞,并沒有涉及深層原理和優(yōu)化的知識(shí)册赛,在底層實(shí)現(xiàn)和協(xié)議具體內(nèi)容還能繼續(xù)深入研究。如果有什么疑問或建議震嫉,可以在下方留言森瘪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市票堵,隨后出現(xiàn)的幾起案子扼睬,更是在濱河造成了極大的恐慌,老刑警劉巖悴势,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窗宇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡特纤,警方通過查閱死者的電腦和手機(jī)军俊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捧存,“玉大人粪躬,你說(shuō)我怎么就攤上這事担败。” “怎么了镰官?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵提前,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我泳唠,道長(zhǎng)狈网,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任笨腥,我火速辦了婚禮孙援,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扇雕。我一直安慰自己拓售,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布镶奉。 她就那樣靜靜地躺著础淤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哨苛。 梳的紋絲不亂的頭發(fā)上鸽凶,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音建峭,去河邊找鬼玻侥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛亿蒸,可吹牛的內(nèi)容都是我干的凑兰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼边锁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姑食!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起茅坛,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤音半,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贡蓖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曹鸠,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年斥铺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彻桃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仅父,死狀恐怖叛薯,靈堂內(nèi)的尸體忽然破棺而出浑吟,到底是詐尸還是另有隱情笙纤,我是刑警寧澤耗溜,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站省容,受9級(jí)特大地震影響抖拴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腥椒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一阿宅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧笼蛛,春花似錦洒放、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至惋戏,卻和暖如春领追,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响逢。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工绒窑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舔亭。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓些膨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钦铺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子傀蓉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354