HA-配置文件.md 2.7 KB


notion-id: 291ca4d7-cb7b-80bf-ae49-cedfc7aca1

HA-configuration.yaml

# 刷新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_rsaauthorized_keys
Host key verification failed 第一次连接 host key 未确认 手动连接一次输入 yes 或 ssh-keyscan 添加 host key

使用configuration.yaml配置command_line非交互式导致无法获取对方的**host key**** 需要忽视**

完整指令示例

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 中调用。