前提条件
・この手順で設定したIPAサーバーを使用する
・IPAサーバーではexpectコマンドをインストール済み
・この手順で設定したWindows10を使用する
・Windows10には設定からsshdをインストール済み
スクリプトの流れ
①FreeIPAサーバーですべてのIPAユーザーを取得してカンマ区切りに加工する
②expectコマンドを使用してWindowsにsshで接続する
③Windows上でユーザーの削除と追加を行うスクリプトに「①」で取得したユーザーリストを送信する
IPAサーバーのスクリプト
cronで定期的に実行するとWindowsの管理が少し楽になるかもしれない。
Windowsの台数が多い場合はsamba4のActiveDirectory使ったほうが良い。
#!/bin/bash # Kerberosユーザーをすべて取得する # IPAユーザー以外でログインしている場合はkinitが必要 # echo 'password' | kinit admin USERS=`ipa user-find | grep "User login:*" | sed "s/ User login: //g" | sed -z "s/\n/,/g"` # Windowsクライアントにsshで接続して専用batファイルを実行する # WindowsのIPアドレスは192.168.0.100 # Administratorのパスワードは12345678 HOST="192.168.0.100" expect -c " spawn ssh administrator@$HOST expect \"password:\" send 12345678\\n expect \"Microsoft Windows\" send \"C:\\\\Script\\\\UpdateUserAccounts.bat \\\"$USERS\\\"\r\n\" expect \"ユーザーリストの更新が完了しました。\" send exit\r\n interact "
Windows10のスクリプト
ここではローカルにスクリプト置いてるけど、samba共有に置いた方が管理しやすいかも。
:# ※引数として渡されるユーザーリストはカンマ区切りで末尾にもカンマが必要 @echo off set parameters=%~1 set domain=LOCAL.EXAMPLE.COM setlocal enabledelayedexpansion :# 引数で渡されたリストにいないユーザーの削除 set wmicresult= for /f "usebackq tokens=*" %%P in (`wmic useraccount where "fullname LIKE '%%@%domain%'"`) do ( set wmicresult=!wmicresult!%%P ) for %%P in (%wmicresult%) do ( echo %%P | find "%domain%" 1>NUL if not ERRORLEVEL == 1 ( set localname=%%P set localname=!localname:@%domain%=! echo !parameters! | find "!localname!," 1>NUL if ERRORLEVEL == 1 ( net user !localname! /del 1>NUL rmdir /s /q !systemdrive!\Users\!localname! 1>NUL 2>NUL ) ) ) :# 引数で渡されたリストでローカルにいないユーザーの作成 :# パスワードは実際のサインインには使用されないので固定値 set password=87654321 for %%P in (%parameters%) do ( net user %%P 1>NUL 2>NUL if ERRORLEVEL == 1 ( net user %%P %password% /add /expires:never /fullname:%%P@%domain% 1>NUL ) ) endlocal echo ユーザーリストの更新が完了しました。