04 — 客户端接入配置

4.1 客户端接入原理

客户端 (dev.thinkmeta.site)
    │
    │ ① ipa-client-install 自动:
    │    - 配置 SSSD
    │    - 配置 Kerberos (/etc/krb5.conf)
    │    - 注册主机到 FreeIPA LDAP
    │    - 获取主机证书
    │    - 创建主机 keytab
    │
    ▼
FreeIPA Server (ipa-local.thinkmeta.site:192.168.3.90)
    │
    │ ② 之后用户登录客户端时:
    │    - SSSD 向 FreeIPA 验证用户
    │    - 自动创建 home 目录
    │    - 获取 Kerberos 票据
    │
    ▼
    用户可以使用 IPA 账号登录

4.2 前置条件(客户端必须满足)

条件说明
DNS 指向 FreeIPA/etc/resolv.conf 中 nameserver 192.168.3.90
FQDN 主机名必须是全限定域名,如 dev.thinkmeta.site
时钟同步与 FreeIPA 服务器偏差 < 5 分钟
网络可达能 ping 通 192.168.3.90 的所有端口
ipa-client 包需要安装 freeipa-client

4.3 客户端环境配置(逐步操作)

步骤 1:设置主机名

# 查看当前主机名
hostnamectl
 
# 设置完整主机名(FQDN)
sudo hostnamectl set-hostname dev.thinkmeta.site
 
# 验证
hostname        # 应输出: dev.thinkmeta.site
hostname -f     # 应输出: dev.thinkmeta.site

步骤 2:配置 hosts 文件

# 添加本地回环解析
echo "127.0.0.1 dev.thinkmeta.site dev" | sudo tee -a /etc/hosts
 
# 添加 FreeIPA 服务器解析(如果 DNS 还未生效)
echo "192.168.3.90 ipa-local.thinkmeta.site" | sudo tee -a /etc/hosts

步骤 3:配置 DNS 指向 FreeIPA

# 方案 A:直接写入 resolv.conf(Ubuntu 26.04 使用 systemd-resolved)
echo "nameserver 192.168.3.90" | sudo tee /etc/resolv.conf
 
# 方案 B:使用 systemd-resolved 配置(推荐,重启不丢失)
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# 然后编辑 /etc/resolv.conf 或创建如下配置
 
# 方案 C:修改 netplan 配置(Ubuntu 26.04 最稳妥)
sudo vim /etc/netplan/50-cloud-init.yaml

netplan 配置示例:

network:
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.3.100/24
      routes:
        - to: default
          via: 192.168.3.1
      nameservers:
        addresses:
          - 192.168.3.90    # FreeIPA DNS 第一
          - 1.1.1.1         # 公网 DNS 备选
  version: 2
# 应用 netplan 配置
sudo netplan apply
 
# 验证 DNS 解析
nslookup ipa-local.thinkmeta.site
# 应返回: 192.168.3.90

步骤 4:验证 DNS 工作正常

# 测试正向解析
host ipa-local.thinkmeta.site
 
# 测试反向解析
host 192.168.3.90
 
# 测试 SRV 记录(关键!)
nslookup -type=SRV _ldap._tcp.thinkmeta.site
nslookup -type=SRV _kerberos._tcp.thinkmeta.site
 
# 验证主机名反向解析
host $(hostname -I | awk '{print $1}')

如果 SRV 记录查询失败,不要继续安装客户端! 先排查 DNS 配置。

步骤 5:配置时间同步

# 开启 NTP
sudo timedatectl set-ntp true
 
# 检查时间同步状态
timedatectl timesync-status
 
# 手动同步一次(可选)
sudo ntpdate -u 192.168.3.90

步骤 6:安装 FreeIPA 客户端包

# Ubuntu 26.04
sudo apt update
sudo apt install -y freeipa-client

4.4 注册客户端到 FreeIPA

一切就绪后,执行客户端注册:

sudo ipa-client-install \
  --domain=thinkmeta.site \
  --server=ipa-local.thinkmeta.site \
  --realm=THINKMETA.SITE \
  --mkhomedir

参数说明

参数说明
--domain=thinkmeta.siteFreeIPA 域名
--server=ipa-local.thinkmeta.siteFreeIPA 服务器 FQDN
--realm=THINKMETA.SITEKerberos Realm
--mkhomedir用户首次登录时自动创建 home 目录

安装过程中会提示输入 admin 密码以授权主机加入域。

成功的输出标志

Client configuration complete.
The ipa-client-install command was successful

4.5 验证客户端接入

# 1. 验证 Kerberos 配置
kinit admin
klist
 
# 2. 在 FreeIPA 服务器上确认主机已注册
# (在 FreeIPA 容器或 Web UI 中执行)
ipa host-find dev.thinkmeta.site
 
# 3. 测试 IPA 用户能否登录客户端
ssh [email protected]
# 或本地切换用户
su - admin
 
# 4. 检查 SSSD 服务状态
sudo systemctl status sssd
 
# 5. 使用 IPA 命令获取用户信息
ipa user-find

4.6 自动创建 Home 目录

SSSD 配合 --mkhomedir 后,用户首次 SSH 登录时会自动创建 /home/<username>。

检查 home 目录自动创建是否生效

# 查看 SSSD 配置
grep -r "pam" /etc/sssd/sssd.conf
 
# 重启 SSSD(修改配置后)
sudo systemctl restart sssd
 
# 手动触发 home 目录创建
sudo pam-auth-update --enable mkhomedir

4.7 批量接入客户端

当有多台服务器需要接入时,可以编写脚本批量操作:

#!/bin/bash
# batch-client-setup.sh — 批量配置客户端
 
SERVERS=(
  "dev.thinkmeta.site|192.168.3.101"
  "ops.thinkmeta.site|192.168.3.102"
  "db.thinkmeta.site|192.168.3.103"
)
 
IPA_SERVER="192.168.3.90"
ADMIN_PASSWORD="YourAdminPassword"
 
for entry in "${SERVERS[@]}"; do
  HOSTNAME="${entry%%|*}"
  IP="${entry##*|}"
  
  echo "=== 配置 $HOSTNAME ==="
  ssh root@$IP "
    hostnamectl set-hostname $HOSTNAME
    echo '127.0.0.1 $HOSTNAME \$(echo \$HOSTNAME | cut -d. -f1)' >> /etc/hosts
    echo 'nameserver $IPA_SERVER' > /etc/resolv.conf
    apt install -y freeipa-client
    ipa-client-install --domain=thinkmeta.site --server=ipa-local.thinkmeta.site --realm=THINKMETA.SITE --mkhomedir --password='$ADMIN_PASSWORD' --unattended
  "
done

4.8 客户端日常管理

查看已注册的主机

# 在 FreeIPA 服务器上
ipa host-find

查看主机详细信息

ipa host-show dev.thinkmeta.site

禁用/启用主机

# 禁用主机(阻止该主机上的所有 IPA 用户登录)
ipa host-disable dev.thinkmeta.site
 
# 重新启用
ipa host-enable dev.thinkmeta.site

从域中移除客户端

# 在客户端上执行
sudo ipa-client-install --uninstall
 
# 在 FreeIPA 服务器上删除主机记录
ipa host-del dev.thinkmeta.site

4.9 查看/管理客户端 keytab

# 查看当前主机的 keytab 条目
sudo klist -k /etc/krb5.keytab
 
# 在 FreeIPA 服务器上重新生成某台主机的 keytab
ipa-getkeytab -s ipa-local.thinkmeta.site -p host/dev.thinkmeta.site -k /tmp/dev.keytab

4.10 常见问题

Q1:ipa-client-install 报 “DNS discovery failed”

原因:客户端 DNS 没有正确指向 FreeIPA 服务器。

解决:

# 确认 DNS 配置
cat /etc/resolv.conf
# 确认能解析 SRV 记录
dig @192.168.3.90 _ldap._tcp.thinkmeta.site SRV

Q2:Kerberos 认证报 “Clock skew too great”

原因:客户端与服务器时间差超过 5 分钟。

解决:

# 查看时间差异
sudo ntpdate -q 192.168.3.90
# 强制同步
sudo ntpdate -u 192.168.3.90

Q3:用户登录后没有 home 目录

# 确认安装了 oddjob-mkhomedir
sudo apt install -y oddjob-mkhomedir
sudo systemctl enable --now oddjobd
 
# 或者通过 PAM 实现
sudo pam-auth-update --enable mkhomedir

Q4:SSH 登录很慢

通常是 DNS 反向解析超时导致。在客户端 /etc/ssh/sshd_config 中添加:

UseDNS no

然后重启 SSH:sudo systemctl restart sshd