Day39ansible自动化管理2(课堂笔记)

Day39


作者:孙鹏鹏

归档:课后笔记

时间:2019/4/24


快捷键:

Ctrl + 1    标题1

Ctrl + 2    标题2

Ctrl + 3    标题3

Ctrl + 4    标题4

Ctrl + 5    程序代码

Ctrl + 6    正文

Ctrl + 7    实例1-1

格式说明:

蓝色字体:注释

黄色背景:重要

绿色背景:注意

老男孩教育教学核心思想6重:重目标、重思路、重方法、重实践、重习惯、重总结

学无止境,老男孩教育成就你人生的起点!

联系方式:

网站运维QQ交流群:

Linux 385168604架构师390642196

Python 29215534大数据421358633

官方网站:

http://www.oldboyedu.com 

目  录

第一章:









一键创建及分发秘钥:

#!/bin/bash

ssh-keygen-f ~/.ssh/id_rsa  -P '' -q

forip in 7 8 41 31

do

  sshpass -p123456 ssh-copy-id -i~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip

done


ansible模块查看和帮助*****

查找模块

ansible-doc-l          #模块就Linux命令了。

查看某个模块的具体参数帮助

ansible-doc-s command  #Linux命令参数


command模块 *****

功能说明:

command  Executes a command on a remote node

功能说明:执行一个命令在远程节点上

操作实践:

ansibleoldboy -m command -a "free -m"

ansibleoldboy -m command -a "df -h"

ansibleoldboy -m command -a "ls /root"

ansibleoldboy -m command -a "cat redhat-release"

ansibleoldboy -m command -a "cat /etc/redhat-release"

最通用的功能。

[root@m01~]# ansible oldboy -m command -a "cat /etc/redhat-release"

172.16.1.7| CHANGED | rc=0 >>

CentOSLinux release 7.6.1810 (Core)

[root@m01~]# cat /server/scripts/cmd.sh

for n in 31 41

do

  echo "=====172.16.1.$n======"

  ssh 172.16.1.$n "$1"

done

[root@m01~]# sh /server/scripts/cmd.sh "cat /etc/redhat-release"

=====172.16.1.31======

CentOS Linux release 7.6.1810 (Core)

=====172.16.1.41======

CentOS Linux release 7.6.1810 (Core)


特殊:不支持的东西,例如> < | &等$HOME,替代方案用shell模块

ansibleoldboy -m shell -a "ps -ef|grep ssh"

ansibleoldboy -m shell -a "echo oldboy >/tmp/a.log"


参数:chdir=/tmp配置相当于cd /tmp

[root@m01~]# ansible oldboy  -m command -a"pwd chdir=/etc"

ansibleoldboy  -m shell -a "cd/etc/;pwd"


参数:creates=/etc  相当于条件测试  [ -e /etc ]||pwd和下面removes相反

[root@m01~]# ansible oldboy  -m command -a"pwd creates=/etc"


参数:removes=/root 相当于条件测试 [ -e /root ]&&ls

/root

ansibleoldboy  -m command -a "ls /rootremoves=/root"

ansibleoldboy  -m shell -a "[ -d /etc]||pwd"

[root@m01~]# ansible oldboy  -m command -a"cat /etc/hosts removes=/etc/hosts"

参数:warn=False 忽略警告

[root@m01 ~]# ansible oldboy  -m command -a "chmod 000 /etc/hostswarn=False"

shell模块功能说明:

功能说明:执行一个命令在远程节点上

shell  Execute commands in nodes.

实践:增加文本文件

[root@m01 ~]# ansible oldboy -m shell

-a "echo oldboy >/tmp/tmp.txt"

172.16.1.41| CHANGED | rc=0 >>

172.16.1.31| CHANGED | rc=0 >>

[root@m01 ~]# ansible oldboy -m shell

-a "cat /tmp/tmp.txt"

172.16.1.41| CHANGED | rc=0 >>

oldboy

172.16.1.31| CHANGED | rc=0 >>

oldboy

要执行的脚本必须在远程机器上存在:

[root@m01 ~]# ansible oldboy -m shell

-a "sh /server/scripts/bak.sh"

172.16.1.41| FAILED | rc=127 >>

sh:

/server/scripts/bak.sh: 没有那个文件或目录non-zero return code

172.16.1.31 | CHANGED | rc=0 >>

copy模块功能说明:

功能说明:复制文件到远程主机

实践1:把/etc/hosts拷贝到/opt下,权限设置400,用户和组设置root

ansibleoldboy -m copy -a "src=/etc/hosts dest=/opt mode=0400 owner=rootgroup=root backup=yes"

实践2:把/etc/passwd拷贝/tmp下改名为oldgirl,用户和组为oldboy,权限600,如果有存在同名文件覆盖

ansible oldboy -m copy -a"src=/etc/passwd dest=/tmp/oldgirl.txt owner=oldboy group=oldboy mode=0600force=yes"

script模块功能说明:

功能说明:远程节点上运行本地脚本模块

shell模块和script模块执行脚本区别:

[root@m01 /server/scripts]# ansible

oldboy -m shell -a "sh /server/scripts/bak.sh"

172.16.1.41| FAILED | rc=127 >>

sh:

/server/scripts/bak.sh: 没有那个文件或目录non-zero return code

172.16.1.31| FAILED | rc=127 >>

sh:

/server/scripts/bak.sh: 没有那个文件或目录non-zero return code


本地脚本,在远端执行。

[root@m01

/server/scripts]# ansible oldboy -m script -a

"/server/scripts/new.sh"

file模块功能说明:

功能说明:设置文件属性

参数实践:创建数据文件(普通文件目录 软链接文件)

ansibleoldboy -m file -a "dest=/tmp/oldboy_dir state=directory"

ansibleoldboy -m command -a "mkdir -p /tmp/oldboy_dir1 warn=false"

ansibleoldboy -m file -a "dest=/tmp/oldboy1 state=touch"

ansibleoldboy -m command -a "touch /tmp/oldboy_file1.txt warn=false"

替代方案:

ansibleoldboy  -m command -a "chmod 777/etc/hosts warn=false"

ansibleoldboy  -m command -a "chmod 644/etc/hosts warn=false"

ansibleoldboy  -m command -a "chown oldboy/etc/hosts warn=false"

ansibleoldboy  -m command -a "chown root/etc/hosts warn=false"

实践操作

创建目录:mkdir

/tmp/oldboy_dir

ansibleoldboy -m file -a "dest=/tmp/oldboy_dir state=directory"

递归设置权限:

ansibleoldboy -m file -a "dest=/tmp/oldboy_dir state=directory mode=644recurse=yes"

创建文件:touch

/tmp/oldboy_file

ansibleoldboy -m file -a "dest=/tmp/oldboy_file state=touch"

删除文件:rm

-f /tmp/oldboy_file

ansibleoldboy -m file -a "dest=/tmp/oldboy_file state=absent"

创建链接文件:ln

-s /etc/hosts /tmp/link_file

ansible oldboy -m file -a"src=/etc/hosts dest=/tmp/link_file state=link"

yum模块功能说明:

功能说明:yum包管理模块

实践操作

ansibleoldboy  -m command -a "yum installnginx -y"

ansibleoldboy -m yum -a "name=nginx state=installed"

ansibleoldboy -m yum -a "name=nc state=installed"

[root@nfs01 oldboy_dir]# rpm -qa nginx

nginx-1.10.2-1.el6.x86_64

###不要用yum卸载,可用rpm -e卸载。

systemd模块功能说明:(service模块)

实践:

ansibleoldboy -m systemd -a "name=crond.service enabled=no state=stopped "

ansibleoldboy -m command -a "systemctl status crond"

ansible oldboy -m systemd -a"name=crond.service enabled=yes state=started"

#service模块功能说明:

功能说明:启动停止服务

#相当于

#service crond stop|/etc/init.d/crondstop

#chkconfig crond off

ansibleoldboy -m service -a "name=crond state=stop enabled=no"


#相当于/etc/init.d/crond start

chkconfig crond on

ansibleoldboy -m service -a "name=crond state=started enabled=yes"

ansible oldboy -m command -a"name=crond state=started enabled=yes"

ron模块功能说明:

功能说明:管理定时任务条目信息模块

cron     Manage cron.d and crontab entries

定时任务格式:

* * * * * CMD

        定时任务时间参数:

minute:                # ( 0-59, *, */2, etc )

hour:                  # ( 0-23, *, */2, etc )

day:                   # ( 1-31, *, */2, etc )

month:                 # ( 1-12, *, */2, etc )

weekday:               # ( 0-6 for Sunday-Saturday, *,etc )

job:                   #命令

创建定时任务:

ansible oldboy -m cron -a"name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov>/dev/null 2>&1'"


                   管理配置好:

1、创建分发秘钥

2、安装ansible工具。

3、一键执行各服务脚本


具体服务一键实现的几个步骤:

1、计划要做。

2、单机安装好,步骤抽出来。

3、写成脚本,一键安装。

4、拿到管理机安装


1)一键完成rsync服务端安装。

剧本:

#1)安装

#yuminstall rsync -y

#2)配置配置文件/etc/rsyncd.conf

cp/etc/rsyncd.conf{,.ori}

cat>/etc/rsyncd.conf<

#rsync_config_______________start

#createdby oldboy

#site:http://www.oldboyedu.com

uid= rsync

gid= rsync

usechroot = no

fakesuper = yes

maxconnections = 200

timeout= 600

pidfile = /var/run/rsyncd.pid

lockfile = /var/run/rsync.lock

logfile = /var/log/rsyncd.log

ignoreerrors

readonly = false

list= false

hostsallow = 172.16.1.0/24

hostsdeny = 0.0.0.0/32

authusers = rsync_backup

secretsfile = /etc/rsync.password

[backup]

comment= welcome to oldboyedu backup!

path= /backup/

EOF


#3)创建用户和备份目录

useraddrsync

idrsync

mkdir-p /backup

chown-R rsync.rsync /backup/

ls-ld /backup/


#4)启动和检查

systemctlstart rsyncd

systemctlenable rsyncd

systemctlstatus rsyncd


ps-ef|grep sync|grep -v grep  #检查进程

netstat-lntup|grep 873        #检查端口


#5)配置密码文件

echo"rsync_backup:oldboy" > /etc/rsync.password

chmod600 /etc/rsync.password

cat/etc/rsync.password

ls-l /etc/rsync.password

#rsync服务端配置完成。


#最终脚本路径/server/scripts/install_rsync_server.sh,需提前测试成功。

2)一键完成rsync客户端安装。

#方法1:认证密码文件

echo"oldboy" > /etc/rsync.password

chmod600 /etc/rsync.password

cat/etc/rsync.password

ls-l /etc/rsync.password

rsync-avz /etc/hosts [email protected]::backup--password-file=/etc/rsync.password

#最终脚本路径/server/scripts/install_rsync_client.sh,需提前测试成功。



3)配置管理机61-m01:

1)实现批量分发秘钥,免秘钥管理


#!/bin/bash

yuminstall ansible -y                #含sshpass

[~/.ssh/id_rsa ]&& rm -fr ~/.ssh

ssh-keygen-f ~/.ssh/id_rsa  -P '' -q

forip in 31 41 7 8

do

  sshpass -p123456 ssh-copy-id -f -i~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip

  ssh 172.16.1.$ip "ifconfig eth0"

done

#脚本路径/server/scripts/create_key.sh




4)实现文件分发和命令管理

方法1:脚本开发分发工具

[root@m01/server/scripts]# cat fenfa.sh

#!/bin/sh

./etc/init.d/functions

if[ $# -ne 2 ]

then

    echo "usage:/bin/sh $0 localfileremotedir"

    exit 1

fi


forn in  `cat /etc/ssh/hosts`

do

   scp -P 22 -rp $1 root@$n:$2&>/dev/null

   if [ $? -eq 0  ]

   then

         action "$n successful" /bin/true

   else

            action "$n failure"/bin/false

   fi

done

=============

[root@m01/server/scripts]# cat fenfa.sh

#!/bin/sh


forn in  7 31 41

do

   scp -P 22 -rp $1 root@$n:$2&>/dev/null

done



[root@m01/server/scripts]# cat cmd.sh

forn in 31 41 7

do

   echo "=====172.16.1.$n======"

   ssh 172.16.1.$n "$1"

done


方法2:使用ansible工具

yuminstall ansible -y

[root@m01/server/scripts]# cat /etc/ansible/hosts

[oldboy]

172.16.1.31

172.16.1.41

172.16.1.7



2)优化所有机器SSH


优化目标sshd_config

[root@m01/server/scripts]# sed -n '17,22p' /etc/ssh/sshd_config

####Startby oldboy#2020-04-26###

PermitEmptyPasswordsno

UseDNSno

GSSAPIAuthenticationno

#ListenAddress172.16.1.7:22

####Endby oldboy#2018-04-26###


方法1:脚本分发

[root@m01/server/scripts]# sh fenfa.sh /etc/ssh/sshd_config /etc/ssh/

7successful                                              [  确定 ]

31successful                                             [  确定 ]

41successful                                             [  确定 ]

[root@m01/server/scripts]#

[root@m01/server/scripts]#

[root@m01/server/scripts]#

[root@m01/server/scripts]# sh cmd.sh "systemctl restart sshd"

=====172.16.1.31======

=====172.16.1.41======

=====172.16.1.7======


方法2:使用ansible分发

ansibleoldboy -m copy -a "src=/etc/ssh/sshd_config dest=/etc/ssh/sshd_configbackup=yes"

ansibleoldboy -m shell -a "systemctl restart sshd"



从管理机实现一键安装install_rsync_server.sh

ansible172.16.1.41 -m script -a "/server/scripts/install_rsync_server.sh"


[root@m01/server/scripts]# cat /etc/ansible/hosts

[oldboy]

172.16.1.31

172.16.1.41

172.16.1.7

172.16.1.8


[rsync_client]

172.16.1.31

172.16.1.8


ansiblersync_client -m script -a "/server/scripts/install_rsync_client.sh"


实现从管理机一键完成安装rsync服务端和客户端


3)一键完成nfs服务端。

4)一键完成nfs客户端。

5)一键完成sersync服务端。

6)一键完成sersync客户端。

一个脚本one_key.sh或者一个ansible命令。完成

你可能感兴趣的:(Day39ansible自动化管理2(课堂笔记))