Home Assistant控制群晖DSM远程开机和关闭

前提

  1. Home Assistant并非运行在群晖上,本例为HA运行在单独的树莓派上。
  2. 群晖开启了SSH,端口不限,默认22就可以。
  3. 远程开机的实现方式是wake on lan,需要群晖主板支持。如果是黑裙,可以特别注意一下。
  4. 远程关机是通过ssh登录执行poweroff命令,由于群晖本身限制和poweroff命令权限,需要使用root账户执行。

远程开机

请通过以下方式确认并开启wake on lan功能。

BIOS 设置

开机进入BIOS将WOL的Disabled改为Enabled 。

Home Assistant控制群晖DSM远程开机和关闭

如果BIOS开启了ErP Ready,需要改为Disabled关闭。

群晖DSM设置

进入群晖的管理界面,控制面板-硬件和电源,开启局域网唤醒。

Home Assistant控制群晖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 &"

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注