日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]SSH反向连接及Autossh

發(fā)布時間:2024/4/13 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]SSH反向连接及Autossh 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html

SSH反向連接及Autossh

0.接觸Linux恐怕對SSH再熟悉不過了,還有scp,sftp各種方便的功能,一般的使用都需要ip:port(如果不是默認22的話),但有些情況比較特殊,就是想連接一臺內(nèi)網(wǎng)主機(比如公司內(nèi)網(wǎng),當然你肯定做不了Port Forwarding,除非你想在公司防火墻上拆個洞)。稍懂一點網(wǎng)絡(luò)的童鞋會明白,Internet上去主動連接一臺內(nèi)網(wǎng)是不可能的,一般的解決方案分兩種,一種是端口映射(Port Forwarding),將內(nèi)網(wǎng)主機的某個端口Open出防火墻,相當于兩個外網(wǎng)主機通信;另一種是內(nèi)網(wǎng)主機主動連接到外網(wǎng)主機,又被稱作反向連接(Reverse Connection),這樣NAT路由/防火墻就會在內(nèi)網(wǎng)主機和外網(wǎng)主機之間建立映射,自然可以相互通信了。但是,這種映射是NAT路由自動維持的,不會持續(xù)下去,如果連接斷開或者網(wǎng)絡(luò)不穩(wěn)定都會導(dǎo)致通信失敗,這時內(nèi)網(wǎng)主機需要再次主動連接到外網(wǎng)主機,建立連接。

?

1.理論的介紹完了,下面實際操作:

A要控制B

A主機:外網(wǎng),ip:123.123.123.123,sshd端口:2221

B主機:內(nèi)網(wǎng),sshd端口:2223

無論是外網(wǎng)主機A,還是內(nèi)網(wǎng)主機B都需要跑ssh daemon

?

1.1.首先在B上執(zhí)行

$ ssh -NfR 1234:localhost:2223 user1@123.123.123.123 -p2221

這句話的意思是將A主機的1234端口和B主機的2223端口綁定,相當于遠程端口映射(Remote Port Forwarding)。

這里每次需要輸入A主機user1的登陸密碼,后面會講到解決辦法。

?

1.2.這時在A主機上sshd會listen本地1234端口

$ ss -ant
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:1234 *:*

1.3.像平時一樣連接到A主機的1234端口就可以控制內(nèi)網(wǎng)B主機了

$ ssh localhost -p1234

?

2.一開始提到,這種反向連接(Reverse Connection)不穩(wěn)定,可能隨時斷開,需要內(nèi)網(wǎng)主機B再次向外網(wǎng)A發(fā)起連接,這時需要個“朋友”幫你在內(nèi)網(wǎng)B主機執(zhí)行這條命令。它就是Autossh。

在此之前還要解決之前的一個問題,那就是每次內(nèi)網(wǎng)主機B連接外網(wǎng)主機A時都需要輸入密碼,這個問題ssh本身是提供另外一種驗證方式——通過密鑰驗證用戶身份,實現(xiàn)自動登錄。

?

2.1.在內(nèi)網(wǎng)B主機上生產(chǎn)公鑰和私鑰

$ ssh-keygen ...(一直按Enter,最后在~/.ssh/下生成密鑰) $ ls ~/.ssh/ id_rsa id_rsa.pub known_hosts

?

2.2.復(fù)制B主機上生成的id_rsa.pub公鑰到外網(wǎng)A主機上,并將內(nèi)容加入到~/.ssh/authorized_keys中

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

試下,內(nèi)網(wǎng)B主機連接外網(wǎng)A主機,就不再輸入密碼驗證了

補充:今天了解到ssh-copy-id這個命令,上面這個操作就變的簡單了

$ ssh-copy-id user1@123.123.123.123

?

2.3.再來看看Autossh的用法

$ autossh -M 5678 -NR 1234:localhost:2223 user1@123.123.123.123 -p2221

比之前的命令添加的一個-M 5678參數(shù),負責(zé)通過5678端口監(jiān)視連接狀態(tài),連接有問題時就會自動重連,去掉了一個-f參數(shù),因為autossh本身就會在background運行。

?

3.終極方案:當重啟內(nèi)網(wǎng)B主機,誰來自動Autossh呢,加入daemon吧

以daemon方式執(zhí)行,相當于root去執(zhí)行autossh, ssh,這時剛才普通用戶目錄下的.ssh/authorized_keys文件會不起效。有兩種辦法解決,一種是用autossh的參數(shù)指定.ssh路徑;另外一種是以普通用戶身份執(zhí)行daemon,下面是第二種方式。

/bin/su -c '/usr/bin/autossh -M 5678 -NR 1234:localhost:2223 user1@123.123.123.123 -p2221' - user1

autossh還有很多參數(shù),用來設(shè)置重連間隔等等。

將上面命令放入下面各啟動方式中,根據(jù)自己系統(tǒng)自己配置:

SysV:/etc/inid.d/autossh

Upstart: /etc/init/autossh.conf

systemd: /usr/lib/systemd/system/autossh.service

?

?

P.S.

1.家里是ADSL的話,用DDNS,解決ip問題

2.外網(wǎng)有路由的可設(shè)下端口映射

3.雖然有密鑰和密碼保護,但還請小心使用

總結(jié)

以上是生活随笔為你收集整理的[转]SSH反向连接及Autossh的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。