ssh實現辦公室電腦鏈接家中的電腦

友情提示:若是您不知道您家路由器管理頁面的密碼,請您忽略此文。瀏覽器

 

問題背景:服務器

家中有檯筆記本電腦,它是經過家中的路由器與外界聯網的,這時,我想經過ssh服務讓公司的電腦能連上我家中的筆記本。ssh

能夠畫個圖更直觀地解釋一下,以下圖ui

 

家中路由器的IP地址是外網,也就是說外部的電腦能夠訪問它。路由器會給家裏的每一個設備各分配一個獨特的IP地址,這個IP地址是隻適用於路由器控制的局部範圍,而每一個設備的外部IP都是相同的,也就是路由器的IP地址:201.23.4.57。這時候,問題來了,我想在A上經過ssh鏈接B,按照命令,應該在A的命令行輸入spa

ssh guanyuzuike@ip_address

其中,guanyuzuike是我在電腦B上的用戶名,那麼這個ip_address應該怎樣填呢?.net

若是填192.168.1.103, 那顯然是不行的,由於它只是一個局部的IP,外網並不能訪問它。若是填201.23.4.57,那麼這個時候路由器就有點不爽了,他會問:你究竟是要我連哪一個設備?? 命令行

 

咱們的目標:3d

今天的博客,就是解決幫路由器解決連哪一個設備的問題。 具體來講,今天的博客內容將讓你實現如下功能:code

能夠在A命令行輸入如下任意一條指令,均可以連上家中的電腦Bserver

# command 1
ssh guanyuzuike@201.23.4.57 # then input password of guanyuzuike # command 2
ssh guanyuzuike@xxxxxx # then input password of guanyuzuike # command 3
ssh home # then input password of guanyuzuike # command 4
ssh home # no need to input anything

從以上四條指令來看,咱們的終極目標是實現第四條指令,而後也不須要輸入用戶密碼,直接連上B。

 

 

適用環境及準備:

 

A安裝ssh客戶端,B安裝ssh服務端並開啓ssh服務。

安裝客戶端請自行上網查詢。對於Linux系統,安裝ssh服務端和開啓的指令爲(僅供參考)

sudo apt-get install openssh-server sudo service ssh start

 

 

 

具體操做:

1. 實現command 1

要鏈接B,確定是要經過路由器的外網IP,即201.23.4.57。可是,要引導路由器連上B,必需要藉助路由器的接口轉發功能。

第一步:登陸路由器管理界面

對於大多數路由器,在瀏覽器輸入192.168.1.1便可進入界面(但有的路由器是別的網址,這個時候就須要機智的你研究一下你家路由器了),輸入密碼登陸,進入如圖所示的頁面(界面風格因路由器各類型號和版本而異,但功能差很少)

第二步:找到接口轉發設置窗口

接口轉發,也稱port forwarding,也稱虛擬服務器,好比個人就在高級設置>>高級用戶>>虛擬服務器 裏面,通常長得差很少,以下

點擊添加添加虛擬服務器;

經常使用服務器不用填,內部端口填22(ssh御用端口),外部端口可與內部端口同樣,也能夠填個大點的數以防止與現有的端口重複,好比我填2237,IP地址填B的局部IP:192.168.1.103(忽略我圖上填的);協議類型選all(有的路由是選both,反正就是支持全部協議的意思)。最後保存。此操做的意思就是讓外網經過端口2237給路由器傳輸命令,讓路由器知道我要轉發局部IP爲192.168.1.103的ssh服務(爲何是ssh服務?由於內部端口22表明ssh服務)。

若是外部端口填的是22,那麼此時就能夠在A上調用command 1對B進行訪問。

若是外部端口填的是別的數,如2237,那麼,有兩種方式對B進行訪問:

方式1, 在A上調用指令:ssh -p 2237 guanyuzuike@201.23.4.57 也就是說在command 1的基礎上加上 -p 2237,表明外部端口是2237(默認是22)

方式2, 待會講。

 

2. 實現command 2

command 2裏面的xxxxxx實際上是路由器外網IP的一個域名。爲何要搞一個域名,由於路由器的外網IP不會保證一直不變,也就是說,可能幾個月後,它從如今的201.23.4.57會變成201.23.4.44(瞎編的,反正就是一個不一樣的地址)。這時候,就須要調用ssh -p 2237 guanyuzuike@201.23.4.44。一個字,麻煩。而有一個域名的時候,好比:guanyuzuike.net,那麼我能夠從始至終,從盤古開天到天荒地老,我一直調用ssh -p 2237 guanyuzuike@guanyuzuike.net,均可以成功連上B。怎麼搞?如上圖,找到路由管理頁面的DDNS,會有一個花生殼的服務,以下

 

 註冊一個花生殼帳號,須要花點RMB(域名大概8塊一個),能夠獲得一個你設置的個性域名。

 

3. 實現command 3

上面的命令,看起來總有點麻煩。因此,如何省去 -p 2237,甚至直接調用ssh home ? 

好的,請在A打開文件~/.ssh/config(它是一個文本文件,沒有的話請直接建立一個這樣的文件),輸入如下

Host home User guanyuzuike Port 2237 HostName guanyuzuike.net 
# if you do not have an alias for ip
# HostName 201.23.4.57 #it is your ip address

這裏順便也變上面提到的「方式2」也講了

 

4. 實現command 4

以上仍是麻煩,由於每次ssh的時候,須要輸密碼。下面,就能夠經過建立ssh key,來解決這個問題。

第一步:在A中,命令行輸入

ssh-keygen

Enter file in which to save the key (/home/xx/.ssh/id_rsa): 這裏你能夠取一個別的名字,好比/home/xx/.ssh/id_home_rsa,xx爲你在A上的用戶名

這樣,在/home/xx/.ssh/下會生成兩個文件:id_home_rsa和id_home_rsa.pub。

第二步:在~/.ssh/config(其實也就是/home/xx/.ssh/config)裏添加一項:

Host home User guanyuzuike Port 2237 HostName guanyuzuike.net IdentityFile /home/xx/.ssh/id_home_rsa

第三步,打開B中的文件/home/guanyuzuike/.ssh/authorized_keys(一樣是一個文本文件,若是沒有請建立一個),將剛剛id_home_rsa.pub裏面的內容(其實也就是一行內容)複製做爲authorized_keys裏面的一行。

這樣,你就能夠在A上簡單調用ssh home,連上B,連密碼都不用輸。

 

固然,上面說的全部,都是基於如下條件:

你沒有遇到其餘問題

當你不知足以上條件時,能夠採起如下辦法:

機智如你,上網查詢

祝您愉快。

相關文章
相關標籤/搜索