Использование Arduino в качестве контакта с миром для Linux Box в случае сбоя приложения

Я новичок в этом мире микроконтроллерных штучек, так что со мной все в порядке :)

Сначала я опишу сценарий. Скажем, у меня есть Linux-бокс для домашней автоматизации, встроенный в стену. Из соображений безопасности это единственный активный доступ к корпусу дисплея, прикрепленному к стене.

Другой доступ будет через сеть и ssh, но ssh отключен. К сожалению, веб-приложение иногда дает сбой, и ничего не происходит. В связи с этим мне приходится разбирать кое-что, чтобы добраться до коробки и оживить ее.

Моя идея: Я могу использовать датчик NFC или RFID и подключить его к Arduino. Можно ли заставить Arduino войти в систему Linux, запустить и отключить ssh?

Я не хочу использовать Arduino Yun. Достижимо ли это с помощью Arduino nano/Mega?

Если нет, то какую систему лучше всего выбрать для выполнения этой задачи?

Спасибо за терпение :)

, 👍0

Обсуждение

Какое оборудование представляет собой ящик Linux? Что-то похожее на Raspberry Pi? У него есть серийная консоль? RS-232 или логический уровень? Какое логическое напряжение?, @Edgar Bonet

У него нет rs232, но есть usb, поэтому можно было бы подключить преобразователь rs232 в usb., @Jan S

О, полноценный микро-ПК в действии., @Jan S

Почему RFID должен быть более безопасным, чем SSH? Если вы используете аутентификацию на основе ключей и разрешаете доступ только из локальной сети или даже только с определенных устройств, это должно быть достаточно безопасным. Или - если это только приложение, которое дает сбой - может быть, вы можете написать небольшую программу, которая проверяет, живо ли приложение. Я не вижу необходимости в дополнительном оборудовании, пока не произойдет сбой всего Linux, и в этом случае это может быть реальной проблемой безопасности., @chrisl

Нет никаких причин, по которым вы не могли бы запустить agetty на /dev/ttyUSB0 или /dev/ttyACM0 USB-интерфейса платы Arduino, а затем заставить Arduino отправить текст, необходимый для входа в систему, и использовать sudo или su, чтобы запустить команды для запуска или остановки ssh. Хотя выглядит очень запутанно. Проще всего, как говорит @chrisl, просто запустить SSH, но защитить его в локальной сети., @Majenko

Я знаю, что мой подход несколько ..причудливый. Но так и должно быть. Итак, Arduino может запускать команды Linux? ...ой. дай угадаю. Есть библиотека для этого?, @Jan S

Да, он называется HardwareSerial, вы используете его так: Serial.println("sudo reboot")., @Edgar Bonet

Спасибо за вашу помощь. :) Вы подтолкнули меня в правильном направлении. Теперь осталось «просто» прочитать документацию и принять решение, в каком направлении двигаться дальше., @Jan S

Если веб-приложение дает сбой, в идеале оно должно быть перезапущено. В systemd есть механизм для этого. Если веб-приложение зависает, это другое дело. У вас может быть отдельный мониторинг процесса. Тогда есть случай, когда Pi дает сбой/зависает. У Pi на самом деле есть аппаратный сторожевой таймер. Это программная проблема, которую можно решить программно. PS в крайнем случае вы можете выключить и снова включить Pi, чтобы он перезапустился., @Gerben


1 ответ


Лучший ответ:

1

Я объединим наши комментарии в ответ.

Вы слишком много думаете о безопасности. На мой взгляд, использование RFID для перезагрузки системы — это более серьезная нить безопасности, чем правильное использование ssh. Обычные чипы RFID подвержены спуфингу (копированию существующего чипа). Также злоумышленник может удалить модуль RFID для прямого доступа к линиям связи (в зависимости от того, сколько у вас будет доступного дополнительного оборудования). Также вы, конечно, можете использовать последовательный интерфейс Arduino для выполнения команд оболочки на вашем компьютере. Вам нужна программа на машине для чтения ввода и выполнения команд (Majenko упомянул для этого agetty). Но действительно ли это лучший способ? Использование Arduino здесь — очень аппаратный способ решения проблемы с программным обеспечением. Делать что-то таким образом слишком сложно, и есть варианты получше.

Вместо этого вам следует просто использовать ssh с аутентификацией на основе ключа (отключить аутентификацию по паролю). Вы можете ограничить работу демона ssh локальной сетью (хотя, если вы не настроили соответствующую переадресацию портов в своем маршрутизаторе, он в любом случае недоступен из Интернета), или, если вам действительно нужна дополнительная безопасность, одно конкретное устройство в вашей сети. С обычным ключом ssh (я думаю, что 2048 бит является стандартом) перебор не подходит для злоумышленников. Если вы сохраните свой закрытый ключ, шанс, что злоумышленник сможет его обойти, очень мал. Вы также можете сохранить закрытый ключ только на USB-накопителе, который вы используете только для перезагрузки машины. Также вы можете ограничить команды, которые может выполнять пользователь ssh, только сбросом (например, разрешить только перезагрузку).

В зависимости от ваших реальных потребностей в безопасности вы можете выбрать, как далеко вы хотите зайти. Лично я бы просто использовал ssh на основе ключей, ограниченный локальной сетью. Этого должно быть достаточно для обеспечения безопасности, а также это даст вам возможность более легкого доступа к машине, которая работает у вас дома.


Или, если вы действительно не хотите открывать ssh для машины, вы можете написать простую сторожевую программу, которая может работать на машине. Поскольку веб-приложение дает сбой, вы можете написать простую программу на Python (или на любом другом языке, который вам нравится), который регулярно загружает веб-приложение (как именно, во многом зависит от веб-приложения и точного типа сбоя - может быть простой запрос HTTP GET ), чтобы проверить, жив ли он. Если тест живости не пройден определенное количество раз (скажем, 3), он перезагрузит компьютер.

Этот метод не требует никакого доступа к машине, но вам придется разработать тест на живучесть. Написать программу тогда очень просто.


При всем при этом то, что приложение так часто дает сбой, — плохой знак. Вы не написали, что это за приложение и что именно не работает. Возможно, вы сможете решить эту проблему напрямую. Или разработчик приложения может, поэтому, возможно, поднимет вопрос на своей платформе (где размещен проект).

,

Вы резюмируете это довольно хорошо. Я знаю, что этот подход не лучший подход для домашней сети. Но это был просто сценарий, чтобы помочь мне прояснить, как и чего добиться. Я могу сказать вам, что он основан на глобальной сети, и приложение не так часто дает сбой. Он зависает максимум 1-2 раза в год, и подход ssh с сертификатом работает нормально. Мой сценарий описывает наихудший случай, которого до сих пор не случалось. Это всего лишь упреждающее действие, которое я предпринимаю для удобства и экономии времени/денег., @Jan S