物联网通信平台为方便设备端进行远程运维,支持正常ssh指令操作,实现内网穿透,对无公网IP的设备提供ssh远程登录功能。
- 订阅消息Topic:
$sys/operation/result/${productid}/${devicename}
用于订阅云端下发(下行)请求消息。 - 请求消息Topic:
$sys/operation/${productID}/${deviceName}
用于发布(上行)请求消息。
1 在设备运行的系统上开启 ssh 服务
如Android系统上运行实例程序,可安装termux-app,继而在 Termux App 上开启 ssh服务。 打开 Termux App 后,先安装openssh, 输入 'pkg upgrade' 'pkg install openssh' 安装好openssh后,开启 ssh服务, 输入'sshd' ,无错误提示说明开启 ssh服务 成功。 查看 ssh服务 的ip,输入'ifconfig',如下示例中 ssh服务 的 ip为 192.168.1.107 ,Termux App上开启的 ssh服务 默认端口号为8022。
~ $ ifconfig
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.107 netmask 255.255.255.0 broadcast 192.168.1.255
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
Termux上查看当前用户名,输入'whoami', 如下示例中 当前用户名为 u0_a618。
~ $ whoami
u0_a618
Termux上设置对应的密码,输入'passwd', 输入并确认设置的密码。
2 填写认证连接设备的参数 示例中编辑 app-config.json 文件中的配置信息
{
"PRODUCT_ID": "",
"DEVICE_NAME": "",
"DEVICE_PSK": "",
}
在 IoTMqttFragment.java 中,配置 ssh服务 的IP及端口号,填入上面步骤中 ssh服务 IP,以及端口号8022
{
// ssh 要访问的IP
private String sshHost = "192.168.1.107";
// ssh 端口号 sshd服务一般默认端口22
private int sshPort = 8022;
}
3 运行示例程序
选择hub.hub-android-demo的 Android App ,点击 Android Studio 菜单栏上的 Run 'hub.hub-android-demo' 按钮安装 Demo。
运行示例程序,在基础功能模块上,点击连接MQTT
按钮,进行认证连接。示例代码如下:
mMQTTSample = new MQTTSample(mParent, new SelfMqttActionCallBack(), mBrokerURL, mProductID, mDevName, mDevPSK, mDevCert, mDevPriv, mSubProductID, mSubDevName, mTestTopic, null, null, true, new SelfMqttLogCallBack(), sshHost, sshPort); //MQTTSample类是Demo对SDK接口调用的一层封装类。
mMQTTSample.connect(); // MQTT连接
观察Logcat日志:
I/TXMQTT1.1.0: Start connecting to tcp://87PULDPUHE.iotcloud.tencentdevices.com:1883
I/TXMQTT: onConnectCompleted, status[OK], reconnect[false], userContext[MQTTRequest{requestType='connect', requestId=0}], msg[connected to tcp://87PULDPUHE.iotcloud.tencentdevices.com:1883]
I/System.out: 2022/04/01 08:22:20 INFO TXMqttLogImpl info 133 - Starting subscribe topic: $sys/operation/result/87PULDPUHE/device00
D/TXMQTT: onSubscribeCompleted, status[OK], topics[[$sys/operation/result/87PULDPUHE/device00]], userContext[], errMsg[subscribe success]
以上是设备已上线,并成功订阅ssh所需要监听的Topic 的日志
4 在腾讯云物联网通信平台控制台上操作远程登录
产品列表 --> 选择示例代码中配置的设备对应的产品 --> 设备列表 --> 选择示例代码中配置的设备 --> 在线调试 --> 远程登录 --> 开启远程SSH登录 --> 查询开启状态 --> 登录 --> 输入当前开启的 ssh服务 的管理员账号以及密码(之前查看到的用户名及设置的密码) --> 登录 --> 即可操作对应ssh指令