前提条件
この手順で設定したIPAサーバー、この手順で設定したWindows10を使用する。
・ IPAサーバーではexpectコマンドをインストール済み ・ 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 :# 引数で渡されたリストでローカルにいないユーザーの作成 :# パスワードは実際のサインインには使用されないので固定値 :# パスワードの有効期限を無期限にする :# 「Remote Desktop Users」グループに所属させる 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 wmic useraccount where "Name='%%P'" set PasswordExpires=FALSE 1>NUL net localgroup "Remote Desktop Users" %%P /add 1>NUL ) ) endlocal echo ユーザーリストの更新が完了しました。