前提
- Home Assistant并非运行在群晖上,本例为HA运行在单独的树莓派上。
- 群晖开启了SSH,端口不限,默认22就可以。
- 远程开机的实现方式是wake on lan,需要群晖主板支持。如果是黑裙,可以特别注意一下。
- 远程关机是通过ssh登录执行poweroff命令,由于群晖本身限制和poweroff命令权限,需要使用root账户执行。
远程开机
请通过以下方式确认并开启wake on lan功能。
BIOS 设置
开机进入BIOS将WOL的Disabled改为Enabled 。
如果BIOS开启了ErP Ready,需要改为Disabled关闭。
群晖DSM设置
进入群晖的管理界面,控制面板-硬件和电源,开启局域网唤醒。
至此群晖DSM的wake on lan远程开机就设置完成了。可以通过DSM的固定IP或MAC地址,通过路由器在局域网内唤醒测试。
以下是Home Assistant配置文件中的唤醒部分,请将mac和ip更换为你的:
switch: # NAS的WOL - platform: wake_on_lan name: NAS mac: "00:11:32:A9:D6:00" host: "192.168.1.101"
远程关闭
以下内容更新于:2020-03-24 16:14:17
如果你运行的是hass.io,请先跳转到文章底部查看说明。
主要参考文章:https://blog.aaronlenoir.com/2018/05/06/ssh-into-synology-nas-with-ssh-key/
原理是通过树莓派以root身份登录到群晖DSM,执行poweroff命令。但由于是系统执行,所以无法保存或输入密码,因此需要使用ssh key登录。
首先通过ssh连接树莓派,并键入sudo -i
,切换为root用户。
使用ssh-keygen
生成ssh密钥,记录pub文件的地址,并使用vi命令打开,拷贝其中内容备用。
然后通过ssh连接群晖DSM,并键入sudo -i
,切换为root用户。
修改ssh文件,允许直接使用root用户登录群晖DSM。
sudo vim /etc/ssh/sshd_config
在文件开头增加如下内容并保存。
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PermitRootLogin yes
创建相关目录和文件并设置权限
mkdir /root/.ssh touch /root/.ssh/authorized_keys chmod 755 /root
修改root的密码,建议和admin一致。
synouser --setpw root xxx #xxx为你admin的密码
将刚才备份的pub文件(公钥)内容,复制到上面新创建的authorized_keys中。
你可以直接文本复制粘贴,或在树莓派执行scp命令
# cat ~/.ssh/id_rsa.pub | ssh root@群晖的地址 'cat >> .ssh/authorized_keys' cat ~/.ssh/id_rsa.pub | ssh root@192.168.1.101 'cat >> .ssh/authorized_keys'
至此,在树莓派执行ssh root@你DSM的ip
,就可以免密码登录到DSM了。
以下为完整Home Assistant配置:
switch: # NAS的WOL - platform: wake_on_lan name: NAS mac: "00:11:32:A9:D6:00" host: "192.168.1.101" turn_off: service: shell_command.turn_off_nas # 命令 shell_command: turn_off_nas: "ssh root@192.168.1.101 poweroff 2> /home/homeassistant/.homeassistant/command.log &"
Hass.io的特殊设置
从hassbian切换到hass.io后,发现上面的设置方法失效了。
症状是在SSH中登录是不需要密码的,但通过Home Assistant执行就会报认证错误。
怀疑是密钥文件出了问题,这里不得不说下,hass.io的本质其实是运行docker,这就造成了环境的隔离。实话说,我自己也比较乱,但找到了解决方法。
整体方法还是如上,但通过ssh连接到hass.io后(不是那个端口是22222的host os),创建文件夹
$ mkdir /config/.ssh
生成密钥,注意不能生成在默认文件夹
$ ssh-keygen -t rsa
储存位置输入刚才新建的目录
/config/.ssh/id_rsa
再将生成的密钥添加到群晖DSM,这里需要注意路径有调整。
# cat /config/.ssh/id_rsa.pub | ssh root@群晖的地址 'cat >> .ssh/authorized_keys' cat /config/.ssh/id_rsa.pub | ssh root@192.168.1.101 'cat >> .ssh/authorized_keys'
配置文件中的shell_command改为:
shell_command: turn_off_nas: "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /config/.ssh/id_rsa root@192.168.1.101 poweroff 2> /config/command.log &"