Краткое руководство. Подключение по протоколу SSH и RDP через поток устройств центра Интернета вещей с помощью прокси-приложения C (предварительная версия)Quickstart: Enable SSH and RDP over an IoT Hub device stream by using a C proxy application (preview)

Центр Интернета вещей Azure поддерживает потоки устройств, которые сейчас доступны в режиме предварительной версии.Azure IoT Hub currently supports device streams as a preview feature.

Потоки устройств Центра Интернета вещей позволяют службам и приложениям устройств безопасным и подходящим методом обмениваться данными с брандмауэром.IoT Hub device streams allow service and device applications to communicate in a secure and firewall-friendly manner. Общие сведения о настройке cм. на странице Пример локального прокси-приложения.For an overview of the setup, see the Local Proxy Sample page.

В этом кратком руководстве описывается настройка для туннелирования трафика Secure Shell (SSH) (используя порт 22) через потоки устройств.This quickstart describes the setup for tunneling Secure Shell (SSH) traffic (using port 22) through device streams. Настройка для трафика протокола удаленного рабочего стола (RDP) выполняется аналогично и требует простого изменения конфигурации.The setup for Remote Desktop Protocol (RDP) traffic is similar and requires a simple configuration change. Так как потоки устройств не зависят от приложений и протоколов, вы можете изменить это краткое руководство для размещения других типов трафика приложений.Because device streams are application- and protocol-agnostic, you can modify this quickstart to accommodate other types of application traffic.

Принцип работыHow it works

На рисунке, приведенном ниже, показано, как программы локального прокси-сервера устройств и служб обеспечивают сквозное подключение между клиентом SSH и процессами управляющей программы SSH.The following figure illustrates how the device- and service-local proxy programs enable end-to-end connectivity between the SSH client and SSH daemon processes. На этапе предварительной версии пакет SDK для C поддерживает только потоки устройств на стороне устройства.During public preview, the C SDK supports device streams on the device side only. В результате это краткое руководство охватывает инструкции по запуску только приложения прокси-устройства на стороне службы.As a result, this quickstart covers instructions to run only the device-local proxy application. Необходимо пройти одно из следующих кратких руководств по службам:You should run one of the following service-side quickstarts:

Настройка локального прокси-приложения

  1. Локальное прокси-приложение службы подключается к центру Интернета вещей и запускает поток устройства на целевое устройство.The service-local proxy connects to the IoT hub and starts a device stream to the target device.

  2. Локальный прокси-сервер устройства завершает подтверждение инициации потоковой передачи и устанавливает сквозной потоковый туннель через конечную точку потоковой передачи центра Интернета вещей на стороне службы.The device-local proxy completes the stream initiation handshake and establishes an end-to-end streaming tunnel through the IoT hub's streaming endpoint to the service side.

  3. Локальный прокси-сервер устройства подключается к управляющей программе SSH, ожидая передачи данных к устройству через порт 22.The device-local proxy connects to the SSH daemon that's listening on port 22 on the device. Этот параметр можно настроить, используя инструкции, описанные в разделе "Запуск приложения локального прокси-сервера устройства".This setting is configurable, as described in the "Run the device-local proxy application" section.

  4. Локальный прокси-сервер службы ожидает новые подключения SSH от пользователя, прослушивая назначенный порт, который в этом случае является портом 2222.The service-local proxy waits for new SSH connections from a user by listening on a designated port, which in this case is port 2222. Этот параметр можно настроить, используя инструкции, описанные в разделе "Запуск приложения локального прокси-сервера устройства".This setting is configurable, as described in the "Run the device-local proxy application" section. Когда пользователь подключается через клиент SSH, туннель позволяет передавать трафик приложения SSH между клиентом SSH и программами сервера.When the user connects via SSH client, the tunnel enables SSH application traffic to be transferred between the SSH client and server programs.

Примечание

Трафик SSH, передаваемый по потоку устройств, будет туннелироваться через конечную точку потоковой передачи центра Интернета вещей, а не напрямую между службой и устройством.SSH traffic that's sent over a device stream is tunneled through the IoT hub's streaming endpoint rather than sent directly between service and device. Дополнительные сведения см. в списке преимуществ использования потоков устройств центра Интернета вещей.For more information, see the benefits of using Iot Hub device streams. Кроме того, на рисунке показана управляющая программа SSH, запущенная на том же устройстве (или компьютере), что и локальный прокси-сервер устройства.Furthermore, the figure illustrates the SSH daemon that's running on the same device (or machine) as the device-local proxy. В этом кратком руководстве предоставление IP-адреса управляющей программы SSH позволяет локальному прокси-серверу устройства и управляющей программе работать на разных компьютерах.In this quickstart, providing the SSH daemon IP address allows the device-local proxy and the daemon to run on different machines as well.

Использование Azure Cloud ShellUse Azure Cloud Shell

В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Для работы со службами Azure в Cloud Shell можно использовать bash и PowerShell.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Чтобы запустить Azure Cloud Shell, сделайте вот что:To launch Azure Cloud Shell:

ПараметрOption Пример и ссылкаExample/Link
Нажмите кнопку Попробовать в правом верхнем углу блока с кодом.Select Try It in the upper-right corner of a code block. При нажатии кнопки Попробовать код не копируется в Cloud Shell автоматически.Selecting Try It doesn't automatically copy the code to Cloud Shell. Открытие Azure Cloud Shell с помощью кнопки "Попробовать"
Перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell, чтобы открыть Cloud Shell в браузере.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. <a href="https://shell.azure.com" title="Запуск Azure Cloud Shell
На портале Azure в правом верхнем углу в строке меню нажмите кнопку Cloud Shell.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Кнопка "Cloud Shell" на портале Azure

Чтобы выполнить код из этой статьи в Azure Cloud Shell, сделайте вот что:To run the code in this article in Azure Cloud Shell:

  1. Запустите Cloud Shell.Launch Cloud Shell.
  2. В блоке кода нажмите кнопку Копировать, чтобы скопировать код.Select the Copy button on a code block to copy the code.
  3. Вставьте код в окно сеанса Cloud Shell, нажав клавиши Ctrl+Shift+V в Windows и Linux или Cmd+Shift+V в macOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Нажмите клавишу ВВОД, чтобы выполнить код.Press Enter to run the code.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don’t have an Azure subscription, create a free account before you begin.

Предварительные требованияPrerequisites

  • Предварительная версия потоков устройств сейчас поддерживается только в центрах Интернета вещей, созданных в следующих регионах:The preview of device streams is currently supported only for IoT hubs that are created in the following regions:

    • Центральный регион СШАCentral US
    • Центральная часть США (EUAP)Central US EUAP
  • Установите Visual Studio 2019 с включенной рабочей нагрузкой Разработка классических приложений на C++.Install Visual Studio 2019 with the Desktop development with C++ workload enabled.

  • Установите последнюю версию Git.Install the latest version of Git.

  • Выполните следующую команду, чтобы добавить расширение Интернета вещей Azure для Azure CLI в экземпляр Cloud Shell.Run the following command to add the Azure IoT Extension for Azure CLI to your Cloud Shell instance. Расширение Интернета вещей добавляет в Azure CLI специальные команды Центра Интернета вещей, IoT Edge и Службы подготовки устройств к добавлению в центр Интернета вещей (DPS).The IOT Extension adds IoT Hub, IoT Edge, and IoT Device Provisioning Service (DPS)-specific commands to the Azure CLI.

    az extension add --name azure-cli-iot-ext
    

Подготовка среды разработкиPrepare the development environment

При работе с этим кратким руководством используйте пакет SDK для устройств Azure IoT для C. Вы подготовите среду разработки, которая используется для клонирования и сборки пакета SDK Azure IoT для C с сайта GitHub.For this quickstart, you use the Azure IoT device SDK for C. You prepare a development environment used to clone and build the Azure IoT C SDK from GitHub. Пакет SDK на сайте GitHub содержит пример кода, используемый в этом кратком руководстве.The SDK on GitHub includes the sample code that's used in this quickstart.

  1. Скачайте систему сборки CMake.Download the CMake build system.

    Перед установкой CMake важно установить на компьютер необходимые компоненты Visual Studio (Visual Studio и рабочую нагрузку Разработка классических приложений на C++ ).It's important that the Visual Studio prerequisites (Visual Studio and the Desktop development with C++ workload) are installed on your machine, before you start the CMake installation. После установки компонентов и проверки загрузки вы можете установить систему сборки CMake.After the prerequisites are in place and the download is verified, you can install the CMake build system.

  2. Откройте командную строку или оболочку Git Bash.Open a command prompt or Git Bash shell. Выполните следующую команду для клонирования репозитория GitHub пакета SDK для устройства C Интернета вещей Azure:Execute the following command to clone the Azure IoT C SDK GitHub repository:

    git clone https://github.com/Azure/azure-iot-sdk-c.git --recursive -b public-preview
    

    Эта операция займет несколько минут.You should expect this operation to take a few minutes.

  3. Создайте подкаталог cmake в корневом каталоге репозитория Git, как показано в следующей команде и перейдите в эту папку.Create a cmake subdirectory in the root directory of the Git repository, as shown in the following command, and navigate to that folder.

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  4. Выполните приведенную ниже команду из каталога cmake, чтобы создать версию пакета SDK для используемой клиентской платформы разработки.Run the following commands from the cmake directory to build a version of the SDK that's specific to your development client platform.

    • В Linux:In Linux:

      cmake ..
      make -j
      
    • В Windows выполните приведенные ниже команды в Командной строке разработчика Visual Studio 2015 или 2017.In Windows, run the following commands in Developer Command Prompt for Visual Studio 2015 or 2017. Эта команда также создает решение Visual Studio для имитированного устройства в каталоге cmake.A Visual Studio solution for the simulated device will be generated in the cmake directory.

      rem For VS2015
      cmake .. -G "Visual Studio 14 2015"
      
      rem Or for VS2017
      cmake .. -G "Visual Studio 15 2017"
      
      rem Then build the project
      cmake --build . -- /m /p:Configuration=Release
      

Создание Центра Интернета вещейCreate an IoT hub

В этом разделе описывается создание центра Интернета вещей с помощью портала Azure.This section describes how to create an IoT hub by using the Azure portal.

  1. Войдите на портале Azure.Sign in to the Azure portal.

  2. Выберите Создать ресурс, а затем Интернет вещей.Select Create a resource, and then select Internet of Things.

  3. В списке справа выберите Центр Интернета вещей.In the list at the right, select Iot Hub. Откроется первая страница для создания центра Интернета вещей.The first page for creating an IoT hub opens.

    Создание центра Интернета вещей на портале Azure

    Заполните следующие поля.Fill in the fields:

    a.a. В раскрывающемся списке Подписка выберите нужную подписку для центра Интернета вещей.In the Subscription drop-down list, select the subscription to use for your IoT hub.

    b.b. Для группы ресурсов выполните одно из следующих действий.For Resource Group, do either of the following:

    • Чтобы создать группу ресурсов, щелкните Создать и укажите имя, которое вы хотите использовать.To create a new resource group, select Create new and enter the name you want to use.

    • Чтобы использовать существующую группу, выберите Использовать существующий, а затем группу ресурсов из раскрывающегося списка.To use an existing resource group, select Use existing and then, in the drop-down list, select the resource group.

      Дополнительные сведения о группах ресурсов см. в статье об управлении группами ресурсов в Azure Resource Manager.For more information, see Manage Azure Resource Manager resource groups.

    c.c. В раскрывающемся списке Регион выберите регион, в котором будет расположен центр Интернета вещей.In the Region drop-down list, select the region in which you want your hub to be located. Выберите регион, который поддерживает функцию "Потоки устройств" центра Интернета вещей (предварительная версия). Это — Центральная часть США или Центральная часть США (EUAP) .Select a region that supports the IoT Hub device streams preview, either Central US or Central US EUAP.

    d.d. В поле Имя центра Интернета вещей введите имя центра Интернета вещей.In the IoT Hub Name box, enter the name for your IoT hub. Оно должно быть глобально уникальным.The name must be globally unique. Если введенное имя доступно, появится зеленая галочка.If the name you enter is available, a green check mark appears.

    Важно!

    Так как центр Интернета вещей будет общедоступен в качестве конечной точки DNS, убедитесь, что в его имени не фигурируют конфиденциальные или персональные сведения.Because the IoT hub will be publicly discoverable as a DNS endpoint, be sure to avoid entering any sensitive or personally identifiable information when you name it.

  4. Чтобы продолжить создание центра Интернета вещей, выберите Далее: Размер и масштабирование.To continue creating your IoT hub, select Next: Size and scale.

    Настройка параметров размера и масштабирования центра Интернета вещей на портале Azure

    На этой панели вы можете принять настройки по умолчанию и щелкнуть Просмотр и создание внизу страницы.In this pane, you can accept the default settings and select Review + create at the bottom. Можно воспользоваться следующими вариантами:Consider the following options:

    • В раскрывающемся списке Ценовая категория и категория масштабирования выберите один из стандартных уровней (S1, S2, S3) или F1: Уровень "Бесплатный" .In the Pricing and scale tier drop-down list, select one of the standard tiers (S1, S2, or S3) or F1: Free tier. Также этот выбор может основываться на размере вашего парка и характеристиках непотоковых рабочих нагрузок, которые будут выполняться в центре Интернета вещей (например, сообщения телеметрии).This choice can also be guided by the size of your fleet and the non-streaming workloads that you expect in your hub (for example, telemetry messages). Например, для тестирования и оценки можно использовать бесплатный уровень.For example, the free tier is intended for testing and evaluation. Он позволяет подключить к Центру Интернета вещей 500 устройств и отправлять до 8000 сообщений в день.It allows 500 devices to be connected to the IoT hub and up to 8,000 messages per day. Для каждой подписки Azure можно создать один центр Интернета вещей на уровне "Бесплатный".Each Azure subscription can create one IoT hub in the free tier.

    • Для параметра Число единиц центра Интернета вещей этот выбор зависит от характеристик непотоковых рабочих нагрузок, которые будут выполняться в центре Интернета вещей.For Number of IoT Hub units: This choice depends on non-streaming workload you expect in your hub. Сейчас можно выбрать 1.You can select 1 for now.

    Дополнительную информацию о параметрах уровня см. в статье Choose the right IoT hub tier (Выбор правильного уровня центра Интернета вещей).For more information about tier options, see Choose the right IoT hub tier.

  5. Щелкните вкладку Просмотр и создание, чтобы просмотреть возможные варианты. Панель, которая откроется, будет выглядеть примерно следующим образом.To review your choices, select the Review + create tab. The pane that opens is similar to the following:

    Сведения о создании центра Интернета вещей

  6. Щелкните Создать, чтобы создать центр Интернета вещей.To create your new IoT hub, select Create. Процесс займет несколько минут.The process takes a few minutes.

Регистрация устройстваRegister a device

Устройство должно быть зарегистрировано в Центре Интернета вещей, прежде чем оно сможет подключиться.A device must be registered with your IoT hub before it can connect. В этом разделе описано, как зарегистрировать имитированное устройство с помощью расширения Интернета вещей для Azure Cloud Shell.In this section, you use Azure Cloud Shell with the IoT extension to register a simulated device.

  1. Чтобы создать удостоверение устройства, выполните приведенные ниже команды в Cloud Shell.To create the device identity, run the following command in Cloud Shell:

    Примечание

    • Замените заполнитель YourIoTHubName именем созданного центра Интернета вещей.Replace the YourIoTHubName placeholder with the name you choose for your IoT hub.
    • Используйте имя MyDevice, как показано в примере.Use MyDevice, as shown. Это имя, присвоенное зарегистрированному устройству.It's the name given for the registered device. Если вы выбрали другое имя для устройства, используйте его при работе с этой статьей и обновите имя устройства в примерах приложений перед их запуском.If you choose a different name for your device, use that name throughout this article, and update the device name in the sample applications before you run them.
    az iot hub device-identity create --hub-name YourIoTHubName --device-id MyDevice
    
  2. Выполните следующие команды в Cloud Shell, чтобы получить строку подключения зарегистрированного устройства.To get the device connection string for the device that you just registered, run the following commands in Cloud Shell:

    Примечание

    Замените заполнитель YourIoTHubName именем созданного центра Интернета вещей.Replace the YourIoTHubName placeholder with the name you choose for your IoT hub.

    az iot hub device-identity show-connection-string --hub-name YourIoTHubName --device-id MyDevice --output table
    

    Запишите строку подключения устройства для последующего использования в этом кратком руководстве.Note the device connection string for later use in this quickstart. Это должно выглядеть следующим образом:It looks like the following example:

    HostName={YourIoTHubName}.azure-devices.net;DeviceId=MyDevice;SharedAccessKey={YourSharedAccessKey}

SSH-подключение к устройству через потоки устройствSSH to a device via device streams

В этом разделе показано, как установить сквозной поток для туннелирования трафика SSH.In this section, you establish an end-to-end stream to tunnel SSH traffic.

Запуск приложения локального прокси-сервера устройстваRun the device-local proxy application

  1. Отредактируйте исходный файл iothub_client_c2d_streaming_sample.c в папке iothub_client/samples/iothub_client_c2d_streaming_sample и укажите строку подключения устройства, IP-адрес/имя хоста целевого устройства и порт 22 SSH.Edit the source file iothub_client_c2d_streaming_sample.c in the folder iothub_client/samples/iothub_client_c2d_streaming_sample, and provide your device connection string, target device IP/hostname, and the SSH port 22:

    /* Paste in your iothub connection string  */
    static const char* connectionString = "[Connection string of IoT Hub]";
    static const char* localHost = "[IP/Host of your target machine]"; // Address of the local server to connect to.
    static const size_t localPort = 22; // Port of the local server to connect to.
    
  2. Компиляция образцаCompile the sample:

    # In Linux
    # Go to the sample's folder cmake/iothub_client/samples/iothub_client_c2d_streaming_proxy_sample
    make -j
    
    rem In Windows
    rem Go to cmake at root of repository
    cmake --build . -- /m /p:Configuration=Release
    
  3. Запустите скомпилированную программу на устройстве:Run the compiled program on the device:

    # In Linux
    # Go to the sample's folder cmake/iothub_client/samples/iothub_client_c2d_streaming_proxy_sample
    ./iothub_client_c2d_streaming_proxy_sample
    
    rem In Windows
    rem Go to the sample's release folder cmake\iothub_client\samples\iothub_client_c2d_streaming_proxy_sample\Release
    iothub_client_c2d_streaming_proxy_sample.exe
    

Запуск приложения локального прокси-сервера службыRun the service-local proxy application

Как обсуждалось в разделе "Принцип работы", для создания сквозного потока для туннелирования трафика SSH требуется локальное прокси-приложение на каждом конце (как на службе, так и на устройстве).As discussed in the "How it works" section, establishing an end-to-end stream to tunnel SSH traffic requires a local proxy at each end (on both the service and the device sides). На этапе предварительной версии пакет SDK для центра Интернета вещей для C поддерживает только потоки устройств на стороне устройства.During public preview, the IoT Hub C SDK supports device streams on the device side only. Чтобы создать и запустить локальный прокси-сервер службы, следуйте инструкциям в одном из следующих кратких руководств:To build and run the service-local proxy, follow the instructions in one of the following quickstarts:

Установка сеанса SSHEstablish an SSH session

После запуска локальных прокси-серверов устройств и служб используйте клиентскую программу SSH и подключитесь к локальному прокси-серверу службы через порт 2222 (вместо подключения напрямую через управляющую программу SSH).After both the device- and service-local proxies are running, use your SSH client program and connect to the service-local proxy on port 2222 (instead of the SSH daemon directly).

ssh <username>@localhost -p 2222

На этом этапе в окне входа в SSH можно ввести учетные данные.At this point, the SSH sign-in window prompts you to enter your credentials.

На следующем рисунке показан вывод на консоль на локальном прокси-сервере устройства, который подключается к управляющей программе SSH по адресу IP_address:22.The following image shows the console output on the device-local proxy, which connects to the SSH daemon at IP_address:22:

Вывод локального прокси-приложения на устройстве

На рисунке ниже показаны выходные данные консоли клиентской программы SSH.The following image shows the console output of the SSH client program. Клиент SSH связывается с управляющей программой SSH, подключаясь к порту 22, который прослушивается локальным прокси-сервером службы.The SSH client communicates to the SSH daemon by connecting to port 22, which the service-local proxy is listening on:

Вывод клиента SSH

Очистка ресурсовClean up resources

Можно сохранить созданные ресурсы и повторно использовать их при выполнении задач в следующей рекомендуемой статье, если вы планируете перейти к ней.If you plan to continue to the next recommended article, you can keep and reuse the resources you've already created.

Если нет, вы можете удалить ресурсы Azure, созданные в рамках этой статьи, чтобы избежать расходов.Otherwise, to avoid charges, you can delete the Azure resources that you created in this article.

Важно!

Удаление группы ресурсов — процесс необратимый.Deleting a resource group is irreversible. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления.The resource group and all the resources contained in it are permanently deleted. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы.Make sure that you don't accidentally delete the wrong resource group or resources. Если вы создали центр Интернета вещей в группе ресурсов, содержащей ресурсы, которые нужно сохранить, удалите только ресурс Центра Интернета вещей, не удаляя всю группу ресурсов.If you created the IoT hub inside an existing resource group that contains resources that you want to keep, delete only the IoT hub resource itself, not the resource group.

Удаление группы ресурсов по имени:To delete a resource group by name:

  1. Войдите на портал Azure и щелкните Группы ресурсов.Sign in to the Azure portal, and then select Resource groups.

  2. Введите в поле Фильтровать по имени имя группы ресурсов, содержащей центр Интернета вещей.In the Filter by name box, enter the name of the resource group that contains your IoT hub.

  3. В списке результатов справа от своей группы ресурсов щелкните многоточие ( ... ), а затем выберите Удалить группу ресурсов.In the result list, to the right of your resource group, select the ellipsis (...), and then select Delete resource group.

    Кнопка "Удалить группу ресурсов"

  4. Чтобы подтвердить удаление, повторно введите имя группы ресурсов и выберите Удалить.To confirm the deletion of the resource group, reenter the resource group name, and then select Delete. Через некоторое время группа ресурсов и все ее ресурсы будут удалены.After a few moments, the resource group and all its contained resources are deleted.

Дополнительная информацияNext steps

В рамках этого краткого руководства вы настроили центр Интернета вещей, зарегистрировали устройство, развернули программу локальных прокси-серверов устройств и служб, чтобы установить потоковую передачу устройств через центр Интернета вещей, а также использовали прокси-серверы для туннелирования трафика SSH.In this quickstart, you've set up an IoT hub, registered a device, deployed a device- and a service-local proxy program to establish a device stream through IoT Hub, and used the proxies to tunnel SSH traffic.

Дополнительные сведения о потоках устройств см. в следующей статье:To learn more about device streams, see:

IoT Hub Device Streams (preview) (Потоки устройств (предварительная версия))Device streams overview