--- notion-id: 291ca4d7-cb7b-80bf-ae49-cedfc7aca19f --- [HA-configuration.yaml](HA-configuration.yaml.md) ```bash # 刷新PVE状态,一键开关机操作 command_line: - switch: name: "PVE服务器开关" unique_id: pve_server_power command_on: "wakeonlan 04:7c:16:57:db:47" command_off: "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /config/ssh/id_rsa root@10.10.10.50 'systemctl poweroff'" command_state: "ping -c 1 -W 1 10.10.10.50 > /dev/null 2>&1 && echo 0 || echo 1" value_template: "{{ value == '0' }}" icon: "mdi:server" scan_interval: 10 ``` | 错误信息 | 原因 | 解决方法 | | :-----------------------------: | :----------------: | :--------------------------------------: | | `Permission denied (publickey)` | 私钥不对或公钥没加到目标服务器 | 检查 `id_rsa` 与 `authorized_keys` | | `Host key verification failed` | 第一次连接 host key 未确认 | 手动连接一次输入 yes 或 `ssh-keyscan` 添加 host key | 使用configuration.yaml配置command_line非交互式导致无法获取对方的`**host key**`** 需要忽视** ### 完整指令示例 ```bash ssh -i /homeassistant/ssh/id_rsa \ -o UserKnownHostsFile=/homeassistant/ssh/known_hosts \ root@10.10.10.50 "systemctl poweroff" ``` --- ### 详细解释 1. `**ssh**` - 调用 SSH 客户端连接远程服务器。 2. `**i /homeassistant/ssh/id_rsa**` - 指定 **私钥文件**,用于 HA 身份认证。 - 对应的公钥必须已经添加到服务器 `root@10.10.10.50` 的 `~/.ssh/authorized_keys` 文件中。 - 这样就无需输入密码。 3. `**o UserKnownHostsFile=/homeassistant/ssh/known_hosts**` - 指定 SSH 用哪个 **known_hosts 文件** 来校验远程服务器的 host key。 - 这样 SSH 会确认你连接的服务器是可信的,避免 `Host key verification failed` 错误。 - 可以保证安全性,不用再用 `StrictHostKeyChecking=no` 跳过验证。 4. `**root@10.10.10.50**` - SSH 登录的目标用户和服务器 IP。 - 这里登录的是 PVE 服务器的 root 用户。 5. `**"systemctl poweroff"**` - 登录成功后在远程服务器执行的命令。 - 在这个例子里是关闭服务器(关机)。 - 可以替换成其他管理命令,例如重启 `systemctl reboot`。 --- ✅ **总结** - 私钥用于身份认证(你是谁)。 - known_hosts 用于服务器验证(服务器是不是你想要的那个)。 - 两者配合使用,可以实现 **安全、无密码、自动化的远程命令执行**,非常适合在 HA 的 `command_line` switch 中调用。