ansible
Ansible 基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
ansible安装
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
下载阿里yum源
然后,清除yum缓存,并生成新的yum缓存元数据。
yum clean all
yum makecache fast
然后,用yum下载ansible软件
yum -y install ansible --downloadonly --downloaddir=/ansible7
ls /ansible7
createrepo /ansible7 (必做)生成yum的repodata仓库数据库(metadata元数据)文件夹和文件
创建ansible7的yum配置文件
vim /etc/yum.repo.d/ansible7.repo
[ansible7]
name=asible 7
baseurl=file:///ansible7
enable=1
gpgcheck=0
删除网络yum源配置文件
cd /etc/yum.repo.d
rm -rfv C*.repo epel.repo
yum clean all
yum repolist
yum search ansible
yum -y install ansible
http://mirrors.aliyun.com/repo/epel-7.repo
for i in {1..5}
do
(ssh [email protected].$i ‘yum -y install vsftpd ftp lftp’)& 多线程
done
安装ansible软件
先下载ansible包
yum -y install ansible
rpm -qc ansible
vim /etc/ansible/hosts 在最后添加如下内容
[qf]
192.168.11.11
192.168.11.12
生成秘钥对,并上传公钥给要管理的主机
ssh-keygen
ssh-copy-id [email protected]
ssh-copy-id [email protected]
测试ansible的使用
语法:ansible 主机名或ip -m 模块名 -a ‘模块的选项和参数’
ansible选项:
-m 指定模块,常见的模块有ping ,shell,command,cron,user,group,yum等
-a 指定模块的选项参数,参数中state状态有present(现在就有,用于创建)、absent(缺席的,用于删除)两种
eg:ansible 192.168.11.12 -m shell -a ‘ip a’
用ansible给qf主机组中的所有主机新增jack用户。然后删除jack用户。
ansible qf -m user -a “name=’jack’ shell=’/sbin/nologin’ state=’present’”
ansible qf -m shell -a ‘id jack;tail -5 /etc/passwd’
新增jack用户
ansible qf -m user -a “name=’jack’ remove=yes state=’absent’”
ansible qf -m shell -a ‘id jack;tail -5 /etc/passwd’
setup:查看远程主机的基本信息 例:ansible qf -m setup
ping: ansible qf -m ping 测试远程主机的运行状态
file: ansible qf -m file -a “path=’/aa/bb’ state=’directory’”设置文件属性
force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的链接,然后创造新的软链接,有2个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归设置文件的属性,只对目录有效,有两个选项:yes|no
src:被链接的源文件路径,只应用于state=link的情况
state:
directory:如果目录不存在,就创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除文件
expect
shell脚本需要交互式的地方,有些命令需要手动去交互如passwd scp
对自动部署免去用户交互的痛苦,expect能很好的解决这类问题
expect 把交互式操作变成非交互式
expect的核心spawn expect send set
spawn 调用要执行的命令
expect 等待命令提示信息的出现,也就是捕捉用户输入的提示
send 发送需要交互的值,代替了用户手动输入的内容
set 设置变量值
set timeout 300 300秒超时 如果300秒没有expect内容出现就退出
设置expect永不超时
set timeout -1
interact 执行完成后保持交互状态。如果没有这一句登陆完成后会退出
expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if ...then ...fi
expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。
expect使用实例:
1.首先确认expect的包是否安装
#rpm -qa | grep expect
#yum install -y expect
2.安装完成后查看expect的路径,可以用
which expect
/usr/bin/expect
例:制作秘钥并将公钥发给ssh服务器192.168.11.12,其密码是0
vim a.txt
运行脚本
chmod -v +x a.txt
. a.txt
查看公钥和私钥
这样就成功了。
如需给多台服务器发送公钥只需写一个for循环就够了。