他のサーバのユーザの情報を別のサーバに移植する
複数のサーバを運用していて、追加したり、OS更新したりして、ユーザの再登録が必要になった時に、全自動とは言えないけど、半自動で行う(行った)方法。
PWが初期化されるのはしょうがないものとする。
コピー元のサーバalpha、コピー先のサーバbravoとしてやる。
ユーザー一覧の取得
cat /etc/passwd
ユーザとuidとgidの一覧が出てくる。
cat /etc/passwd | grep "gid"
gidで選べば、ほしいユーザの一覧がもらえる。(grepはor,andできるのでなんとかしよう)
それを、txtファイルに流し込む。
cat /etc/passwd | grep "gid" >list.csv
データの加工
任意のエディタで":"を","に変換する。(":"を","に変換するのをパイプラインでやったほうがいい)。
excelで開いて、ユーザ名とuid,gidだけを残し、1列目からそれぞれ、ユーザ名、uid, gidで保存。何も書かなくて良いけど4列以上書く(理由は後述)。
スクリプトの作成
#!/bin/bash csvfile=hoge.csv for line in `cat ${csvfile} | grep -v ^#` do user=`echo ${line} | cut -d ',' -f 1` pass=`echo ${line} | cut -d ',' -f 1` uid=`echo ${line} | cut -d ',' -f 2` gid=`echo ${line} | cut -d ',' -f 3` eval useradd ${user} -g ${gid} -u ${uid} expect -c " spawn passwd ${user} expect \"New password:\" send -- \"${pass}\n\" expect \"Retype new password:\" send -- \"${pass}\n\" expect \"passwd: all authentication tokens updated successfully.\" send -- \"exit\n\" " done
参考というかコピペ
対話式のコマンドをスクリプト化する方法 - Qiita
このスクリプトをrootで実行すればすべてのユーザを移動できる。