Метод обхода сетевой изоляции контейнера HASS.io в Docker

06 октября 2019, 16:34

В качестве предисловия хочу предупредить, что это моя первая статья. И написана она исключительно для экономии времени тех, кто будет топтаться по тем же граблям, что и я.

И хочу особо выделить тот момент, что метод не будет работать для счастливых обладателей Hass.io в качестве операционной системы. Нужен только образ Hass.io в Docker.

К тому же, я ещё не постиг дзена, как некоторые другие авторы сайта, поэтому уровень моей IT-подготовки далек от желаемого. Поэтому прошу снисходительно отнестись к экстравагантным методам реализации моего умного дома.

Недавно я решил добавить в свою пресную жизнь перчинки и перейти от Home assistant, установленого в качестве пакета в venv, к Hass.io, установленого в Docker. Благо материалов по этому поводу на сайте предостаточно.

Правда, после развертывания системы и восстановления файлов конфигурации от старой установки выяснилось, что Hass.io, хоть и подкупающе красочный,благодаря обилию плагинов, но ещё и очень параноидальный.

Он наотрез отказывался исполнять ssh запросы моих command_line сенсоров shell_command изнутри контейнера.

Опрос home-assistant и telegram комьюнити показал, что сетевая изоляция Hass.io - это один из аспектов сетевой безопасности, которые многие поддерживают (а может просто смирились). Немногие несогласные с этим поведением написали несколько статей по методам партизанской борьбы.

Одна из них более недоступна (но мне кажется, что это её копипаста).

Другая - напоминает записки на полях одного сумасшедшего ученого - другому (по крайней мере, для меня).

После вольного осмысления описанных в них методов, родилось рабочее решение, которое переживает перезапуск контейнера. Им я и спешу поделиться.

От монтирования чего-то в готовый контейнер мне, после нескольких попыток, пришлось отказаться (не получилось).

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

Ещё раз обращу внимание владельцев Hass.io как операционной системы, по ошибке дочитавших до этого места. Этот метод не для вас.  У вас просто нету "дружелюбной среды". Вам некуда прокидывать ключи.

Алгоритм

  • Узнаем ID необходимого нам контейнера с Home Assistant. Можно и через интерфейс Portainer, но он там какой-то слишком здоровый. Через run компактнее.

pi@raspberrypi:~ $ docker ps -a
1600x_image.png?1570184402

В моем случае - это b4a144826c5a.

  • Подключаемся к нужному контейнеру и с этого момента все действия по генерации ключей совершаем из него (обратите внимание на вид строки ввода команд).

pi@raspberrypi:~ $ docker exec -it b4a144826c5a  /bin/bash
1600x_image.png?1570184402
  • Создаем ключи аутентификации.

bash-5.0# ssh-keygen
  • И записываем их на локальную машину (где крутится Docker).
bash-5.0# ssh-copy-id -i ~/.ssh/id_rsa.pub UserName@RemoteServer

Где UserName - ваш пользователь на локальной машине, а RemoteServer - адрес машины в локальной сети.

В моем случае, это выглядит вот так.

bash-5.0# ssh-copy-id -i ~/.ssh/id_rsa.pub pi@192.168.2.10
  • После этих действий у вас уже должна появится возможность ходить из докера на локальную машину без пароля.
bash-5.0# ssh pi@192.168.2.10
Linux raspberrypi 4.19.75-v7+ #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l
The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.Last login: Thu Oct  3 15:23:00 2019 from 192.168.2.10
pi@raspberrypi:~ $
  • Если все получилось - то с этого момента все ваши сенсоры и команды по ssh изнутри Hass.io будут нормально работать, после добавления к ним такой обвязки.

ssh UserName@RemoteServer 'команда'

В моем случае, вот так (определение степени загаженности торрент-диска на роутере).
Пример не самый удачный (можно ключ сразу на 192.168.1.1 кинуть), но самый короткий из моего арсенала.

- platform: command_line #Torrent disk full
  name: Torrent disk space
  scan_interval: 2400
  command: ssh pi@192.168.2.10 'ssh pi@192.168.1.1 -p 222 df -h | grep /dev/sdb1 | cut -d G -f 4 | cut -c 3-4'
  unit_of_measurement: "%"

Буду рад, если удалось сэкономить кому-то время и нервы.

И конструктивной критике.


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Николай Васильчук (anonym.tsk)

    А что, --network host как-то плохо работает?

    • Дмитрий Арсенков (Crickus)

      Разве --network=host не для того, чтобы стек сети контейнера в режим хоста перевести? Или я не правильно понял вопрос?

      • Николай Васильчук (anonym.tsk)

        Это для того, чтобы контейнер использовал сеть хоста. Не будет внутренней подсети и той самой "изоляции"

        • Дмитрий Арсенков (Crickus)

          А супервизор Хасса эту штуку не пофиксит после перезагрузки?

          Если честно - не пробовал, поскольку, когда искал решение, такого метода мне под руку не попалось. Вот и ушел на темную сторону силы :)

  2. Алексей Х (AlexxIT)
    Алексей Х (AlexxIT) 7 дней назад

    Если под дружелюбной средой вы понимаете ssh на хост машину, то в hassio он есть.

    • Дмитрий Арсенков (Crickus)

      Имеется ввиду не подключения по ssh, а возможность выполнения скриптов по ssh из Hass.io, а там затык из-за ввода пароля. А так да, ssh есть.

К списку статей

Похожие статьи

15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
24 августа 2018, 10:15
Краткий экскурс в настройку Home Assistant
11 мая 2019, 19:57
Как активировать русский язык в Google Assistant для Google Home
14 сентября 2018, 19:34
Изучаем автоматизации в Home Assistant