本帖最后由 549876099 于 2022-3-21 04:22 编辑
Hassio 有 RPC 插件可以很方便的关闭 Windows 主机,但是在配置 Unix 系统的关闭时遇到较多坑。
Error running command:"", return code: 255
看以前的教程会遇到上述错误,以下教程解决了这个问题。
一、配置 Unix 端(被控主机)无密码运行 sudo shutdown
1.修改sudoers文件
1)首先,找到shutdown的路径
$ which shutdown
通常位于/sbin/shutdown
2)打开visudo
$ sudo visudo
3)在文件底部填下如下内容
USERNAME ALL=NOPASSWD: PATH_TO_EXECUTABLE
- 替换
USERNAME 为实际使用的账户(可使用whoami 查询)
- 替换
PATH_TO_EXECUTABLE 为第一步中获取到的路径
一个例子
garry ALL=NOPASSWD: /sbin/shutdown
2.执行命令
由于shutdown 仍然是特权命令,因此仍然需要在命令开头加上sudo。
但是,指定用户执行该命令已不需要输入密码。
$ sudo shutdown -r now
*.对于喜欢冒险的人
可将以下内容放在sudoers 文件的底部:
USERNAME ALL=NOPASSWD: ALL
上面的代码可以取消所有命令对于 sudo 的密码需求,请谨慎使用。
二、配置 SSH 无密码登陆
1. Hassio 主机生成用于免密登陆的密钥
在Hassio 的Add-on Store 中安装SSH server 。注意,若 Hassio 是安装在 Ubuntu 系统中,不能使用 Ubuntu 的 SSH,必须连接到容器内部,启动 SSH server 时请注意端口冲突问题。
密钥不能生成在默认目录,新建文件夹
$ mkdir /config/.ssh
创建 key
$ ssh-keygen -t rsa
储存位置输入
/config/.ssh/id_rsa
不要输入密码
2.被控端创建存储密钥的文件夹
若该文件夹已经存在,请跳到下一步
$ mkdir -p .ssh
3.将密钥传输到被控端
在Hassio 中执行以下命令
$ cat /config/.ssh/id_rsa | ssh UNIX_USERNAME@UNIX_IP 'cat >> .ssh/authorized_keys'
4.现在可以在Hassio 免密登录Unix
$ ssh -i /config/.ssh/id_rsa UNIX_USERNAME@UNIX_IP
三、配置 Homeassistant
在configuration.yaml 中添加如下配置,网络唤醒部分请另行配置。
shell_command:
unix_off: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /config/.ssh/id_rsa UNIX_USERNAME@UNIX_IP sudo /sbin/shutdown now
switch:
- platform: wake_on_lan
mac_address: "UNIX_MAC"
host: UNIX_IP
name: "unix"
turn_off:
service: shell_command.unix_off
四、参考:
|