您可使用遠程登錄功能,通過SSH協議的網絡服務遠程訪問設備,在設備遠程控制臺輸入設備的指令,進行調試和定位問題。本文介紹如何使用遠程登錄功能。
前提條件
使用流程
如下功能時序圖,以設備的應用程序demos/tunnel_remote_access_demo.c
為例,介紹設備實現遠程登錄的使用流程。
步驟1:初始化設備
創建設備句柄,并將設備連接上云。
/* 初始化設備,并將設備連接上云 */ device = demo_device_init(product_key, device_name, device_secret, host, port); if(device == NULL) { printf("demo device connect failed\r\n"); }
設置監聽隧道開關的回調函數。
/* 設置隧道開關消息回調 */ 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(¶ms, 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, ¶ms);
/* 回調函數中不能長時間阻塞,在主函數中完成建連 */
}
}
參數說明如下表所示。
參數 | 說明 |
operation | 操作類型:
|
tunnel_id | 隧道的唯一身份ID。 |
host | 隧道連接地址。 |
port | 隧道連接端口。 |
path | 隧道連接路徑。 |
token | 隧道鑒權的信息。 |
步驟4:隧道建連
/* 隧道未建連,異步完成隧道建連,在事件回調函數中重置tunnel_status狀態 */
aiot_tunnel_connect(tunnel_handle);
步驟5:建立SSH會話
步驟6: 消息收發
登錄成功后,您將看到如下遠程控制臺頁面。您可根據設備本身功能對設備進行管理。
重要
登錄成功后,若您5分鐘內未進行任何操作,則登錄連接會被關閉。
步驟7: 關閉遠程登錄
在控制臺關閉遠程登錄。具體操作,請參見關閉遠程登錄。
使用如下命令關閉隧道。
/* 該示例只有一個隧道,如果為關閉隧道命令則關閉隧道,如果為打開新隧道,也需要先關閉舊的隧道*/ if(tunnel_handle != NULL) { aiot_tunnel_deinit(&tunnel_handle); tunnel_status = -1; }
步驟8:反初始化設備
/* 斷開設備連接,并回收設備資源 */
demo_device_deinit(device);
文檔內容是否對您有幫助?