通過ssh反向連接內(nèi)網(wǎng)主機(jī)的方法(防火墻的主機(jī))
發(fā)布時(shí)間:2012-07-30 16:49:13 作者:佚名
我要評(píng)論

可以通過ssh反向連接到內(nèi)網(wǎng)主機(jī)(有防火墻的主機(jī)),了解下,方便我們以后防御
一.用ssh反向連接內(nèi)網(wǎng)主機(jī)
可以通過ssh反向連接到內(nèi)網(wǎng)主機(jī)(有防火墻的主機(jī))
好,下面是步驟:
0. 在兩側(cè)都安裝ssh
1. 在被控端運(yùn)行ssh -f -N -R 10000:localhost:22 username@主控端ip。這里的10000和22是端口號(hào),也就是說,在主控端10000端口和被控端的22端口上建立了一個(gè)通道。
2. 在主控端運(yùn)行 ssh username@localhost -p 10000。這里的username是你被控端的username,10000就是剛才的那個(gè)端口號(hào)。
ok了。
二.SSH公鑰(public key)驗(yàn)證
也就是如何不用密碼的SSH登錄… 本講解適用于Client/Server都使用OpenSSH的情況(商業(yè)版SSH的key文件格式有所不同,這里的方法直接使用是無效的)。
目標(biāo): Client 免輸密碼ssh登錄Server
SSH支持多種登錄驗(yàn)證方式,我們默認(rèn)使用的是鍵盤交互方式(keyboard- interactive),也就是手工輸入密碼的那種。這里我們要改成公鑰(publickey)驗(yàn)證方式,并且設(shè)置
passphrase為空,以達(dá)到免輸密碼登錄的目的。
1. Client端:
cd ~/.ssh
#產(chǎn)生公鑰文件(id_dsa.pub)和私鑰文件(id_dsa), 類型DSA, 長度1024 bits
#注意詢問passphrase的時(shí)候直接回車
ssh-keygen -t dsa -b 1024
#將公鑰復(fù)制到遠(yuǎn)程主機(jī)去
scp id_dsa.pub Server:~/.ssh/id_dsa.pub.Client2. Server端:
cd ~/.ssh
#將Client的公鑰放入Server的信任列表
cat id_dsa.pub.Client >> authorized_keys
#更新權(quán)限,很重要
chmod 0600 *從此以后Client SSH登錄Server就不要手工輸入密碼了。
三.備注 – SSH常見術(shù)語及對(duì)應(yīng)的解釋
前提:內(nèi)網(wǎng)機(jī)器能訪問外網(wǎng)機(jī)器,但是只有局域網(wǎng)IP
首先要設(shè)置信任關(guān)系。
然后在內(nèi)網(wǎng)機(jī)器上運(yùn)行腳本auto.sh(我這里設(shè)置時(shí)每小時(shí)運(yùn)行一次,保持連接40分鐘,如果不連接會(huì)自動(dòng)斷開)
#!/bin/bash
ssh -R 2222:localhost:22 root@外網(wǎng)機(jī)器IP “touch login; sleep 2400; touch logout”
需要登錄內(nèi)網(wǎng)機(jī)器時(shí),使用如下命令即可
ssh -p 2222 root@localhost
最近想在家里登錄公司的機(jī)器查看代碼,期間碰到了一些問題,因?yàn)楣纠锏臋C(jī)器是沒有對(duì)外IP的,而且請(qǐng)網(wǎng)管
做個(gè)端口映射也比較麻煩,所以在家里不能直接連接到公司的機(jī)器上。在網(wǎng)上搜索了一下,找到了ssh反向連接這
個(gè)解決方法,成功解決了不能直接連接的問題,并對(duì)反向連接的實(shí)現(xiàn)感興趣,按照自己的想法,寫了一個(gè)簡單的示
例。
SSH反向連接的使用
1、什么是反向連接?
反向連接是指主機(jī)A(受控端)主動(dòng)連接主機(jī)B(控制端),在主機(jī)A和主機(jī)B之間建立一個(gè)遠(yuǎn)程連接,通過這個(gè)連
接主機(jī)B可以主動(dòng)的向主機(jī)A發(fā)送一些請(qǐng)求。
2、為什么需要主機(jī)A主動(dòng)去連接主機(jī)B呢?
這是因?yàn)橹鳈C(jī)A在局域網(wǎng)內(nèi),如果沒有對(duì)主機(jī)A進(jìn)行端口映射,對(duì)于主機(jī)B來說主機(jī)A是不可見的,如果在主機(jī)B這
邊向主機(jī)A發(fā)送連接請(qǐng)求,這個(gè)請(qǐng)求是不可達(dá)的。而主機(jī)B有自己獨(dú)立的IP,對(duì)于主機(jī)A來說是可見的,可以直接向
主機(jī)B請(qǐng)求連接。
3、SSH反向連接的過程
方法就是主機(jī)A主動(dòng)去連接主機(jī)B,主機(jī)B響應(yīng)主機(jī)A的連接請(qǐng)求,它們之間就建立了一個(gè)遠(yuǎn)程連接。然后主機(jī)B在
本地再創(chuàng)建一個(gè)本地連接,重定向到主機(jī)A和主機(jī)B剛才建立的遠(yuǎn)程連接上,之后對(duì)這個(gè)本地連接的操作都會(huì)反饋到
遠(yuǎn)程連接上去。整個(gè)過程類似于文件的DUP,這就在主機(jī)A和主機(jī)B之間建立了連接通道,此時(shí)對(duì)于主機(jī)B來說,主
機(jī)A已經(jīng)是可見了。
連接流程如下:
3.1、主機(jī)A ssh客戶端向主機(jī)B sshd服務(wù)端發(fā)送請(qǐng)求,建立遠(yuǎn)程連接。
3.2、主機(jī)B sshd服務(wù)端創(chuàng)建本地連接很遠(yuǎn)程連接的映射(反向連接通道)。
3.3、主機(jī)B ssh客戶端向主機(jī)B sshd服務(wù)端的連接通道發(fā)送請(qǐng)求, 建立主機(jī)B ssh和主機(jī)A sshd的連接。
完成連接后,主機(jī)A對(duì)于主機(jī)B可見的形式就是存在于主機(jī)B的那個(gè)本地連接。
4、為什么需要在主機(jī)B對(duì)遠(yuǎn)程連接映射一個(gè)本地連接?
反向連接就是CS架構(gòu),不過是受控端主動(dòng)向控制端請(qǐng)求連接,讓它們之間的連接建立。傳統(tǒng)的CS方式是可以解決
主機(jī)A和主機(jī)B之間的連接問題,但是那樣主機(jī)A和主機(jī)B的連接方式并不靈活,兩者之間能做的事情,只能是CS之際
協(xié)議規(guī)定的事情。在主機(jī)B上建立了主機(jī)A的連接映射后, 對(duì)于主機(jī)B來說主機(jī)A已經(jīng)不是局域網(wǎng)內(nèi)那臺(tái)不可見的主
機(jī),主機(jī)A已經(jīng)是存在主機(jī)B的一臺(tái)可見主機(jī),這樣就消除了局域網(wǎng)和廣域網(wǎng)的阻礙。 主機(jī)A和主機(jī)B之間建立的那
個(gè)遠(yuǎn)程連接就是主機(jī)A和主機(jī)B的通道-“網(wǎng)線”。
5、SSH反向連接的使用
要建立反向連接,首先在主機(jī)A上運(yùn)行:
代碼: ssh -f -N -R 10000:localhost:22 lyb@jb51.net
10000是主機(jī)B上的本地連接端口, 22是主機(jī)B上遠(yuǎn)程連接的那個(gè)端口, lyb@jb51.net是主機(jī)B的地址
連接上后,會(huì)需要輸入密碼。連接成功后,SSH反向連接就建立起來了。要連接到主機(jī)A,在主機(jī)B上運(yùn)行:
代碼: ssh lyb@localhost -p 10000
即可。
—————————-
內(nèi)網(wǎng)主機(jī)A(192.168.1.1) 外網(wǎng)主機(jī) B(100.100.100.100)
正常情況 可以從內(nèi)網(wǎng)主機(jī)A 通過ssh 連接到外網(wǎng)主機(jī)B
#ssh username@100.100.100.100
現(xiàn)在需要 通過外網(wǎng)主機(jī)B 連接 內(nèi)網(wǎng)主機(jī)A
原理:
利用ssh自身功能, 建立 主機(jī)B 到主機(jī)A 的連接通道。
操作:
1.在主機(jī)A上建立通道
ssh -NfR 2222:localhost:22 httpd@100.100.100.100 -p 22
注釋: -Nf 命令在后臺(tái)運(yùn)行
-R 建立反向通道
2222 在主機(jī)B上建立端口映射
localhost:22 將主機(jī)B端口2222 映射到主機(jī)A端口22上
httpd@100.100.100.100 遠(yuǎn)程登錄主機(jī)B用戶名及IP
-p 22 主機(jī)B ssh登錄端口
執(zhí)行后可以查看進(jìn)程
ps axu |grep ssh
ssh -NfR 2222:localhost:22 httpd@100.100.100.100
2.登錄主機(jī)B
查看已經(jīng)建立好的映射端口
netstat -antp
tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN -
登錄內(nèi)網(wǎng)主機(jī)A
ssh -p 2222 httpd@localhost
注釋:
-p2222 已建立到內(nèi)網(wǎng)主機(jī)A的映射端口
httpd 內(nèi)網(wǎng)主機(jī)A的ssh 登錄用戶
@localhost 可以看到映射端口只監(jiān)聽到127.0.0.1 上
執(zhí)行命令后顯示登錄成功,則大功告成
PS:
1. 如果用key登錄則無須輸入密碼
2. 如果報(bào)錯(cuò): Permission denied (publickey,gssapi-with-mic).
key不對(duì)或者key用戶不對(duì)。
使用的過程中碰到一個(gè)問題, 就是在主機(jī)A上發(fā)起請(qǐng)求的時(shí)候, 需要輸入密碼。 如果我在家里, 不可能跑到公
司了去輸入密碼。于是用ssh public key的方法和寫一個(gè)腳本來解決。腳本如下:
#!/bin/bash
while true;do
RET=`ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"`
if [ "$RET" = "" ]; then
echo "restart ssh server"
ssh -f -N -R 10000:localhost:22 lyb@hahalee.jb51.net
fi
sleep 10
done
腳本的作用就是監(jiān)控反向連接的服務(wù), 在被異常中斷的時(shí)候重啟, 使用了SSH公鑰后, 也不必跑到公司輸入密碼了。
可以通過ssh反向連接到內(nèi)網(wǎng)主機(jī)(有防火墻的主機(jī))
好,下面是步驟:
0. 在兩側(cè)都安裝ssh
1. 在被控端運(yùn)行ssh -f -N -R 10000:localhost:22 username@主控端ip。這里的10000和22是端口號(hào),也就是說,在主控端10000端口和被控端的22端口上建立了一個(gè)通道。
2. 在主控端運(yùn)行 ssh username@localhost -p 10000。這里的username是你被控端的username,10000就是剛才的那個(gè)端口號(hào)。
ok了。
二.SSH公鑰(public key)驗(yàn)證
也就是如何不用密碼的SSH登錄… 本講解適用于Client/Server都使用OpenSSH的情況(商業(yè)版SSH的key文件格式有所不同,這里的方法直接使用是無效的)。
目標(biāo): Client 免輸密碼ssh登錄Server
SSH支持多種登錄驗(yàn)證方式,我們默認(rèn)使用的是鍵盤交互方式(keyboard- interactive),也就是手工輸入密碼的那種。這里我們要改成公鑰(publickey)驗(yàn)證方式,并且設(shè)置
passphrase為空,以達(dá)到免輸密碼登錄的目的。
1. Client端:
cd ~/.ssh
#產(chǎn)生公鑰文件(id_dsa.pub)和私鑰文件(id_dsa), 類型DSA, 長度1024 bits
#注意詢問passphrase的時(shí)候直接回車
ssh-keygen -t dsa -b 1024
#將公鑰復(fù)制到遠(yuǎn)程主機(jī)去
scp id_dsa.pub Server:~/.ssh/id_dsa.pub.Client2. Server端:
cd ~/.ssh
#將Client的公鑰放入Server的信任列表
cat id_dsa.pub.Client >> authorized_keys
#更新權(quán)限,很重要
chmod 0600 *從此以后Client SSH登錄Server就不要手工輸入密碼了。
三.備注 – SSH常見術(shù)語及對(duì)應(yīng)的解釋
前提:內(nèi)網(wǎng)機(jī)器能訪問外網(wǎng)機(jī)器,但是只有局域網(wǎng)IP
首先要設(shè)置信任關(guān)系。
然后在內(nèi)網(wǎng)機(jī)器上運(yùn)行腳本auto.sh(我這里設(shè)置時(shí)每小時(shí)運(yùn)行一次,保持連接40分鐘,如果不連接會(huì)自動(dòng)斷開)
#!/bin/bash
ssh -R 2222:localhost:22 root@外網(wǎng)機(jī)器IP “touch login; sleep 2400; touch logout”
需要登錄內(nèi)網(wǎng)機(jī)器時(shí),使用如下命令即可
ssh -p 2222 root@localhost
最近想在家里登錄公司的機(jī)器查看代碼,期間碰到了一些問題,因?yàn)楣纠锏臋C(jī)器是沒有對(duì)外IP的,而且請(qǐng)網(wǎng)管
做個(gè)端口映射也比較麻煩,所以在家里不能直接連接到公司的機(jī)器上。在網(wǎng)上搜索了一下,找到了ssh反向連接這
個(gè)解決方法,成功解決了不能直接連接的問題,并對(duì)反向連接的實(shí)現(xiàn)感興趣,按照自己的想法,寫了一個(gè)簡單的示
例。
SSH反向連接的使用
1、什么是反向連接?
反向連接是指主機(jī)A(受控端)主動(dòng)連接主機(jī)B(控制端),在主機(jī)A和主機(jī)B之間建立一個(gè)遠(yuǎn)程連接,通過這個(gè)連
接主機(jī)B可以主動(dòng)的向主機(jī)A發(fā)送一些請(qǐng)求。
2、為什么需要主機(jī)A主動(dòng)去連接主機(jī)B呢?
這是因?yàn)橹鳈C(jī)A在局域網(wǎng)內(nèi),如果沒有對(duì)主機(jī)A進(jìn)行端口映射,對(duì)于主機(jī)B來說主機(jī)A是不可見的,如果在主機(jī)B這
邊向主機(jī)A發(fā)送連接請(qǐng)求,這個(gè)請(qǐng)求是不可達(dá)的。而主機(jī)B有自己獨(dú)立的IP,對(duì)于主機(jī)A來說是可見的,可以直接向
主機(jī)B請(qǐng)求連接。
3、SSH反向連接的過程
方法就是主機(jī)A主動(dòng)去連接主機(jī)B,主機(jī)B響應(yīng)主機(jī)A的連接請(qǐng)求,它們之間就建立了一個(gè)遠(yuǎn)程連接。然后主機(jī)B在
本地再創(chuàng)建一個(gè)本地連接,重定向到主機(jī)A和主機(jī)B剛才建立的遠(yuǎn)程連接上,之后對(duì)這個(gè)本地連接的操作都會(huì)反饋到
遠(yuǎn)程連接上去。整個(gè)過程類似于文件的DUP,這就在主機(jī)A和主機(jī)B之間建立了連接通道,此時(shí)對(duì)于主機(jī)B來說,主
機(jī)A已經(jīng)是可見了。
連接流程如下:
3.1、主機(jī)A ssh客戶端向主機(jī)B sshd服務(wù)端發(fā)送請(qǐng)求,建立遠(yuǎn)程連接。
3.2、主機(jī)B sshd服務(wù)端創(chuàng)建本地連接很遠(yuǎn)程連接的映射(反向連接通道)。
3.3、主機(jī)B ssh客戶端向主機(jī)B sshd服務(wù)端的連接通道發(fā)送請(qǐng)求, 建立主機(jī)B ssh和主機(jī)A sshd的連接。
完成連接后,主機(jī)A對(duì)于主機(jī)B可見的形式就是存在于主機(jī)B的那個(gè)本地連接。
4、為什么需要在主機(jī)B對(duì)遠(yuǎn)程連接映射一個(gè)本地連接?
反向連接就是CS架構(gòu),不過是受控端主動(dòng)向控制端請(qǐng)求連接,讓它們之間的連接建立。傳統(tǒng)的CS方式是可以解決
主機(jī)A和主機(jī)B之間的連接問題,但是那樣主機(jī)A和主機(jī)B的連接方式并不靈活,兩者之間能做的事情,只能是CS之際
協(xié)議規(guī)定的事情。在主機(jī)B上建立了主機(jī)A的連接映射后, 對(duì)于主機(jī)B來說主機(jī)A已經(jīng)不是局域網(wǎng)內(nèi)那臺(tái)不可見的主
機(jī),主機(jī)A已經(jīng)是存在主機(jī)B的一臺(tái)可見主機(jī),這樣就消除了局域網(wǎng)和廣域網(wǎng)的阻礙。 主機(jī)A和主機(jī)B之間建立的那
個(gè)遠(yuǎn)程連接就是主機(jī)A和主機(jī)B的通道-“網(wǎng)線”。
5、SSH反向連接的使用
要建立反向連接,首先在主機(jī)A上運(yùn)行:
代碼: ssh -f -N -R 10000:localhost:22 lyb@jb51.net
10000是主機(jī)B上的本地連接端口, 22是主機(jī)B上遠(yuǎn)程連接的那個(gè)端口, lyb@jb51.net是主機(jī)B的地址
連接上后,會(huì)需要輸入密碼。連接成功后,SSH反向連接就建立起來了。要連接到主機(jī)A,在主機(jī)B上運(yùn)行:
代碼: ssh lyb@localhost -p 10000
即可。
—————————-
內(nèi)網(wǎng)主機(jī)A(192.168.1.1) 外網(wǎng)主機(jī) B(100.100.100.100)
正常情況 可以從內(nèi)網(wǎng)主機(jī)A 通過ssh 連接到外網(wǎng)主機(jī)B
#ssh username@100.100.100.100
現(xiàn)在需要 通過外網(wǎng)主機(jī)B 連接 內(nèi)網(wǎng)主機(jī)A
原理:
利用ssh自身功能, 建立 主機(jī)B 到主機(jī)A 的連接通道。
操作:
1.在主機(jī)A上建立通道
ssh -NfR 2222:localhost:22 httpd@100.100.100.100 -p 22
注釋: -Nf 命令在后臺(tái)運(yùn)行
-R 建立反向通道
2222 在主機(jī)B上建立端口映射
localhost:22 將主機(jī)B端口2222 映射到主機(jī)A端口22上
httpd@100.100.100.100 遠(yuǎn)程登錄主機(jī)B用戶名及IP
-p 22 主機(jī)B ssh登錄端口
執(zhí)行后可以查看進(jìn)程
ps axu |grep ssh
ssh -NfR 2222:localhost:22 httpd@100.100.100.100
2.登錄主機(jī)B
查看已經(jīng)建立好的映射端口
netstat -antp
tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN -
登錄內(nèi)網(wǎng)主機(jī)A
ssh -p 2222 httpd@localhost
注釋:
-p2222 已建立到內(nèi)網(wǎng)主機(jī)A的映射端口
httpd 內(nèi)網(wǎng)主機(jī)A的ssh 登錄用戶
@localhost 可以看到映射端口只監(jiān)聽到127.0.0.1 上
執(zhí)行命令后顯示登錄成功,則大功告成
PS:
1. 如果用key登錄則無須輸入密碼
2. 如果報(bào)錯(cuò): Permission denied (publickey,gssapi-with-mic).
key不對(duì)或者key用戶不對(duì)。
使用的過程中碰到一個(gè)問題, 就是在主機(jī)A上發(fā)起請(qǐng)求的時(shí)候, 需要輸入密碼。 如果我在家里, 不可能跑到公
司了去輸入密碼。于是用ssh public key的方法和寫一個(gè)腳本來解決。腳本如下:
復(fù)制代碼
代碼如下:#!/bin/bash
while true;do
RET=`ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"`
if [ "$RET" = "" ]; then
echo "restart ssh server"
ssh -f -N -R 10000:localhost:22 lyb@hahalee.jb51.net
fi
sleep 10
done
腳本的作用就是監(jiān)控反向連接的服務(wù), 在被異常中斷的時(shí)候重啟, 使用了SSH公鑰后, 也不必跑到公司輸入密碼了。
相關(guān)文章
- 云火墻與云防火墻的區(qū)別是什么?下面為大家介紹。2012-10-19
- RedHatLinux為增加系統(tǒng)安全性提供了防火墻保護(hù)。防火墻存在于你的計(jì)算機(jī)和網(wǎng)絡(luò)之間,用來判定網(wǎng)絡(luò)中的遠(yuǎn)程用戶有權(quán)訪問你的計(jì)算機(jī)上的哪些資源2012-07-13
防火墻Firewall設(shè)置方法之iptables篇
Firewall 防火墻,工作在網(wǎng)絡(luò)或主機(jī)的邊緣,對(duì)進(jìn)出本網(wǎng)絡(luò)或主機(jī)的數(shù)據(jù)包根據(jù)事先設(shè)置好的規(guī)則進(jìn)行檢查并且能夠在數(shù)據(jù)包匹配到之后由預(yù)置的動(dòng)作進(jìn)行處理的組件的組合2012-07-11McAfee防火墻導(dǎo)致Jmail發(fā)郵件失敗的解決方法
這幾天發(fā)現(xiàn)服務(wù)器上的Jmail發(fā)郵件失敗,又不返回任何錯(cuò)誤,只是發(fā)送過程很快,像是根本沒執(zhí)行,測試發(fā)現(xiàn)程序是順利執(zhí)行完成的2011-05-23- 今天看了前面的原創(chuàng)帖子說到eweb遇到asp,asa,cer被限制訪問拿不了shell,正好這個(gè)問題我是知道的。應(yīng)該很多大牛都會(huì)的吧,估計(jì)還是有些不會(huì)的,就將就看看吧2011-05-10
- 經(jīng)典高招打造自己的超級(jí)電腦防火墻網(wǎng)絡(luò)安全中談到個(gè)人上網(wǎng)時(shí)的安全,還是先把大家可能會(huì)遇到的問題歸個(gè)類吧。2011-02-27
- iptables 這個(gè)指令, 如同以下用 man 查詢所見, 它用來過濾封包和做NAT Network Address Translation(網(wǎng)路位址轉(zhuǎn)譯), 這個(gè)指令的應(yīng)用很多, 可以做到很多網(wǎng)路上的應(yīng)用.2009-06-18
- 掃不出肉雞有很多的可能!一般有如下的情況! 1.你系統(tǒng)的防火墻,或某些補(bǔ)丁作怪! 2.有些地方是掃不到肉雞的(是不是和各地的電信有關(guān),暫時(shí)還不知道) 3.機(jī)子2008-10-08
- 弄到一個(gè)sa權(quán)限,利落得拿到一個(gè)webshell,透過sqlrootkit,俺就是system權(quán)限了.本以為對(duì)方菜到家了.誰知故事才剛剛開始.2008-10-08
黑客攻防實(shí)戰(zhàn)之對(duì)有防火墻網(wǎng)站入侵過程
前幾天群里的兄弟給了一個(gè)網(wǎng)站,問我可不可以入侵2008-10-08