『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 2232|回复: 2

[进阶教程] HA通过AD域账户登录

[复制链接]

2

主题

10

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
金钱
258
HASS币
0
发表于 2021-12-22 11:15:38 | 显示全部楼层 |阅读模式
本帖最后由 p00220514 于 2021-12-25 23:23 编辑

家里WIN电脑、Linux服务器、WIFI、VPN、ROS管理登录、小服务器IPMI、PVE都是通过AD域账户登录,但是HA原生不支持LDAP,所以研究出了以下方案。

我的安装方式,通过PVE装debian vm,LXC的debian没有实验成功,vm这种方式等同于debian物理机直接安装:官网方案:https://www.home-assistant.io/more-info/unsupported/os ,然后导航到:GitHub - home-assistant/supervised-installer: Installer for a generic Linux system
论坛也有方法:2021年最新N1安装HA Supervised教程(官方支持版本) - 『HomeAssistant』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz! (hassbian.com)

装好之后,建立好拥有者账号,然后add里面安装Terminal & SSH,主要是方便core里面操作,其他ssh什么的也可以。
以下是Terminal & SSH web命令界面操作core shell免密登录debian:

####---------------
cd ~/.ssh
ssh-keygen -t rsa
#需要默认回车确认几次ssh-copy-id -o StrictHostKeyChecking=no root@<装ha的debian主机IP,域名也可以,只要能ping通>
#上面一条过后输入debian主机root密码
#然后下面几条,因为web端读不了/root/.ssh下的密钥,所以放/config下面
mkdir /config/.ssh
chmod 700 /config/.ssh
cp ~/.ssh/* /config/.ssh

####---------------

#现在可以用ssh <装ha的debian主机IP,域名也可以,只要能ping通>测试是否免密登录debian主机,登录成功的话,才可以进行下一步。(用ssh免密的原因是因为core里面curl没有ldap,而且安装ldap过后更新又会失效,只有通过ssh到debian主机curl的ldap来连接ad域,这一步参考了:HASSOS LDAP Command Line Authentication over SSH - Installation - Home Assistant Community (home-assistant.io)

接下来附件3个文件里面只需把ldap-auth.cfg配置文件改成自己的:
SERVER="ldap://<ad域服务器IP地址,可以用域名>:389"

DOMAIN="<域名称>"

SCOPE="sub"

GROUP="<要登录组的DN全名,域控组属性里面复制>"#这个是你需要哪些组的用户可以登录ha,我自己专门建立了一个用户组,这个组成员才能登录,不建立的话可以用DOMAIN USERS的

OU="OU=<你的用户所在第最高一级组织单位>"#搜索域范围,不加这个,范围太广有可能会超时报错

ATTRS="sAMAccountName"#这个为了以后给实体ID传参,默认不用改

然后脚本和更改过后的配置文件复制到core里面的/config/,也可以复制进debian里/usr/share/hassio/homeassistant/,都是同样地方不同体现方式,这个参考的:GitHub - bob1de/ldap-auth-sh: A simple but configurable shell script to authenticate against LDAP
如果不方便传送文件,也可以用add里面的WEB文本编辑器,在/config/下面添加这3个文件名,然后分别复制里面内容进去。

然后进Terminal & SSH web命令界面给脚本改权限:

cd /config/
chmod 744 ldap-auth.sh ssh-auth.sh

#然后更改configuration.yaml
nano configuration.yaml

#添加以下内容,默认command_line登录,本地登录要在登录界面手动下拉选择

homeassistant:
  auth_providers:
    - type: command_line
      command: /config/ssh-auth.sh
      # Optionally, define a list of arguments to pass to the command.
      #args: ["--first", "--second"]
      # Uncomment to enable parsing of meta variables (see below).
      meta: true
    - type: homeassistant


#然后重启服务测试是否可以用域账户登录,域账户不需要加域名
#如果想要本地登录,登录界面下面要选一下本地登录。

以上配置结束,不过这个方法因为command_line传参meta: true只能传name,该用户是不是管理员,看了下源代码,没有类似 isadmin=true 这种参数,暂时只能默认管理员,然后进去用户手动更改。

如果用的其他安装方式,debian主机可以改成另外支持curl有ldap的主机,比如PVE,需要把ldap-auth.sh,ldap-auth.cfg放在另外主机上,放ha里面的ssh-auth.sh参数需要改一下绝对路径。

下一步准备接着写一个AD账户登录后configuration.yaml内添加person实体方便ha内的一些功能实现,这个等有空再研究以下。


ssh-auth.zip

4.16 KB, 下载次数: 2

评分

参与人数 1金钱 +5 收起 理由
zelotoj + 5 墙都不扶,就服楼主!

查看全部评分

回复

使用道具 举报

0

主题

67

帖子

887

积分

高级会员

Rank: 4

积分
887
金钱
820
HASS币
0
发表于 2021-12-22 12:16:25 | 显示全部楼层
集中化管理正是需要的...感谢楼主无私奉献...家里正准备部署LDAP就看到这篇文章...太感谢了
回复

使用道具 举报

2

主题

10

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
金钱
258
HASS币
0
 楼主| 发表于 2021-12-22 12:43:26 | 显示全部楼层
zelotoj 发表于 2021-12-22 12:16
集中化管理正是需要的...感谢楼主无私奉献...家里正准备部署LDAP就看到这篇文章...太感谢了 ...

如果是linux的ldap的话还要做一些更改,贴的链接里面就是用的linux ldap我改成了ad域。
登录的东西太多,账号密码太多,太麻烦了,集中管理多方便,很多还可以相互联动。
其实这种方法更多的还是公司在使用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 23:37 , Processed in 0.108591 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表