Home Assistant中通过command_line调用SSH遇到的问题

之前一直通过Docker版安装的Home Assistant来自动化控制一台win和mac开关机,后来发生了莫名奇妙的问题,连接显示器的两个智能插座自动开启后几十秒会自动关闭,排查后感觉是Home Assistant的问题,就换到了Home Assistant OS版本。
但同样用在之前的configuration.yaml配置命令死活不行:
主要是控制电脑开关的这段:

switch:
  - platform: command_line
    switches:
      mac_sleep:
        friendly_name: "Mac"
        command_on: "ssh -o 'StrictHostKeyChecking=no' [email protected] 'caffeinate -u -t 1'"
        command_off: "ssh -o 'StrictHostKeyChecking=no' [email protected] pmset sleepnow"
        command_state: "/bin/bash -c 'nmap -sn 192.168.1.4 | grep \"Host is up\" | wc -l'"
        value_template: '{{ value | int == 1 }}'
        icon_template: mdi:apple
  - platform: command_line
    switches:
      my_pc:
        friendly_name: "Win"
        command_on: "/bin/bash -c 'ether-wake -b -i enp2s1 2c:ab:ab:ab:67:d0'"
        command_off: "ssh -o 'StrictHostKeyChecking=no' [email protected] shutdown -s -t 0"
        command_state: "/bin/bash -c 'nmap -sn 192.168.1.2 | grep \"Host is up\" | wc -l'"
        value_template: '{{ value | int == 1 }}'
        icon_template: mdi:microsoft-windows

SSH已经做好了免验证,所以可以免密码直接连接,经过测试也是能正常登录的。
在Home Assistant OS命令行里也能正常关机唤醒,这就很奇怪了,后来看了下日志都是提示SSH命令没能成功执行的。通过网上查询后知道,原来ssh生成的默认证书id_rsa是放在root/.ssh/目录下的,但在Home Assistant OS自动化中执行SSH命令时并不是root权限,所以也无法访问到root/.ssh/目录也就没办法获得默认的证书id_rsa了,导致也就无法免密登录了。
所以解决办法就是复制一份证书id_rsa到可以访问的地方:

cp /root/.ssh/id_rsa /config/.ssh/

然后在SSH命令添加-i参数指定证书位置,就OK了。

ssh -i /config/.ssh/id_rsa -o 'StrictHostKeyChecking=no' [email protected] pmset sleepnow

多提一句,为什么Mac没用关机后唤醒,因为发现我的M1不支持关机唤醒,所以只能求其次休眠唤醒了。如果有大佬知道怎么能让M1关机也能唤醒,请指导下我谢谢。

你可能感兴趣的:(ssh,运维,home,assistant)