巧用echo命令解决Samba批量添加用户难题
最近实在太忙,没时间研究和折腾,所以也没有什么可以分享到博客的。果然,个人博客坚持原创太不不容易了。张戈博客上线 2 年多,从 1 天多更,到一天 1 更、一周一更,直到现在 2 星期可能有一更的节奏。。。
好了,废话不说了。翻了翻在工作上的印象笔记,发现还是有一些存货可以分享的。
挺久之前,组内新申请了一批开发测试机,需要部署环境。除了一些常见的软件要安装之外,还有一个我之前很少用到的 Samba。
Samba 的专业解释我就不贴了,百度百科啥的都有。说白了就是 Samba 安装到 Linux 服务器上之后,就可以将服务器上的目录映射到 Windows、MAC 等个人电脑上,类似于 Windows 的文件共享,使用相当方便,因此,Samba 成了组内开发同事的刚需软件。。。(其实对于使用云服务器的站长,Samba 可比 FTP 好用多了,直接本地开发编辑。。。这个后面有空再介绍吧)
这批开发测试机大部分都是基于 Centos 的 Tlinux 系统,所以使用 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 "$usernamen$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 "$1n$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 的简单使用。
- SSDB安装配置记录
- Python标准库笔记(3) — datetime模块
- Django 1.10中文文档-第一个应用Part4-表单和通用视图
- Python标准库笔记(2) — re模块
- Python爬虫—破解JS加密的Cookie
- Go语言中json转成map结构
- rpc-dubbo简单入门
- Django 1.10中文文档-第一个应用Part3-视图和模板
- Go语言对JSON进行编码和解码
- [Go 语言社区]服务器自测JS 工程
- Django 1.10中文文档-第一个应用Part2-模型和管理站点
- 亿以内所有素数(Go语言版)
- Django 1.10中文文档-第一个应用Part1-请求与响应
- 三步学会用spring开发OSGI——(第二步:工程篇)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 十六、半小时掌握ES6常用知识,覆盖80%实践场景
- python爬虫----(4. scrapy框架,官方文档以及例子)
- python爬虫----(3. scrapy框架,简单应用)
- python爬虫----(2. scrapy框架)
- python爬虫----(1. 基本模块)
- 七日Python之路--第十二天(Django Web 开发指南)
- 三日php之路 -- 第一天(php语言参考)
- 三日php之路 -- 第一天(初识php)
- NoSQL数据库 -- MongoDB
- 数据抓取练习
- python基础 -- 简单实现HTTP协议
- RabbitMQ 学习
- asp连接access,增删改查
- Spring 中的如何自定义事件处理(Custom Event)
- python基础 -- 自定义排序