SSH只能用于遠(yuǎn)程Linux主機(jī)?那說明你見識太小了!
? 開源Linux
長按二維碼加關(guān)注~

什么是SSH?
2
SSH登錄原理

3
SSH基本用法
語法:
ssh?-p?22?user@host默認(rèn)的端口號為22,當(dāng)端口號為22的時(shí)候,可以省略,直接使用如下方式:
ssh user@host此外,如果本地正在使用的用戶名與遠(yuǎn)程登錄的用戶名一致,登錄用戶名也是可以省略的,即如下:
ssh host4
SSH遠(yuǎn)程登錄實(shí)例
現(xiàn)在我有兩臺Linux虛擬機(jī),上面安裝都是centOS6.5,ip分別為192.168.13.135和192.168.13.138,如下圖:


netstat -ntlp |grep ssh
使用如下命令進(jìn)行連接:
ssh -p 22 root@192.168.13.135



5
SSH端口轉(zhuǎn)發(fā)
SSH 不僅僅能夠自動加密和解密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í)會對數(shù)據(jù)進(jìn)行相應(yīng)的加密及解密。如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用,但是允許SSH連接,那么也是能夠通過使用SSH轉(zhuǎn)發(fā)后的端口進(jìn)行通信。
SSH端口轉(zhuǎn)發(fā),主要分為本地轉(zhuǎn)發(fā)與遠(yuǎn)程轉(zhuǎn)發(fā)兩種類型。
1.端口轉(zhuǎn)發(fā)命令參數(shù)
-C:壓縮數(shù)據(jù)-f :后臺認(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 : 動態(tài)端口轉(zhuǎn)發(fā)-R : 遠(yuǎn)程端口轉(zhuǎn)發(fā)-T :不分配 TTY 只做代理用-q :安靜模式,不輸出 錯(cuò)誤/警告 信息
2.本地轉(zhuǎn)發(fā)
ssh?-L?本地網(wǎng)卡地址:本地端口:目標(biāo)地址:目標(biāo)端口?用戶@目標(biāo)地址centos A(192.168.13.139)centos?B(192.168.13.142,安裝MySQL)
現(xiàn)在,centos B機(jī)器上面安裝了mysql,并設(shè)置了允許任何主機(jī)連接,如下:

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


此時(shí),centos A怎么連接上centos B的mysql呢?

當(dāng)然在centos B(本機(jī))mysql還是可訪問的。

這個(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ā),可以簡寫為:
ssh -L 3306:127.0.0.1:3306 root@192.168.13.142上面的代碼就是將本地的3306端口,轉(zhuǎn)發(fā)到192.168.13.142的3306端口。因?yàn)閏entos B(192.168.13.142)上面的mysql使用的3306端口。當(dāng)然,我們首先得看看本地的3306端口是否被占用,如被占用,可以使用其他的端口。
數(shù)據(jù)流向如圖:


ssh -L 3306:127.0.0.1:3306 192.168.13.142(簡寫)
此時(shí),我們在centos A上連接centos B上面的mysql,就可以這么寫了。
bin/mysql -h127.0.0.1 -uroot -p
我們可以通過下面命令,在centosA上查看ssh轉(zhuǎn)發(fā)監(jiān)聽的進(jìn)程。

3.遠(yuǎn)程轉(zhuǎn)發(fā)
ssh -R 遠(yuǎn)程網(wǎng)卡地址:遠(yuǎn)程端口:目標(biāo)地址:目標(biāo)端口centos A(192.168.13.139)centos B(192.168.13.142)win7(10.18.78.135)
ssh -R 127.0.0.1:80:10.18.78.135:80 root@192.168.13.1426
SSH的遠(yuǎn)程操作
ssh遠(yuǎn)程操作,主要用于在遠(yuǎn)程機(jī)器上面執(zhí)行某個(gè)操作,格式如下:
ssh user@host 'command'ssh??root@192.168.13.149??'uname?-a'tar?-cz?test?|?ssh?root@192.168.13.149?'tar?-xz'ssh dequan@192.168.13.149 'netstat -tln |grep 1080'
7
SSH的本地轉(zhuǎn)發(fā)
本地轉(zhuǎn)發(fā),說白了,就是把發(fā)到本地的某個(gè)端口請求,轉(zhuǎn)發(fā)到遠(yuǎn)程的某臺機(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ù)。

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

ssh -f -N -L 127.0.0.1:80:192.168.13.148:80 dequan@192.168.13.148然后,在B機(jī)器上面,訪問A機(jī)器的服務(wù),就像訪問自身的服務(wù)一樣。

8
SSH的遠(yuǎn)程轉(zhuǎn)發(fā)
遠(yuǎn)程轉(zhuǎn)發(fā),即把發(fā)給遠(yuǎn)程機(jī)器的某個(gè)端口請求,轉(zhuǎn)發(fā)到本地的機(jī)器上面。格式如下:
ssh?-R?[遠(yuǎn)程地址:]遠(yuǎn)程端口:本地地址:本地端口?遠(yuǎn)程用戶@遠(yuǎn)程地址在上面的案例中,我們也可以通過遠(yuǎn)程轉(zhuǎn)發(fā)來實(shí)現(xiàn)。即在A機(jī)器上面執(zhí)行如下代碼:
ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149

1、利用遠(yuǎn)程轉(zhuǎn)發(fā),實(shí)現(xiàn)代理功能
vim /etc/ssh/sshd_config如果有GatewayPorts no改為GatewayPorts yes沒有,添加即可然后重啟sshdservice?sshd?restart
ssh -f -g -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
curl -x 192.168.13.149:8081 127.0.0.1
當(dāng)然,如果還有其他機(jī)器,也可以使用類似的方式,來請求A機(jī)器。
9
SSH的動態(tài)轉(zhuǎn)發(fā)
ssh -D [本地地址:]本地端口號 遠(yuǎn)程用戶@遠(yuǎn)程地址比如,把發(fā)到B機(jī)器上面的請求,都轉(zhuǎn)發(fā)到A機(jī)器上面,讓A機(jī)器去執(zhí)行請求。
10
SSH存在的問題
11
總結(jié)
本篇文章主要介紹了SSH的基本概念和實(shí)踐中常用的一些方法,并沒有涉及深層原理和優(yōu)化的知識,在底層實(shí)現(xiàn)和協(xié)議具體內(nèi)容還能繼續(xù)深入研究。如果有什么疑問或建議,可以在下方留言。
