技术博文 · 2021-05-06 0

批量更新ldap sn和批量删除ldap user

副标题:使用cut截取字符串并使用sed替换的坑

背景:因为公司ldap最开始使用的时候没有严格按照对应的填写,导致sn显示的是拼音字符,现在jumpserver连接ldap登录时username使用的sn字段作为显示发现显示的是拼音字符,所以需要对ldap的sn进行批量替换。

image-20210506170230809

步骤一、从ldap导出所有的人员信息.csv

image-20210506170054199

步骤二、《利用excle index做同表格或者不同表格的某列字段内容替换》

从人事那里要来对应的人员的邮箱和姓名。进行匹配对比

然后将sn是拼音的和sn是中文的2列拉出来保存到另外一个文件里面sn.txt

后面再说为什么要用2个=

image-20210506170816933

步骤三、从ldap导出所有人员信息.ldif

image-20210506170609659

sed -i '/objectclass: top/areplace: sn' export.ldif
sed -i '/objectclass: top/achangetype: modify' export.ldif
sed -i '/cn:\|gidnumber:\|homedirectory\|mail:\|objectclass\|uid\|uidnumber\|userpassword\|descript/d' export.ldif

步骤四、通过脚本替换导出的ldif文件里面的sn为拼音字符的

vim change.sh

#!/bin/bash
file1=/root/sn.txt
file2=/root/export.ldif
list=`cat $file1`
for line in $list
do
pinyinName=`echo "$line"|cut -d \= -f 2`
realName=`echo "$line"|cut -d \= -f 1`
echo $pinyinName $realName
sed -i "s/sn: $pinyinName/sn: $realName/g" "$file2"
done

PS:这里遇到了一个大坑,搞了好久,特意记录一下

sn.txt文件最开始我写的是一个=,使用cut截取的时候不知道为什么会在后面多出一些字符,后面就多加了一个=截取没有问题。这里还有一个坑就是sed在使用变量的时候要用双引号而不能使用单引号

sed -i "s/sn: $pinyinName/sn: $realName/g" "$file2"

image-20210506171104251

image-20210506171255521

第五步:使用ldapmodif进行修改

image-20210506184032484

ldapmodify -x -D "cn=Manger,dc=XXXX,dc=com" -W -f changesn.ldif

第六步:删除已经离职的同事的ldap账号

image-20210506190106684

导出离职的sn的账号

image-20210506184445946

第七步:修改导出的ldif文件

sed -i '/cn:\|gidnumber:\|homedirectory\|mail:\|objectclass\|uid\|uidnumber\|userpassword\|descript\|sn/d' export.ldif
sed -i '/dn:/achangetype: delete' export.ldif
cat export.ldif|more

image-20210507103430484

第八步:通过ldapmodify命令删除

 ldapmodify -xD "cn=Manager,dc=yuantu,dc=com" -w yuantu -f export.ldif

image-20210507105619899

中间走到了一个误区,一直用ldapdelete命令来-f,其实是不对的,-f参数需要通过ldapmodify来执行,配合changetype: delete即可

俗话曰:好记性不如烂笔头。这个日常工作中的一遍实操blog。欢迎大家批评指正,以后将用更多的日常工作中的文档作为记录和分享。