文档

远程登录

更新时间:

您可使用远程登录功能,通过SSH协议的网络服务远程访问设备,在设备远程控制台输入设备的指令,进行调试和定位问题。本文介绍如何使用远程登录功能。

前提条件

使用流程

如下功能时序图,以设备的应用程序demos/tunnel_remote_access_demo.c为例,介绍设备实现远程登录的使用流程。

aiot

步骤1:初始化设备

  1. 创建设备句柄,并将设备连接上云。

     /* 初始化设备,并将设备连接上云 */
        device = demo_device_init(product_key, device_name, device_secret, host, port);
        if(device == NULL) {
            printf("demo device connect failed\r\n");
        }
  2. 设置监听隧道开关的回调函数。

    /* 设置隧道开关消息回调 */
        aiot_device_ts_set_callback(device, demo_tunnel_switch_callback, NULL);

步骤2:获取隧道登录信息

  • 方式一:在控制台开启远程登录。具体操作,请参见手动开启远程登录

  • 方式二:设备主动请求远程登录。

        /* 主动请求隧道信息 */
        aiot_device_tunnel_request(device);
说明

大部分场景下,使用方式一按需开启远程登录进行设备运维。但设备在业务故障导致无法在控制台开启远程登录进行设备运维,设备可以定时主动请求最新的隧道登录信息,将隧道功能运行在独立进程中,保证当业务故障时隧道仍在运行,可以远程登录运维。

步骤3:处理隧道信息

处理隧道信息回调函数,创建隧道句柄并更新建连信息。

/* 设备的安全隧道开关模块回调,处理云端信令 */
static void demo_tunnel_switch_callback(void *device, const aiot_ts_msg_t *ts_msg, void *userdata)
{
    aiot_tunnel_connect_param_t params;
    ....
    if(AIOT_TUNNEL_OPERATOPN_OPEN == ts_msg->operation ||
            AIOT_TUNNEL_OPERATOPN_UPDATE == ts_msg->operation) {
        memset(&params, 0, sizeof(params));
        params.host = ts_msg->host;
        params.port = ts_msg->port;
        params.path = ts_msg->path;
        params.token = ts_msg->token;

        /* 创建并初始化新的隧道 */
        tunnel_handle = aiot_tunnel_init(ts_msg->tunnel_id);
        /* 配置隧道支持的服务 */
        aiot_tunnel_add_proxy_service(tunnel_handle, "_SSH", &ssh_service);
        /* 配置隧道状态的回调函数 */
        aiot_tunnel_set_event_callback(tunnel_handle, demo_tunnel_event_cb, NULL);
        /* 设置隧道的连接参数 */
        aiot_tunnel_set_connect_params(tunnel_handle, &params);

        /* 回调函数中不能长时间阻塞,在主函数中完成建连 */
    }
}

参数说明如下表所示。

参数

说明

operation

操作类型:

  • AIOT_TUNNEL_OPERATOPN_UPDATE:主动请求隧道的回复 。

  • AIOT_TUNNEL_OPERATOPN_OPEN:控制台主动打开隧道。

  • AIOT_TUNNEL_OPERATOPN_CLOSE:控制台主动关闭隧道。

tunnel_id

隧道的唯一身份ID。

host

隧道连接地址。

port

隧道连接端口。

path

隧道连接路径。

token

隧道鉴权的信息。

步骤4:隧道建连

/* 隧道未建连,异步完成隧道建连,在事件回调函数中重置tunnel_status状态 */
    aiot_tunnel_connect(tunnel_handle);

步骤5:建立SSH会话

  1. 远程登录页签,单击登录

  2. 在对话框中,输入设备远程访问的用户名和密码,单击确定

    重要

    设备远程访问的用户名和密码,由您在设备端自行设置。

步骤6: 消息收发

登录成功后,您将看到如下远程控制台页面。您可根据设备本身功能对设备进行管理。

重要

登录成功后,若您5分钟内未进行任何操作,则登录连接会被关闭。

终端窗

步骤7: 关闭远程登录

  • 在控制台关闭远程登录。具体操作,请参见关闭远程登录

  • 使用如下命令关闭隧道。

        /* 该示例只有一个隧道,如果为关闭隧道命令则关闭隧道,如果为打开新隧道,也需要先关闭旧的隧道*/
        if(tunnel_handle != NULL) {
            aiot_tunnel_deinit(&tunnel_handle);
            tunnel_status = -1;
        }

步骤8:反初始化设备

/* 断开设备连接,并回收设备资源 */
    demo_device_deinit(device);

  • 本页导读 (1)
文档反馈