Подключение к UNO Q через Secure Shell (SSH)

Узнайте, как получить доступ к оболочке UNO Q через SSH.

Arduino UNO Q можно программировать через Arduino App Lab — настольное приложение, поддерживающее редактирование кода и запуск приложений (Apps) на плате без каких-либо внешних инструментов.

Микропроцессор платы (работающий под управлением Debian OS) также можно использовать через Secure Shell (SSH) — метод, позволяющий удалённо подключаться к плате через локальную сеть. Это позволяет, помимо прочего:

  • Получить доступ к оболочке платы и выполнять операции на плате удалённо.

  • Передавать файлы с локального компьютера на плату удалённо (с помощью SCP).

Плата UNO Q поставляется с предустановленным Arduino App Lab, который основан на инструменте arduino-app-cli*. Это позволяет, помимо прочего, запускать приложения через командную строку, вместо использования настольного приложения.

* Подробнее об arduino-app-cli читайте в руководстве Arduino App CLI.

Требования

Требования к оборудованию

  • Arduino UNO Q

  • Блок питания 5 В постоянного тока, 3 А (например, зарядное устройство для телефона или USB-порт компьютера)

Требования к программному обеспечению

  • Завершена первоначальная настройка платы*

  • SSH-клиент, установленный на компьютере (macOS, Windows 10+, Ubuntu имеют встроенные SSH-клиенты)

  • Доступ к локальной сети Wi-Fi (компьютер и плата должны быть в одной сети)

Важно

Во время первоначальной настройки вводятся учётные данные Wi-Fi, и плата автоматически включает SSH. Без её выполнения невозможно получить доступ к плате по SSH, если не активировать его вручную. Это также можно активировать, подключившись к плате через adb и выполнив в оболочке платы команду:

arduino-app-cli system network-mode enable

Подробнее см. в документации Arduino App CLI.

Установка SSH (локальный компьютер)

SSH — это сетевой протокол, а не инструмент сам по себе. Существует множество различных SSH-инструментов на выбор, и большинство операционных систем имеют встроенный инструмент. В этом разделе мы рассмотрим, как настроить его в некоторых распространённых операционных системах (macOS, Windows, Ubuntu).

macOS

macOS имеет встроенный инструмент ssh на основе OpenSSH, и он должен работать сразу из коробки. Проверьте, установлен ли инструмент на вашем компьютере, выполнив в терминале следующую команду:

ssh -V

Вы должны увидеть что-то вроде:

OpenSSH_9.9p2, LibreSSL 3.3.6

Это означает, что всё работает правильно.

Совет

Если вы используете устаревшую/пользовательскую систему, в которой по какой-то причине нет SSH, вы можете установить OpenSSH и LibreSSL вручную, например, через Brew.

Windows

Более поздние версии Windows (10+) также включают SSH-клиенты, и установка дополнительных инструментов не требуется. Чтобы убедиться, что инструменты установлены, откройте терминал на компьютере с Windows и введите:

ssh -V

Команда должна вернуть что-то вроде:

OpenSSH_for_Windows_x.x, LibreSSL 3.x.x

Это означает, что всё работает правильно.

Совет

Для более старых компьютеров Windows используйте менеджер пакетов, например Chocolatey, для установки OpenSSH / LibreSSL.

Linux (Ubuntu)

Многие ОС Linux включают SSH-клиенты, и установка дополнительных инструментов не требуется. Чтобы убедиться, что инструменты установлены, откройте терминал на вашем компьютере Ubuntu и введите:

ssh -V

Команда должна вернуть что-то вроде:

OpenSSH_x.x Ubuntu-3ubuntu.x, OpenSSL x.x.x

Это означает, что всё работает правильно.

Совет

Если вы используете устаревшую/пользовательскую систему, в которой по какой-то причине нет SSH, вы можете установить OpenSSH и LibreSSL вручную, выполнив:

sudo apt install openssh-client openssh-server libressl-dev

Подключение через SSH

Для подключения к плате UNO Q через SSH нам нужно знать только имя платы и пароль. Они устанавливаются во время первоначальной настройки.

  1. Откройте терминал.

  2. Выполните следующую команду:

    ssh arduino@<boardname>.local  # замените <boardname> на имя вашей платы
    
  3. Введите yes, когда будет предложено подключиться.

  4. Введите пароль платы.

После ввода пароля вы попадёте в оболочку платы и сможете выполнять операции!

Ниже показано, как это должно выглядеть после успешного доступа к оболочке платы.

Подтверждение в macOS

Доступ по SSH в macOS

Проблемы с mDNS в macOS

Если подключение не удаётся со следующей ошибкой:

ssh: connect to host <boardname>.local port 22: Connection refused

Это может быть проблема с mDNS в вашей локальной сети. Чтобы обойти это, есть несколько альтернатив:

Подключение напрямую по IP-адресу: IP-адрес платы можно узнать через:

  • Arduino IDE 2 (необходимо установить ядро Zephyr)

  • Arduino CLI, выполнив команду:

    arduino-cli board list
    
  • Выполнив hostname -I в оболочке платы. Вы можете получить доступ к плате через adb shell (инструкции) или используя плату в режиме SBC.

Получив IP-адрес, вы сможете подключиться через SSH, используя:

ssh arduino@10.0.20.138

Предупреждение

Если вы ранее подключались к плате с тем же IP-адресом, но перепрошили плату, вам может потребоваться удалить старый ключ из ~/.ssh/known_hosts. Это можно сделать, отредактировав файл known_hosts или выполнив команду:

ssh-keygen -R <ip-адрес-платы>

Подтверждение в Windows

Доступ по SSH в Windows

Подтверждение в Linux (Ubuntu)

Доступ по SSH в Linux (Ubuntu)

Arduino App CLI

arduino-app-cli можно использовать для запуска и остановки приложений на плате из терминала. При доступе к плате через SSH вы можете выполнять команды, такие как:

arduino-app-cli app start <app>

Более подробную информацию об инструменте arduino-app-cli можно найти в руководстве Arduino App CLI.

Передача файлов

Для передачи файлов с вашего компьютера на плату используйте инструмент scp из терминала вашего компьютера (не внутри SSH-сессии на плате). Этот инструмент можно использовать для отправки (push) или получения (pull) файлов и папок на плату и с платы.

Это делается путём указания локального пути на вашем компьютере (например, /User/documents/file.xx) и пути на плате (например, /home/arduino/).

Отправка файлов (Push)

Чтобы отправить файл, используйте команду ниже:

scp test-transfer.txt arduino@<boardname>.local:/home/arduino/

Эта команда перенесёт файл test-transfer.txt из каталога, в котором вы выполняете команду, на плату.

Получение файлов (Pull)

Чтобы получить файл, используйте команду ниже:

scp arduino@<boardname>.local:/home/arduino/test-transfer.txt ./

Эта команда загрузит файл в каталог, из которого вы выполняете команду. ./ можно заменить, указав путь (например, /User/documents/).

Отправка/получение папок (Push/Pull)

Чтобы отправить папку, используйте флаг -rp для рекурсивного копирования каталогов и сохранения времени/разрешений:

scp -rp "my-folder" arduino@<board-name>.local:/home/arduino/ArduinoApps/

Чтобы получить папку с платы в текущий каталог:

scp -rp arduino@<board-name>.local:/home/arduino/ArduinoApps/my-folder ./

Устранение неполадок

Если SSH-подключение не удаётся, вот несколько распространённых вещей, которые стоит проверить:

  • Была ли завершена первоначальная настройка? Если нет, следуйте инструкциям здесь. Первоначальная настройка включит SSH на плате, что необходимо для подключения.

  • Если SSH-подключение зависает, несмотря на то что первоначальная настройка была завершена, это может быть проблема локальной сети. Убедитесь, что плата подключена к той же сети, что и ваш компьютер.

Проблемы с mDNS

Некоторые сети могут блокировать использование mDNS, который позволяет нам использовать «дружественное» имя (arduino@<boardname>.local) вместо фактического IP-адреса платы. Есть два способа обойти это:

  1. Вместо использования arduino@<boardname>.local используйте IP-адрес платы напрямую. IP-адрес можно получить, запустив плату в режиме SBC и набрав в терминале:

    hostname -I
    

    Эта команда покажет IP-адрес вашей платы.

  2. (продвинутый) Отредактируйте файл /etc/hosts на вашем локальном компьютере, выполнив:

    sudo nano /etc/hosts
    

    В конце файла добавьте:

    <ip-адрес-платы> <boardname>.local
    

    Это позволит вам подключаться, используя:

    ssh arduino@<boardname>.local