
最近在添加电脑到ha中时按照网上的教程遇到很多坑,我不想装第三方软件和相关环境,所以参考了很多文章,发现到处报错,今天看到ha官方博客上一篇文章终于成功远程关机了,我把自己的方法分享下。
注:以下教程需要主板、网卡、系统支持网络唤醒并打开相关功能(WOL)且HA版本为OS或Supervised 2023.9及以上版本(我是这个版本),部分流程网上有很多相关文章所以我直接放链接(部分链接中文章中有明显错误本文已标注)越看越拉跨我懒得引用了,本文配合百度和GPT看吧
wol唤醒pc参考:https://www.jianshu.com/p/e137cd38fcc9
ha官方博客参考链接:https://community.home-assistant.io/t/remotely-shutting-down-a-windows-10-pc-with-ssh/91715
网络唤醒教程蛮多的这就不再赘述了,主要讲一下控制关机的方法
1.确保windows安装可选功能openssh,最新win11直接设置中搜索安装


2.WIN+R输入services.msc进入服务找到OpenSSH SSH Server并启动,启动类型改为自动;

最好还要检查一下防火墙配置:开始菜单搜索 ”控制面板“ 控制面板——Windows Defender 防火墙——允许的应用或功能通过windows defender 防火墙。

找到OpenSSH Server,把后面的勾打上
3.到这里正常的话应该可用linux主机连接windows了,可以先测试一下
连接到linux执行 :ssh 你电脑的用户名@电脑ip
例:ssh adm@192.168.2.4

一切正常的话会显示跟启动命令行一样的提示

到这步正常的话就连上了(一般情况不要改C:\programData\ssh 中的config);
ps:如果执行ssh user@ip连接命令, 显示No route to host 表示OpenSSH Server并未启动;
ps:如用微软账户登录,账户名称为“C:\用户” 目录下你登录的那个名称文件夹名称,密码为一般微软账号的密码。必须用管理员账户和密码用于ssh不然权限不够
4.生成密钥对:ssh登录homeassistant的宿主机,用docker ps命令查看homeassistant的容器id(注意看参数里面有ssh路径的容器);
(HA中安装了加载项命令行Terminal也可以直接在里面生成,但是不太好用而且没法复制)

进入容器:docker exec -it 容器ID bash
进入容器后可以用ls命令查看一下是不是HA 的config目录,不是的话就不是这个容器,换一个进去看,反正就这几个容器;
进入root目录 cd /root
执行:ssh-keygen -t rsa -b 4096
会有提示 输入密码 直接全部回车
生成好了会默认在/root/.ssh/目录下
密钥对默认会保存在 /root/.ssh/id_rsa(私钥)和 /root/.ssh/id_rsa.pub(公钥)
用cp命令把id_rsa和id_rsa.pub 复制到/config/.ssh/id_rsa和/config/.ssh/id_rsa.pub
(因为加载项中的文件浏览器无法复制root文件夹下的隐藏文件)
用cat命令查看id_rsa.pub,复制公钥
或者直接在filebrowser中打开/config/.shh/ 复制出来
这几个命令怎么用直接百度GPT我懒得写了
建一个名称为 administrators_authorized_keys的文件 记事本打开,把刚刚的公钥复制进去;把这个文件移动到C:\ProgramData\ssh\ 下面,会提示需要管理员权限允许就行
参考官方文档:https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement
5.进入刚刚生成密钥对的容器,测试ssh username@ip ,
exit 退出,再进正常情况就不需要密码了;
如还需要密码,大概率是私钥和公钥有出错导致,请检查公钥和私钥;
6.在configuration.yaml中添
switch: - platform: wake_on_lan name: "PC1" # 定义HA中实体的名称,可任意命名 mac: "00-00-00-00-00-00" # 主机(电脑)的MAC地址 host: "192.168.1.5" # 主机(电脑)地址,可省略 broadcast_address: "192.168.68.255" # 广播地址.不可省略.此处假设路由器地址为192.168.1.1,如为其他网段需要修改 broadcast_port: 9 # 指定wol端口,可省略 turn_off: service: shell_command.turn_off_connect shell_command: turn_off_connect: 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /config/.ssh/id_rsa 用户名@电脑ip shutdown /s /t 60 /c "你的电脑将在60秒后关机"'

这里注意格式和空格,保存后在HA开发者工具检查配置,然后重启。
测试开关看是否能成功发送关机命令。
最后中止关机操作命令行输入shutdown -a就行了 ;
还可以:
