原因
在實際工作中,經常遇到要查看客戶路由器,幫助客戶解決問題的情況,但是我們不可能每次都在客戶現場,因此反向連接的存在就非常必要。
原理
因爲客戶路由器除了撥號當主路由的以外,對我們來說基本上都是局域網的IP我們不可能直接訪問到,那麼我們就只能讓路由器主動去連接到一個公網服務器,然後我們通過公網服務器再連接到路由器上就實現了反向連接。
路由器端配置
- 路由器端生成私鑰:
路由器端生成私鑰dropbearkey -f /etc/dropbear/my_key.crt -t rsa
,使用dropbearkey命令生成其中-f參數後寫要生成的私鑰路徑,-t 爲祕鑰類型,我們選擇rsa,命令執行後會打印出私鑰所配對的公鑰,複製公鑰內容
root@KFRouter:/etc/dropbear# dropbearkey -f /etc/dropbear/my_key.crt -t rsa
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCINS5ZrrFkx0adLyxaVdtUHwXkYp0dlF6.........................fWgbqmG6H/ root@Router
Fingerprint: md5 64:a7:fd:ff:b0
- 複製公鑰到服務器:
將上面步驟保存的公鑰寫入到公網服務器的~/.ssh/authorized_keys
中,此時路由器將本地ssh端口鏡像到服務器就不需要輸入密碼了 - 執行鏡像端口命令:
執行命令ssh -y -i /etc/dropbear/my_key.crt-f -N -T -R 51112:localhost:22 [email protected]
後,公網服務器端口51112將等效於路由器ssh端口,若步驟2錯誤的話,此步驟將需要輸入密碼
服務器端配置
前幾個步驟已經將路由器的ssh端口鏡像到公網服務器的某個端口,那麼我們現在只需要在公網服務器上登錄那個鏡像端口就相當於連接到了路由器上,因此爲了免輸密碼,我們需要先生成密鑰對,並將公鑰拷貝到路由器/etc/dropbear/authorized_keys
中
- 服務器端生成密鑰對:
服務器中執行命令ssh-keygen
命令後按提示生成祕鑰
[proxy@iZm ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/proxy/.ssh/id_rsa): /home/proxy/.ssh/my_rvssh
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/proxy/.ssh/my_rvssh.
Your public key has been saved in /home/proxy/.ssh/my_rvssh.pub.
The key fingerprint is:
9b:4b:77:86:62:860:9e:9c:77 proxy@iZm5e
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| . |
| +S+ . |
| *o+ E |
| ++.*.. .|
| ..oX...o o|
| .+ o ..o |
+-----------------+
[proxy@iZm5e ~]$ cat /home/proxy/.ssh/my_rvssh.pub
ssh-rsa AAAAB3NzaC1yc2EAwAAAQEA0oormuc8qNzccYg......p59yo/G/d7zv1zLNPdWObKgNW6tpuCcMNGZkf1XVn0oc9RV3O2GSV/lmHZfrUatV1Me7/o32WMXlCETvwXuv3p3sj8XPXUVzENT9qCUyX34/GlAqNXTwqHXj7hE0hdNW6Dn2LNTYgpD0Ku4S6FTjmlLrnV/7w=5ea0mqg67os8f7p2z92Z
- 拷貝服務器的公鑰到路由器:
上面的信息中已經告知了祕鑰所對應的公鑰位置了/home/proxy/.ssh/my_rvssh.pub
直接查看公鑰內容,然後將文件內容追加到路由器文件/etc/dropbear/authorized_keys
中 - 登錄鏡像端口:
在服務器中執行命令:ssh -p 55555 root@localhost -i ~/.ssh/my_rvssh
執行完此命令後,不出意外可以進入路由器系統