Hassio下使用SSH远程开关Linux/Mac

Hassio 有 RPC 插件可以很方便的关闭 Windows 主机,但是在配置 Unix 系统的关闭时遇到较多坑。

1
Error running command:"", return code: 255

看以前的教程会遇到上述错误,以下教程解决了这个问题。

一、配置 Unix 端(被控主机)无密码运行 sudo shutdown

1.修改sudoers文件

1)首先,找到shutdown的路径

1
$ which shutdown

通常位于/sbin/shutdown

2)打开visudo

1
$ sudo visudo

3)在文件底部填下如下内容

1
USERNAME ALL=NOPASSWD: PATH_TO_EXECUTABLE
  • 替换USERNAME为实际使用的账户(可使用whoami查询)
  • 替换PATH_TO_EXECUTABLE为第一步中获取到的路径

一个例子

1
garry ALL=NOPASSWD: /sbin/shutdown

2.执行命令

由于shutdown仍然是特权命令,因此仍然需要在命令开头加上sudo。

但是,指定用户执行该命令已不需要输入密码。

1
$ sudo shutdown -r now

*.对于喜欢冒险的人

可将以下内容放在sudoers文件的底部:

1
USERNAME ALL=NOPASSWD: ALL

上面的代码可以取消所有命令对于 sudo 的密码需求,请谨慎使用。

二、配置 SSH 无密码登陆

1. Hassio 主机生成用于免密登陆的密钥

HassioAdd-on Store中安装SSH server。注意,若 Hassio 是安装在 Ubuntu 系统中,不能使用 Ubuntu 的 SSH,必须连接到容器内部,启动 SSH server时请注意端口冲突问题。

密钥不能生成在默认目录,新建文件夹

1
$ mkdir /config/.ssh

创建 key

1
$ ssh-keygen -t rsa

储存位置输入

1
/config/.ssh/id_rsa

不要输入密码

2.被控端创建存储密钥的文件夹

若该文件夹已经存在,请跳到下一步

1
$ mkdir -p .ssh

3.将密钥传输到被控端

Hassio中执行以下命令

1
$ cat /config/.ssh/id_rsa | ssh UNIX_USERNAME@UNIX_IP 'cat >> .ssh/authorized_keys'

4.现在可以在Hassio免密登录Unix

1
$ ssh -i /config/.ssh/id_rsa UNIX_USERNAME@UNIX_IP

三、配置 Homeassistant

configuration.yaml中添加如下配置,网络唤醒部分请另行配置。

1
2
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
1
2
3
4
5
6
7
switch:
- platform: wake_on_lan
mac_address: "UNIX_MAC"
host: UNIX_IP
name: "unix"
turn_off:
service: shell_command.unix_off

四、参考

1.How to run privileged (sudo) commands without the password
2.SSH login without password
3.Hass.io shell_command error
听说,打赏我的人都找到了真爱。