原因
在实际工作中,经常遇到要查看客户路由器,帮助客户解决问题的情况,但是我们不可能每次都在客户现场,因此反向连接的存在就非常必要。
原理
因为客户路由器除了拨号当主路由的以外,对我们来说基本上都是局域网的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 root@114.215.xx.134
后,公网服务器端口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
执行完此命令后,不出意外可以进入路由器系统