今天在张戈博客看到一篇使用echo命令解决Samba批量添加用户难题个人感觉挺实用的,这里分享给大家。
Samba的专业解释我就不贴了,百度百科啥的都有。说白了就是Samba安装到Linux服务器上之后,就可以将服务器上的目录映射到Windows、MAC等个人电脑上,类似于Windows的文件共享,使用相当方便,因此,Samba成了组内开发同事的刚需软件。。。(其实对于使用云服务器的站长,Samba可比FTP好用多了,直接本地编译。。。这个后面有空再介绍吧)
这批开发测试机大部分都是基于Centos的linux系统,所以使用yum install -y samba 就能安装了。安装后发现需要在每台服务器上都配置组内30多个成员的samba账号,手工单个的加太苦逼了,于是写了一个Samba批量添加用户的脚本了。
#!/bin/sh # FileName: addsmbuser.sh # Useage : sh addsmbuser.sh userlistfile / username #批量添加用户 add_list(){ #从userlist中读取用户帐号并循环添加 cat $1 | while read username do #利用echo -e 的回车功能解决smbpasswd需要交互的问题,比expect简单多了 echo -e "$username\n$username" | smbpasswd -a $username -s #如果添加成功,则新建家目录,避免首次直接登陆samba失败,适合公司铁将军鉴权方式,其他环境可以省略 if [[ 0 = $? ]] then mkdir -p /home/$username chown -R $username:users /home/$username fi done } #单个添加用户 add_one() { echo -e "$1\n$1" | smbpasswd -a $1 -s && ( mkdir -p /home/$1 chown -R $1:users /home/$1 ) } # 先确认系统安装了samba,如果没有就安装 which smbpasswd || yum install -y samba #如果参数1是文件那么执行批量添加,否则就单个添加 if [[ ! -z $1 ]];then test -f $1 && ( add_list $1 ) || ( add_one $1 ) else echo "Usage: $0 username / userlistfile" exit 1 fi
使用也非常简单,将如上代码保存为 addsmbuser.sh,然后将需要添加的用户名一行一个保存到一个文本文件,比如userlist,然后执行
sh addsmbuser.sh userlist
就能批量添加这些用户了,初始密码和用户名一致。
当然,直接执行sh addsmbuser.sh + 用户名还能添加单个用户
由于smbpasswd正常使用是需要交互进行的,也就是输入用户名,再输入密码,这种批量交互的活完全可以使用expect脚本来完成。但是本文比较巧妙的利用了echo -e 可以输出回车符(\n)的特性,非常轻巧的完成了任务。
暂时就写这么多,后面有时间再整理下坑爹的SuSE下如何编译安装Samba,以及Samba的简单使用。
本文转载至:巧用echo命令解决Samba批量添加用户难题 | 张戈博客