После переноса home assistant в docker возникла проблема выполнения команд на хосте, в частности разные сенсоры на платформе command_line не работают. Нашел здесь статью как обойти это препятствие, но данный метод работает только до перезагрузки машины или обновления системы. Так происходит потому что docker при старте контейнера создает систему заново и папка в которой находятся ключи оказывается пустой. Чтобы этого не происходило нужно поместить ключи в место которое позволит пережить перезагрузку. Наилучший кандидат - папка /config.
Идем в Portainer и открываем консоль homeassistant
Убеждаемся что мы находимся в нужном месте и создаем папку для ключей
bash-5.0# pwd /config bash-5.0# mkdir.ssh
Генерируем ключи.
На первый вопрос указываем путь в новой папке /config/.ssh/id_rsa, остальные можно пропустить просто нажав на enter.
bash-5.0# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /config/.ssh/id_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /config/.ssh/id_rsa Your public key has been saved in /config/.ssh/id_rsa.pub The key fingerprint is: SHA256:8neI8Pc6 /sMPbE/ sv5LU6RTE9lHdBeUInTOgSpQF0 root@raspberrypi The key's randomart image is: ---[RSA 3072]---- |....Eo.* B| |... = | |... = o| |. = = | | o S *.| | =... | | o = | | o.o o o| | o= =**B| ----[SHA256]-----
Копируем ключи на хост. Соответственно указываем своего пользователя и ip хоста
bash-5.0# ssh-copy-id -i /config/.ssh/id_rsa.pub pi@192.168.1.168 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/config/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed expr: warning: '^ERROR: ': using '^' as the first character of a basic regular expression is not portable; it is ignored /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys pi@192.168.1.168's password: Number of key(s) added: 1
Теперь нужно выполнить любую команду на хосте чтобы создался файл /root/.ssh/known_hosts.
bash-5.0# ssh -i /config/.ssh/id_rsa.pub pi@192.168.1.168 ls The authenticity of host '192.168.1.168 (192.168.1.168)' can't be established. ECDSA key fingerprint is SHA256:esNSH5VhKGbxyB61fmGgoHFv1f7L2S2l57NRPYDbAP8. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.1.168' (ECDSA) to the list of known hosts.
Копируем этот файл в новую папку.
bash-5.0# cp /root/.ssh/known_hosts /config/.ssh/known_hosts
Теперь создадим файл конфигурации
bash-5.0# touch /config/.ssh/conf
И добавим в него следующе содержимое:
Host hass HostName 192.168.1.168 User pi IdentityFile /config/.ssh/id_rsa UserKnownHostsFile /config/.ssh/known_hosts
Теперь можно из docker выполнять команды вида ssh -F /config/.ssh/conf hass cmd без ввода пароля
Например узнать температуру процессора на raspberry pi:
bash-5.0# ssh -F /config/.ssh/conf hass cat /sys/class/thermal/thermal_zone0/temp 46738
В Home assistant это будет выглядеть так:
- platform: command_line name: pi_temperature scan_interval: 300 command: ssh -F /config/.ssh/conf hass 'cat /sys/class/thermal/thermal_zone0/temp' value_template: '{{ value | multiply(0.001) | round(2) }}' unit_of_measurement: '°C'
pip install pytuya
можно это как то реализовать?
Следуя инструкции сталкиваюсь с проблемой, после генерации ключа система ругается, что ключ "слишком открытый"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/config/.ssh/id_rsa.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/config/.ssh/id_rsa.pub": bad permissions
меняю: chmod 700 /config/.ssh/id_rsa.pub
получаю: bash-5.0# ssh -i /config/.ssh/id_rsa.pub pi@192.168.0.12 ls
Load key "/config/.ssh/id_rsa.pub": invalid format
Как у Вас установлена система?
chmod выполняете из консоли контейнера или на хосте?
Supervised, в консоле контейнера все делаю
попробуйте chmod 400
без изменений, invalid format
upd: ssh -i /config/.ssh/id_rsa pi@192.168.0.12 ls - прошло, без ".pub"
Вместо рекомендованной в инструкции команды "
ssh -i /config/.ssh/id_rsa.pub pi@192.168.1.168 ls " выполните то, что пишет на экране после выполнения команда "
ssh-copy-id "
: "ssh 'pi@192.168.1.168'" (со своими юзером и IP) а потом exit.
Все сработает.
Подскажите пожалуйста, после выполнения команды:
ssh-copy-id -i /config/.ssh/id_rsa.pub pi@192.168.1.250
выдает ошибку:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/config/.ssh/id_rsa.pub"
mktemp: (null): No such file or directory
/usr/bin/ssh-copy-id: ERROR: failed to create required temporary directory under ~/.ssh
Что можно сделать?