需求:
公司生产的嵌入式设备部署到现场需要拥有远程访问功能。
技术依赖:
ssh免密登录
id_rsa 和 ~/.ssh/authorized_keys文件中其中一条公钥能组成密钥对,ssh user@host -i id_rsa这条指令就能成功登录到服务端。
解决方案:
嵌入式设备中一个活跃的mqtt进程一直连接到公网服务器,想要远程哪个嵌入式设备,就把一个私钥发给嵌入式设备,公钥写入authorized_keys。嵌入式设备收到私钥后执行
ssh -CqTfnN -R 0.0.0.0:60403:127.0.0.1:22 root@serverip -i id_rsa -o ConnectTimeout=3 -o StrictHostKeyChecking=no
(id_rsa为收到私钥文件),将本地22端口转发到服务器的60403端口,在服务器上执行 ssh -p 60403 user@127.0.0.1就可以登录到嵌入式设备。
总结:上面一系列动作都不需要人工干预嵌入式设备的运行,因此实现了通过服务器远程访问嵌入式设备的功能。
注意:ssh的 -i 选项,后面跟的私钥文件的属性必须是600,如果不是,使用 chmod 600 id_rsa
更改,否则这条指令执行不通过,因为ssh认为私钥是不允许其他用户有任何权限的。