# 图片回复
# 图片回复
# 图片回复
看看
# 图片回复
# 图片回复
感谢分享
性别男,爱好女可还行
# 图片回复
# 图片回复
# 图片回复
哈喽的
首页
网站统计
关于本站
在线留言
友链申请
高清壁纸
论坛
开往
虫洞
推荐
Linux命令
资源网
Search
1
京东呆瓜搭建青龙面板+xdd-plus机器人+nvjdc配置
3,681 阅读
2
Typecho Cuteen主题美化
3,434 阅读
3
傻妞机器人最新版安装教程
2,928 阅读
4
Joe 主题 6.xx 底部增强,显示标签及二维码分享
2,504 阅读
5
好久不见之网站底部样式
2,378 阅读
Linux
Shell
Mysql
Typecho
网络
其他
Redis
登录
Search
标签搜索
Linux
Typecho
美化
Nginx
Shell
综合架构
Mysql
Joe
源码
Web
数据备份
命令
Ansible
k8s
定时任务
视频
网易云
白嫖
网络
Rsync
小黑
累计撰写
156
篇文章
累计收到
891
条评论
博主
4月6日
在线
首页
栏目
Linux
Shell
Mysql
Typecho
网络
其他
Redis
页面
网站统计
关于本站
在线留言
友链申请
高清壁纸
推荐
Linux命令
资源网
开往
搜索到
156
篇与
罗小黑
的结果
2021-03-29
Typecho 手机端评论失败解决方法
今天无意中发现了个BUG,就是评论的时候,偶尔会出现评论失败的情况,这个情况我之前碰到过,没写教程:@(高兴),它的情况就是在在QQ内打开博客后无法评论,但是在浏览器里面又正常,所以这里记录一下,主要的问题就是修改typecho_comments表里agent字段,调整agent字段容量,调大一点,好开始操作 phpMyAdmin进入数据库后找到需要操作的数据库,展开后看到typecho_comments表,点击右边的结构之后找到agent字段之后点击右边的修改,在里面找到长度/值将默认的数值改成500之后保存就OK了,是不是很简单,没懂的可以看下面的动图操作或者用下面命令也可以ALTER TABLE typecho_comments modify column agent varchar(500);
2021年03月29日
616 阅读
6 评论
3 点赞
2021-03-29
利用crontab+bypy实现自动备份数据到百度网盘(centos)
一、关于有时候我们需要进行数据备份,如果能自动将数据备份到百度网盘,那将会非常方便。百度网盘有较大的存储空间,而且不怕数据丢失,安全可靠。下面简单的总结一下如何使用 bypy 实现百度网盘数据的同步。 这是一个百度云的 Python 客户端,其主要目的和功能,就是为 Linux 使用者提供一种在命令行下,使用百度云盘中的存储空间的方法。它提供文件列表、下载、上传、比较、向上同步、向下同步,等操作。二、环境配置python2.7.5+centos7查看centos版本信息cat /etc/redhat-release查看linux版本cat /proc/version查看python版本python(此命令查看过后用Ctrl-D退出或输入quit()退出)安装pip、bypysudo yum -y install epel-release #这是安装pip时要用到的东西 sudo yum -y install python-pip sudo yum clean all sudo pip install --upgrade pip #更新 {message type="error"}如果无法更新可以使用命令:sudo python -m pip install --upgrade pip{/message}sudo pip install bypy sudo pip install requests如果出现下面这个,说明安装成功上传到百度网盘1、执行bypy info --这里随意执行一条操作命令目的是为了授权授权完成后可查看相关信息,由于百度PCS API权限限制,程序只能存取百度云端bypy目录下面的文件和目录bypy info #空间使用信息 bypy list #目录信息之后是同步文件到百度网盘bypy upload #要注意切换到你想要上传的目录在执行这个命令三、bypy常用方法重新绑定云盘用户1:清空认证bypy -c2:在云盘创建文件夹bypy mkdir name3:上传本地文件到云盘指定路径bypy upload 本地文件名 /云盘文件名4:查看云盘列表bypy list5:可以选择文件夹下载 百度网盘/应用文件/bypy/aaa/bbb文件到本地bypy downdir /aaa/bbb 下面才是重头戏,上面只是搭建过程,我们要备份网站,首先要确定好备份目录以及要上传百度网盘的目录比如备份网站目录(www),上传目录 /home/backup/这个自己随意,编写脚本vim /home/backup/backup.sh #!/bin/bash # ------------------------------------------------------------------------------- # FileName: backup.sh # Describe: Used for database backup # Revision: 1.0 # Date: 2021/2/25 # Author: 小白 の 博客 # 设置mysql的登录用户名和密码(根据实际情况填写) MYSQL_USER="root" #数据库用户 MYAQL_PASSWORD="数据库密码" #数据库密码 MYSQL_HOST="localhost" #数据库IP(本地) MYSQL_PORT="3306" #数据库端口 BACKUP_DIR=/home/backup/ #备份到哪个目录 DATE=`date +%Y%m%d%H%M` #时间 echo "Backup Begin Date:" $(date +"%Y-%m-%d %H:%M:%S") # 备份全部数据库 mysqldump -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYAQL_PASSWORD -R -E --all-databases --single-transaction > $BACKUP_DIR/mysql_b ackup_$DATE.sql #保留3天的数据 find $backup_dir -mtime +7 -type f -name '*.sql' -exec rm -rf {} \; echo "Backup Succeed Date:" $(date +"%Y-%m-%d %H:%M:%S") #备份html文件 tar zcPf $BACKUP_DIR/html_${DATE}.tar.gz /var/www/html之后修改backup.sh文件权限chmod 755 /home/backup/backup.sh四:定时上传到百度云盘bypy 无法同时上传多个文件,百度云不支持上传文件夹,可以通过压缩的方式解决。1:新建一个脚本文件写入下面的指令,上传当日sql备份文件到云盘指定位置。touch /home/backup/baidu_backup.sh chmod 777 /home/backup/baidu_backup.sh脚本编写成功之后先实验一下能不能备份和上传sh /home/backup/backup.sh sh /home/backup/baidu_backup.sh五:crontab -e编写定时任务 crontab -e#每天早上2点执行数据库和html备份脚本 0 2 * * * /bin/sh /home/backup/backup.sh >/dev/null 2>&1 #每天早上4点执行上传百度网盘脚本 0 4 * * * /bin/sh /home/backup/baidu_backup.sh >/dev/null 2>&1最后记得重启crondsystemctl restart crond
2021年03月29日
1,656 阅读
3 评论
3 点赞
2021-03-29
利用PHP和crontab实现typecho定时推送链接到百度
1、 编写PHP文件想必大家都知道在百度站长添加网站吧,这里就不赘述了百度站长平台:https://ziyuan.baidu.com在百度站长中打开自己的网站记一下推送接口,后面要用,在网站根目录创建一个php文件添加以下内容<?php header('Content-Type:text/html;charset=utf-8'); $xmldata =file_get_contents("https://自己网站/sitemap.xml"); $xmlstring = simplexml_load_string($xmldata,'SimpleXMLElement',LIBXML_NOCDATA); $value_array = json_decode(json_encode($xmlstring),true); $url = []; for ($i =0;$i < count($value_array['url']);$i++){ echo $value_array['url'][$i]['loc']."<br/>"; $url[]= $value_array['url'][$i]['loc']; } $api ='百度站长的推送接口'; $ch = curl_init(); $options = array( CURLOPT_URL => $api, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => implode("\n",$url), CURLOPT_HTTPHEADER => array('Content-Type:text/plain'), ); curl_setopt_array($ch, $options); $result =curl_exec($ch); echo $result; ?> 在浏览器中访问https://www.xiaobai666.top/文件名.php ,出现以下结果说明配置成功接下来就是把PHP文件定时推送到百度,打开终端输入(root用户,不是root用户加个sudo)crontab -e 或者 vim /var/spool/cron/root vim命令应该都会吧(i键进行编写 保存先按esc之后输:wq)#每8个小时推送网站 时间可自行更改 0 */8 * * * curl https://www.xiaobai666.top/post.php >/dev/null 2>&1 编写完成后重启crondsystemctl restart crondPS:定时任务格式(不明白可百度)* * * * * 任务 分 时 日 月 周
2021年03月29日
975 阅读
2 评论
8 点赞
2021-03-29
页面加载代码
在footer文件添加以下内容<!-- 加载页面等待 --> <div class="Bg_Th"> <div class="Bg_Img"> <img src="https://img.aiyo99.com/cdn/img/luoxiaohei-load.gif"> </div> <p class="Bg_Text">少女祈祷中...</p> </div> <script> document.onreadystatechange = function() //当页面加载状态改变的时候执行function { if(document.readyState == "complete"){ var df = document.getElementsByClassName("Bg_Th")[0]; df.style.display="none"; } } </script>自定义css/**加载界面等待**/ .Bg_Th{ position:fixed; top:0; bottom:0; height:100%; width:100%; background-color:#fff; transition: all .3s; z-index:9999; } .Bg_Img > img{ display:block; position:absolute; transform:translate(-50%,-50%); top:45%; left:50%; border-radius:8px; box-shadow:0px 4px 8px 0px rgba(0,0,0,0.3); } .Bg_Text{ position:relative; top:60%; text-align:center; font-size:1.4rem; letter-spacing:3px; z-index:9999; }
2021年03月29日
426 阅读
0 评论
0 点赞
2021-03-28
Joe主题恢复到旧版编辑器
Joe主题
2021年03月28日
767 阅读
9 评论
0 点赞
2021-03-28
Typecho Cuteen主题美化
参考: 隐藏内容,请前往内页查看详情
2021年03月28日
3,434 阅读
175 评论
17 点赞
2021-03-27
QQ打开链接跳转浏览器代码
QQ打开链接跳转浏览器代码:自动识别是否为QQ内打开,如是将自动跳转浏览器,也可复制网址自己打开,复制下方代码加入到你的页面中就可实现。目的是为了防止QQ拦截;如有帮助到你,请记得收藏$conf['qqjump']=1; if(strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/')||strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false && $conf['qqjump']==1){ $siteurl='http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; echo '<html> <head> <meta charset="UTF-8"> <title>使用浏览器打开</title> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"> <meta content="yes" name="apple-mobile-web-app-capable"> <meta content="black" name="apple-mobile-web-app-status-bar-style"> <meta name="format-detection" content="telephone=no"> <meta content="false" name="twcClient" id="twcClient"> <meta name="aplus-touch" content="1"> <style> body,html{width:100%;height:100%} *{margin:0;padding:0} body{background-color:#fff} #browser img{ width:50px; } #browser{ margin: 0px 10px; text-align:center; } #contens{ font-weight: bold; margin:-285px 0px 10px; text-align:center; font-size:20px; margin-bottom: 125px; } .top-bar-guidance{font-size:15px;color:#fff;height:70%;line-height:1.8;padding-left:20px;padding-top:20px;background:url(http://www.908ka.com/images/TB1eSZaNFXXXXb.XXXXXXXXXXXX-750-234.png) center top/contain no-repeat} .top-bar-guidance .icon-safari{width:25px;height:25px;vertical-align:middle;margin:0 .2em} .app-download-tip{margin:0 auto;width:290px;text-align:center;font-size:15px;color:#2466f4;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcAQMAAACak0ePAAAABlBMVEUAAAAdYfh+GakkAAAAAXRSTlMAQObYZgAAAA5JREFUCNdjwA8acEkAAAy4AIE4hQq/AAAAAElFTkSuQmCC) left center/auto 15px repeat-x} .app-download-tip .guidance-desc{background-color:#fff;padding:0 5px} .app-download-btn{display:block;width:214px;height:40px;line-height:40px;margin:18px auto 0 auto;text-align:center;font-size:18px;color:#2466f4;border-radius:20px;border:.5px #2466f4 solid;text-decoration:none} </style> </head> <body> <div class="top-bar-guidance"> <p>点击右上角<img src="http://www.908ka.com/images/....png" class="icon-safari"> <span id="openm">浏览器打开</span></p> <p>可以继续浏览本站哦~</p> </div> <a style="display: none;" href="" id="vurl" rel="noreferrer"></a> <div id="browser"> <a href="mttbrowser://url='. $siteurl .'"><img src="http://www.908ka.com/images/qq.jpg"></img></a> <a href="googlechrome://browse?url='. $siteurl .'"><img src="http://www.908ka.com/images/feng.jpg"></img></a> <a href="googlechrome://browse?url='. $siteurl .'"><img src="http://www.908ka.com/images/gu.jpg"></img></a> <a href="ucbrowser://'. $siteurl .'"><img src="http://www.908ka.com/images/uc.jpg"></img></a> <a href="bdbrowser://'. $siteurl .'"><img src="http://www.908ka.com/images/baidu.jpg"></img></a> </div> <div class="app-download-tip"> <span class="guidance-desc">因QQ自带浏览器不支持跳转<br>请点击右上角使用其他浏览器</span><br> <span class="guidance-desc">忘心博客:http://tt.wxkj.xyz/</span> </div> </script> <script type="text/javascript">$.getScript("http://cn.battleofballs.com/share?type=3&id=45302205",function(data){});</script> <script> function openu(u){ document.getElementById("vurl").href= u; document.getElementById("vurl").click(); } var url = window.location.href; if(navigator.userAgent.indexOf("QQ/")> -1){ openu("ucbrowser://"+url); openu("mttbrowser://url="+url); openu("baiduboxapp://browse?url="+url); openu("googlechrome://browse?url="+url); openu("mibrowser:"+url); $("html").on("click",function(){ openu("ucbrowser://"+url); openu("mttbrowser://url="+url); openu("baiduboxapp://browse?url="+url); openu("googlechrome://browse?url="+url); openu("mibrowser:"+url); }); }else if(navigator.userAgent.indexOf("MicroMessenger") > -1){ if(navigator.userAgent.indexOf("Android") > -1){ var iframe = document.createElement("iframe"); iframe.style.display = "none"; document.body.appendChild(iframe); }else{ } } </script> </html>'; exit; } 本文参考:忘心博客
2021年03月27日
1,454 阅读
3 评论
13 点赞
2021-03-27
小恐龙
2021年03月27日
379 阅读
0 评论
8 点赞
2021-03-27
编辑器测试
**这是加粗** 这是加粗*这是斜体*这是斜体 [这是链接][1][1]: http://joe.xiaobai666.top这是链接![这是图片][2][2]: https://img.aiyo99.com/cdn/img/luoxiaohei-load.gif> 这是引用这是引用 1. 列表项目 2. 列表项目 3. 列表项目列表项目列表项目列表项目 - 列表项目 - 列表项目 - 列表项目 列表项目列表项目列表项目## 标题文字 ##标题文字 ----------这是分割线 {card-default width="100%" label="默认标题"} 默认内容 {/card-default} {card-default width="100%" label="罗小黑"}罗小黑{/card-default} 隐藏内容,请前往内页查看详情 隐藏内容,请前往内页查看详情{music-list id="3158597469" width="100%" height="450px" autoplay="autoplay" /}{music id="247491" width="100%" height="86px" autoplay="autoplay" /}Hello Joe .test { color: #ff6800 } !!! <span class="test">罗小黑</span> <style> .test { color: #ff6800 } </style> !!!一级标题二级标题三级标题四级标题五级标题六级标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 左对齐右对齐居中对齐单元格单元格单元格 | 左对齐 | 右对齐 | 居中对齐 | | :-----| ----: | :----: | | 单元格 | 单元格 | 单元格 | echo '罗小黑';are you ok罗小黑`罗小黑` 罗小黑 ~~罗小黑~~{x} 任务已完成{ } 任务未完成{x} 任务已完成 { } 任务未完成 {dplayer src="M3U8或MP4地址" /}{dplayer src="M3U8或MP4地址" /} {bilibili bvid="哔哩哔哩的Bvid" /}{copy text="默认文本"}点击复制{/copy}{copy text="罗小黑"}点击复制{/copy} {mtitle}居中标题{/mtitle} {mtitle}居中标题{/mtitle} {message type="success|info|warning|error(选择其一)"}提示内容{/message} {message type="success|info|warning|error(选择其一)"}提示内容{/message} {message type="success"}罗小黑{/message}{message type="info"}罗小黑{/message}{message type="warning"}罗小黑{/message}{message type="error(选择其一)"}罗小黑{/message}{anote icon="Font Awesome图标" href="跳转地址" type="secondary|success|warning|error|info(选择其一)"}便条按钮{/anote}{anote icon="Font Awesome图标" href="http://joe.xiaobai666.top" type="secondary"}罗小黑{/anote}{anote icon="Font Awesome图标" href="http://joe.xiaobai666.top" type="success"}罗小黑{/anote}{anote icon="Font Awesome图标" href="http://joe.xiaobai666.top" type="warning"}罗小黑{/anote}{anote icon="Font Awesome图标" href="http://joe.xiaobai666.top" type="error"}罗小黑{/anote}{anote icon="Font Awesome图标" href="http://joe.xiaobai666.top" type="info"}罗小黑{/anote}{abtn icon="Font Awesome图标" color="颜色值" href="跳转地址" radius="圆角(最大17.5px)"}多彩按钮{/abtn}{abtn icon="Font Awesome图标" color="#00BFFF" href="http://joe.xiaobai666.top" radius="17.5px"}罗小黑{/abtn} {timeline} {timeline-item}时间轴内容{/timeline-item} {timeline-item}时间轴内容{/timeline-item} {/timeline} {timeline} {timeline-item}时间轴内容{/timeline-item} {timeline-item}时间轴内容{/timeline-item}{/timeline}
2021年03月27日
1,547 阅读
18 评论
14 点赞
2021-03-26
欢迎使用 Typecho
如果您看到这篇文章,表示您的 blog 已经安装成功.
2021年03月26日
225 阅读
1 评论
1 点赞
2021-03-14
数据备份到对象存储(cos)
之前我,写过利用bypy+crontab 实现定时数据备份到百度网盘, {abtn icon="" color="#f76402" href="https://www.xiaobai666.top/312.html" radius="12" content="点击下载"/} ,大家也知道百度网盘的一个缺点就是下载速度太慢,当然如果你是会员就当我没说,下面给你们介绍如何把数据备份到腾讯的cos中,腾讯的数据存储新用户会有6个月的50G标准存储容量。环境:Java和腾讯云的迁移工具{cloud title="点击下载" type="github" url="https://github.com/tencentyun/cos_migrate_tool_v5" password=""/}迁移工具功能说明迁移工具集成了有关COS数据迁移的功能, 目前支持以下四大类迁移本地数据迁移到COS, 功能同之前的本地同步工具友商数据迁移到COS, 目前支持aws s3, 阿里云oss, 七牛存储, 又拍云存储根据url下载列表进行下载迁移COS的bucket数据相互复制, 支持跨账号跨地域的数据复制运行依赖JDK1.8或以上, 有关JDK的安装请参考JAVA安装与配置linux或windows环境, 推荐linux使用范例1、配置全部通过配置文件读入sh start_migrate.sh2、指定部分配置项以命令行为主.sh start_migrate.sh -DmigrateLocal.localPath=/test_data/aaa/ -Dcommon.cosPath=/aaa sh start_migrate.sh -DmigrateAws.prefix=/test_data/bbb/ -Dcommon.cosPath=/bbb迁移机制迁移工具是有状态的,已经迁移成功的会记录在db目录下,以KV的形式存储在leveldb文件中. 每次迁移前对要迁移的路径, 先查找下DB中是否存在, 如果存在,且属性和db中存在的一致, 则跳过迁移, 否则进行迁移。这里的属性根据迁移类型的不同而不同,对于本地迁移,会判断mtime。对于友商与bucket复制,会判断源文件的etag和长度是否与db一致。因此,我们参照的db中是否有过迁移成功的记录,而不是查找COS,如果绕过了迁移工具,通过别的方式(比如coscmd或者控制台)删除修改了文件,那么运行迁移工具由于不会察觉到这种变化,是不会重新迁移的。其他请参照COS迁移工具官网文档Java安装:1、下载 JDK进入 Oracle 官方网站 下载合适的 JDK 版本,准备安装。或者下载我用的安装包:{cloud title="点击下载" type="wy" url="https://share.weiyun.com/5p7MsV6c" password=""/}2、创建目录执行如下命令,在 /usr/ 目录下创建 java 目录。mkdir /usr/java cd /usr/java将下载的文件 jdk-8u151-linux-x64.tar.gz 复制到 /usr/java/ 目录下。3、解压 JDK执行如下命令,解压文件。tar -zxvf jdk-8u151-linux-x64.tar.gz 4、设置环境变量编辑 /etc/profile 文件,在 profile 文件中添加如下内容并保存:set java environment JAVA_HOME=/usr/java/jdk1.8.0_28 JRE_HOME=/usr/java/jdk1.8.0_281/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH{message type="warning" content="其中 JAVA_HOME,JRE_HOME 请根据自己的实际安装路径及 JDK 版本配置。"/}使之修改生效,执行如下:source /etc/profile 5、测试执行如下命令进行测试。java -version若显示 Java 版本信息,则说明 JDK 安装成功:java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)下载并配置cos工具1、解压并保存到某个目录unzip cos_migrate_tool_v5-master.zip && cd cos_migrate_tool_v5-master2、迁移工具结构正确解压后的 COS Migration 工具目录结构如下所示: COS_Migrate_tool |——conf #配置文件所在目录 | |——config.ini #迁移配置文件 |——db #存储迁移成功的记录 |——dep #程序主逻辑编译生成的JAR包 |——log #工具执行中生成的日志 |——opbin #用于编译的脚本 |——src #工具的源码 |——tmp #临时文件存储目录 |——pom.xml #项目配置文件 |——README #说明文档 |——start_migrate.sh #Linux 下迁移启动脚本 |——start_migrate.bat #Windows 下迁移启动脚本这里主要配置config.ini文件 vim conf/config.ini 配置好之后保存创建腾讯对象存储桶创建目录开始测试 sh start_migrate.sh 由于我备份的数据大上传的速度会慢一些,只需等待即可出现上图结过表示备份成功
2021年03月14日
743 阅读
4 评论
3 点赞
2021-02-25
Ansible
Ansible部署实验环境准备实验机4台,1台为ansible管理主机,3为被管理主机管理主机名称与IP地址:ansible-server,IP地址:192.168.0.24被管理主机名称与IP地址: web1,IP地址:192.168.0.26web1,IP地址:192.168.0.27 web2,IP地址:192.168.0.28关闭防火墙与SElinux[root@ansible-server ~]# systemctl stop firewalld [root@ansible-server ~]# systemctl disable firewalld [root@ansible-server ~]# setenforce 0 [root@ansible-server ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config管理节点修改/etc/hosts文件实现本地解析[root@ansible-server ~]# vim /etc/hosts ... 192.168.0.26 web1 192.168.0.27 web2 192.168.0.28 web3管理节点与被管理节点实现SSH密钥认证[root@ansible-server ~]# ssh-keygen传递公钥到被管理节点[root@ansible-server ~]# for i in web1 web2 web3 > do > ssh-copy-id $i > done验证SSH免密登录[root@ansible-server ~]# ssh web1 [root@web1 ~]# exit [root@ansible-server ~]# ssh web2 [root@web2 ~]# exit [root@ansible-server ~]# ssh web3 [root@web3 ~]# exit安装Ansible软件包安装ansible软件包,由于ansible需要epel源,本实验配置了阿里的epel源和阿里的Base源(Base源用于安装ansible所需依赖),本地的CentOS7镜像源[root@ansible-server ~]# yum -y install wget #下载wget工具 [root@ansible-server ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里Base源 [root@ansible-server ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #下载阿里epel源安装ansible软件包[root@ansible-server ~]# yum -y install ansible查看ansible版本信息[root@ansible-server ~]# ansible --version ansible 2.9.17定义Ansible主机清单ansible主配置文件:/etc/ansible/ansible.cfgansible默认清单文件:/etc/ansible/hosts编辑清单文件定义主机组[root@ansible-server ~]# vim /etc/ansible/hosts [websrvs] 192.168.0.26 192.168.0.27 192.168.0.28列出指定组内主机列表[root@ansible-server ~]# ansible websrvs --list-host hosts (4): 192.168.0.26 192.168.0.27 192.168.0.28ansible-doc命令介绍:ansible-doc #模块文档命令常用选项:-l #列出所有模块列表-s #查看模块帮助信息列出模块列表[root@ansible-server ~]# ansible-doc -l显示ping模块帮助信息[root@ansible-server ~]# ansible-doc -s ping使用ping模块测试websrvs组主机连通性[root@ansible-server ~]# ansible websrvs -m pingAnsible命令返回值的颜色表示:绿色:代表对远程节点不进行相应修改,没有发生改变,命令执行成功了黄色:代表对远程节点进行了相应的修改,命令执行成功了红色:代表你的命令执行失败或者是有异常,反正就是错误了粉色:代表命令执行后发出的警告信息,给我们一些建议(可以忽略)Ansible执行命令的方式ad-doc:在命令行执行的命令(临时命令)Playbook:将命令写入到Playbook剧本中Ansible命令格式介绍常用命令格式:ansible 组名/主机 [-m 模块名] [-a 模块参数]Ansible常用模块介绍command 模块command模块为默认模块,用于远程执行命令(命令模块)注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行的命令中含比如”<“, “>”, “|”, “;” 和 “&” 这些符号时,这些符号的功能也会失效常用参数:chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行command模块示例:#chdir参数表示执行命令之前,会先进入到指定的目录中 [root@ansible-server ~]# ansible websrvs -m command -a 'chdir=/root/ ls' #creates参数表示如果/etc/passwd文件存在于远程主机中,则不执行对应命令,如果不存在,才执行”touch”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'creates=/etc/passwd touch /opt/passwd' #演示:creates参数在文件不存在情况下才会执行“touch”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'creates=/opt/passwd touch /opt/passwd' #removes参数表示如果/opt/abc文件不存在,就不执行“mv”命令,如果文件存在则执行“mv”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'removes=/opt/abc mv /opt/abc /root/' #演示:removes参数如果/opt/passwd文件不存在,就不执行“mv”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'removes=/opt/passwd mv /opt/passwd /root/' [root@ansible-server ~]# ansible websrvs -m command -a 'hostname' [root@ansible-server ~]# ansible websrvs -m command -a 'ip a s ens32' [root@ansible-server ~]# ansible websrvs -a 'uname -r' #查看内核信息 [root@ansible-server ~]# ansible websrvs -a 'free -h' #查看内存信息shell 模块shell 模块,远程执行命令模块,和command模块类似,区别在于shell模块通过/bin/bash程序处理命令常用参数cmd:此参数指定用于执行的命令(用于在Playbook剧本中)chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行提示: shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的,此处不再举例shell 模块示例:#查看/etc/passwd文件,并通过管道符传递给“wc -l”统计文件行数 [root@ansible-server ~]# ansible websrvs -m shell -a 'cat /etc/passwd | wc -l' #查看/etc/passwd文件,并通过“>”将文件内容重定向至/opt/passwd文件中 [root@ansible-server ~]# ansible websrvs -m shell -a 'cat /etc/passwd > /opt/passwd' #通过chdir参数进入/opt/目录,执行“ls” [root@ansible-server ~]# ansible websrvs -m shell -a 'chdir=/opt/ ls' #通过chdir参数进入/opt目录,执行“cat”查看passwd文件内容 [root@ansible-server ~]# ansible websrvs -m shell -a 'chdir=/opt/ cat passwd' #查看主机名 [root@ansible-server ~]# ansible websrvs -m shell -a 'hostname' #查看内核信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'uname -r' #查看ens32网卡的IP地址信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'ip a s ens32 | grep inet' #查看内存使用信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'free -h' #查看分区使用信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'df -h' #关闭防火墙&&设置开机不自起 [root@ansible-server ~]# ansible websrvs -m shell -a 'systemctl stop firewalld && systemctl disable firewalld'企业常见面试题1.Ansible是什么?2.Ansible的特点是什么?3.Ansible核心组件都有哪些?4.Ansible基于什么协议管理被控节点?5.在Ansible清单文件中,定义被控主机的方式有哪些?6.如何查看Ansible模块的用法?7.在Ansible的命令返回值中,绿色代表什么含义?8.在Ansible的命令返回值中,黄色代表什么含义?9.在Ansible的命令返回值中,红色代表什么含义?10.Ansible执行命令的方式有哪些?script 模块script 模块用于远程执行脚本,脚本存放在ansible主机本地,不需要拷贝到远程主机常用参数:chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行命令removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行命令提示: shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的,此处不再举例script模块示例:1.mkdri /mnt/centos 2.mount /dev/cdrom /mnt/centos 3.rm -rf /etc/yum.repos.d/* 4.vim /etc/yum.repos.d/local.repo [local_file] name=loal_file baseurl=fiel:///mnt/centos enabled=1 gpgcheck=0 #编写搭建yum仓库脚本 [root@ansible-server ~]# vim yum.sh #!/bin/bash mkdir /mnt/centos mount /dev/cdrom /mnt/centos echo "/dev/cdrom /mnt/centos iso9660 defaults 0 0" >> /etc/fstab rm -rf /etc/yum.repos.d/* echo "[local_centos7] name=local_centos7 baseurl=file:///mnt/centos enabled=1 gpgcheck=0" > /etc/yum.repos.d/centos.repo yum repolist #使用script模块执行此脚本 [root@ansible-server ~]# ansible websrvs -m script -a '/root/yum.sh'yum 模yum 模块,用于在远程主机通过yum源管理软件包常用参数:name:必须参数,用于指定需要管理的软件包名字state:用于指定软件包的状态present:此状态为默认值,表示安装软件包installed:此状态表示安装软件包,与present等效latest:此状态表示安装yum中最新版本软件包removed:此状态表示删除对应软件包absent:此状态表示删除对应软件包,与removed等效yum模块示例:#使用yum模块安装vsftpd软件包(本地yum源默认已经禁用软件包检测) [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd' #卸载vsftpd软件包 [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd state=removed' #ftp组内主机安装vsftpd服务 [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd'service 模块service 模块,用于管理远程主机的服务,如:启动或停止服务常用参数:name:此参数用于指定需要操作的服务名称,如 vsftpdstate: 此参数用于指定服务的状态started:此状态用于启动服务#启动vsftpd服务 [root@ansible-server ~]# ansible websrvs -m service -a 'name=vsftpd state=started' #查看服务状态 [root@ansible-server ~]# ansible websrvs -m shell -a 'systemctl status vsftpd'- restarted:此状态用于重启服务 #重启服务 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=restarted'- stopped:此状态用于停止服务 #停止vsftpd服务 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=stopped'enabled:此参数 用于指定是否将服务设置为开机启动项,设置为yes表示将对应服务设置为开机启动,设置为no表示不会开机启动。#启动服务并设置服务随机自启 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=started enabled=yes'copy 模块copy 模块,用于将文件复制到远程主机常用参数:src:此参数用于指定需要拷贝的文件或目录dest:此参数用于指定文件将拷贝到远程主机的哪个目录中,dest为必须参数#在ansible本地主机创建文件 [root@ansible-server ~]# touch /tmp/test.txt #将本地/tmp/test.txt文件拷贝至ftp组内主机的/var/ftp目录下 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/tmp/test.txt dest=/var/ftp/' [root@ansible-server ~]# ansible ftp -m shell -a 'ls /var/ftp' content:此参数当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错#使用content参数在远程主机直接创建文件并写入内容 [root@ansible-server ~]# ansible ftp -m copy -a 'content="hello" dest=/var/ftp/test1' #查看远程主机文件内容 [root@ansible-server ~]# ansible ftp -a 'cat /var/ftp/test1'force:此参数当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变#本地创建test1文件,并写入abc [root@ansible-server ~]# echo abc > test1 [root@ansible-server ~]# cat test1 #使用force参数指定当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,不执行覆盖 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/tmp/test1 dest=/var/ftp/test1 force=no' 192.168.0.25 | SUCCESS => { "changed": falsebackup:此参数当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机#使用backup参数指定当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,对远程主机文件先进行备份 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test1 dest=/var/ftp backup=yes' #查看远程主机信息 [root@ansible-server ~]# ansible ftp -a 'ls /var/ftp' ... test1 test1.12778.2021-03-16@00:57:26~ #备份后文件owner:此参数指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。#创建文件 [root@ansible-server ~]# touch test2 #拷贝test2文件到远程主机,并指定属主为ftp用户 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test2 dest=/var/ftp/ owner=ftp' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test2' 192.168.0.29 | CHANGED | rc=0 >> -rw-r--r--. 1 ftp root 6 3月 16 01:07 /var/ftp/test2 #可以看到文件的属主以变成ftp用户group:此参数指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错#创建test3文件 [root@ansible-server ~]# touch test3 #拷贝test3文件到远程主机,并指定属主为ftp用户,所属组为ftp用户基本组 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test3 dest=/var/ftp/ owner=ftp group=ftp' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test3' 192.168.0.29 | CHANGED | rc=0 >> -rw-r--r--. 1 ftp ftp 0 3月 16 01:16 /var/ftp/test3mode:此参数指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r–r–“,则可以使用mode=0644表示#拷贝test4文件到远程主机,并指定属主为ftp用户,所属组为ftp用户基本组,并指定权限为0744 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test4 dest=/var/ftp/ owner=ftp group=ftp mode=0744' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test4' #如果后期需要修改权限可以使用shell模块修改 [root@ansible-server ~]# ansible ftp -m shell -a 'chmod 755 /var/ftp/test4' [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test4' 192.168.0.29 | CHANGED | rc=0 >> -rwxr-xr-x. 1 ftp ftp 0 3月 16 01:23 /var/ftp/test4 #可以看到,权限已被修改成功Ansible剧本PlaybookAnsible playbook剧本介绍在ansible中,类似”脚本”的文件被称作”剧本”,英文名称为’playbook’ ,用于配置,部署,和管理被控节点我们只需要把模块按照顺序编排在playbook剧本中,ansible就会按照剧本一步一步的执行,最终达到我们的目的playbook是由一个或多个”play”组成的列表,当我们在工作中往往需要不止做一件事情的时候,使用playbook会更加适合。playbook 与ad-hoc相比是一种完全不同的运用方式,剧本需要遵循YAML语法格式编写,文件名以”.yaml”或者”.yml”作为文件名后缀playbook核心元素hosts:执行的远程主机列表’tasks:任务集variables:内置变量或自定义变量在playbook中调用tempaltes 模板,可替换文件中的变量并实现一些简单逻辑的文件handles 和notify结合使用,由特定条件触发的操作,满足条件方执行,否则不执行tags标签,指定某条任务执行,用于选择运行playbook中的部分代码。编写第一个Playbook剧本#使用ping模块测试远程主机联通性,并在远程主机创建目录 [root@ansible-server ~]# vim ping_websrvs.yml --- - hosts: websrvs remote_user: root tasks: - name: ping websrvs ping: - name: mkdir directory test shell: cmd: mkdir /test #第一行:playbook剧本以---开头表明yaml格式文件 #第二行:使用”- “作为开头,”- “表示一个列表项,”- “后面使用hosts关键字指定要操作的主机组名,(注意:横杠后面有空格)表示我要在websrvs这组主机上进行操作,在YAML语法中,键值对需要使用冒号作为分隔,而且冒号后边必须还要有一个空格作为分隔 #第三行:remote_user关键字可以指定在进行远程操作时使用哪个用户进行操作 #第四行:tasks关键字是用来指定要执行哪些操作任务,之后的行都属于tasks任务列表中的任务,每个任务都以”- “开头,每个任务都有自己的名字,任务名使用name关键字进行指定 #运行剧本需要使用’ansible-playbook’命令 [root@ansible-server ~]# ansible-playbook ping_websrvs.yml TASK [Gathering Facts] **************************************************************** ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [ping websrvs] **************************************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [mkdir directory test] **************************************************************** changed: [192.168.0.28] changed: [192.168.0.26] changed: [192.168.0.27] PLAY RECAP ****************************************************************** 192.168.0.26 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.27 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.28 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Playbook源码部署Nginx的Web服务[root@ansible-server ~]# vim nginx.yml --- - hosts: websrvs remote_user: root tasks: - name: Copy nginx copy: src=/root/nginx-1.18.0.tar.gz dest=/tmp - name: install Rely yum: name=gcc,pcre-devel,openssl-devel,zlib - name: unpacek nginx shell: tar -xf /tmp/nginx-1.18.0.tar.gz -C /tmp - name: install nginx shell: cd /tmp/nginx-1.18.0 && ./configure && make && make install - name: Copy index.html copy: src=/root/index.html dest=/usr/local/nginx/html - name: start nginx shell: /usr/local/nginx/sbin/nginx #--syntax-check 用于检测playbook语法是否正确,如果正确只返回playbook名称 [root@ansible-server ~]# ansible-playbook --syntax-check nginx.yml playbook: nginx.yml #--check 用于模拟执行playbook [root@ansible-server ~]# ansible-playbook --check nginx.yml PLAY [websrvs] **************************************************** TASK [Gathering Facts] ******************************************************************* ok: [192.168.0.28] ok: [192.168.0.26] ok: [192.168.0.27] TASK [Copy nginx] ************************************************* ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [install Rely] *********************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [unpacek nginx] ********************************************** skipping: [192.168.0.26] skipping: [192.168.0.28] skipping: [192.168.0.27] TASK [install nginx] ****************************************************************** skipping: [192.168.0.26] skipping: [192.168.0.27] skipping: [192.168.0.28] TASK [Copy index.html] ****************************************************************** ok: [192.168.0.27] ok: [192.168.0.26] ok: [192.168.0.28] TASK [start nginx] ****************************************************************** skipping: [192.168.0.26] skipping: [192.168.0.27] skipping: [192.168.0.28] PLAY RECAP ****************************************************************** 192.168.0.26 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 192.168.0.27 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 192.168.0.28 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 #使用playbook剧本批量在远程主机源码安装nginx [root@ansible-server ~]# ansible-playbook nginx.yml PLAY [websrvs] ****************************************************************** TASK [Gathering Facts] ****************************************************************** ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [Copy nginx] ****************************************************************** changed: [192.168.0.28] changed: [192.168.0.27] changed: [192.168.0.26] TASK [install Rely] ****************************************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [unpacek nginx] ****************************************************************** changed: [192.168.0.28] changed: [192.168.0.26] changed: [192.168.0.27] TASK [install nginx] ******************************************************************* changed: [192.168.0.26] changed: [192.168.0.28] changed: [192.168.0.27] TASK [Copy index.html] ******************************************************************* changed: [192.168.0.27] changed: [192.168.0.28] changed: [192.168.0.26] TASK [start nginx] ******************************************************************** changed: [192.168.0.27] changed: [192.168.0.28] changed: [192.168.0.26] PLAY RECAP ******************************************************************** 192.168.0.26 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.27 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.28 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2021年02月25日
297 阅读
0 评论
0 点赞
2021-02-24
LINUX运维学习之综合架构篇——Ansible 批量管理服务(中)
1、ansible模块说明:yum模块 name --- 指定安装软件名称 state --- 指定是否安装软件 installed --- 安装软件 present latest absent --- 卸载软件 removed使用方法 ansible 172.16.1.31 -m yum -a "name=iotop state=installed" service模块: 管理服务器的运行状态 停止 开启 重启name: --- 指定管理的服务名称state: --- 指定服务状态started 启动restarted 重启stopped 停止enabled --- 指定服务是否开机自启动ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"cron模块: 批量设置多个主机的定时任务信息 crontab -e * * * * * 定时任务动作 分 时 日 月 周 minute: # Minute when the job should run ( 0-59, *, */2, etc ) 设置分钟信息 hour: # Hour when the job should run ( 0-23, *, */2, etc ) 设置小时信息 day: # Day of the month the job should run ( 1-31, *, */2, etc ) 设置日期信息 month: # Month of the year the job should run ( 1-12, *, */2, etc ) 设置月份信息 weekday: # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc ) 设置周信息 job 用于定义定时任务需要干的事情基本用法: ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'" 基本用法:ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'" 扩展用法:给定时任务设置注释信息 ansible 172.16.1.31 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"如何删除指定定时任务 ansible 172.16.1.31 -m cron -a "name='time sync01' state=absent"PS: ansible可以删除的定时任务,只能是ansible设置好的定时任务如何批量注释定时任务ansible 172.16.1.31 -m cron -a "name='time sync' job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' disabled=yes"mount: 批量进行挂载操作src: 需要挂载的存储设备或文件信息path: 指定目标挂载点目录fstype: 指定挂载时的文件系统类型statepresent/mounted --- 进行挂载present: 不会实现立即挂载,修改fstab文件,实现开机自动挂载mounted: 会实现立即挂载, 并且会修改fstab文件,实现开机自动挂载 absent/unmounted --- 进行卸载absent: 会实现立即卸载, 并且会删除fstab文件信息,禁止开机自动挂载unmounted: 会实现立即卸载, 但是不会会删除fstab文件信息 user模块: 实现批量创建用户基本用法: ansible 172.16.1.31 -m user -a "name=oldboy01"扩展用法:1) 指定用户uid信息 ansible 172.16.1.31 -m user -a "name=oldboy02 uid=6666"2) 指定用户组信息 ansible 172.16.1.31 -m user -a "name=oldboy03 group=oldboy02" ansible 172.16.1.31 -m user -a "name=oldboy04 groups=oldboy02"3) 批量创建虚拟用户 ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"4) 给指定用户创建密码PS: 利用ansible程序user模块设置用户密码信息,需要将密码明文信息转换为密文信息进行设置生成密文密码信息方法:方法一: ansible all -i localhost, -m debug -a "msg={{ '密码信息123456' | password_hash('sha512', 'oldboy') }}" ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy') }}" 方法二:(忽略) mkpasswd --method=sha-512 方法三: yum install -y python-pip pip install passlib python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))" ansible 172.16.1.31 -m user -a 'name=oldboy08 剧本的编写方法剧本的作用:可以一键化完成多个任务自动化部署rsync服务:服务端:1、安装软件(备份服务器) ansible 172.16.1.41 -m yum -a "name=rsync state=install"2、编写文件:(把配置好的文件传送到服务器) ansible 172.16.1.41 -m copy -a "src=/xxx/rsyncd.conf dest=/etc/" 3、创建用户 ansible 172.16.1.41 -m user -a "name=rsync create_home=no shell=/sbin/nologin"4、创建目录 ansible 172.16.1.41 -m file -a "dest=/backup state=directory owen=rsync group=rsync"5、创建密码文件 ansible 172.16.1.41 -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"6、启动服务 ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"客户端操作:1、创建密码文件ansible 客户端地址 -m copy -a "content='rsync_backup:123' dest=/etc/rsync.password mode=600"剧本编写规范: pyyaml -- 三点要求 1. 合理的信息缩进 两个空格表示一个缩进关系 标题一 标题二 标题三 PS: 在ansible中一定不能用tab进行缩进 2. 冒号的使用方法 hosts: 172.16.1.41 tasks: yum: name=xxPS: 使用冒号时后面要有空格信息 以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格 4. 短横线应用 -(列表功能) PS: 使用短横线构成列表信息,短横线后面需要有空格 开始编写脚本 mkdir /etc/ansible/ansible-playbook vim rsync_server.yaml说明: 剧本文件扩展名尽量写为yaml 1. 方便识别文件是一个剧本文件 2. 文件编写时会有颜色提示 - hosts: 172.16.1.41 tasks: - name: 01-install rsync yum: name=rsync state=installed - name: 02-push conf file copy: src=/tmp/rsyncd.conf dest=/etc/ 如何执行剧本:第一个步骤: 检查剧本的语法格式 ansible-playbook --syntax-check rsync_server.yaml第二个步骤: 模拟执行剧本 ansible-playbook -C rsync_server.yaml第三个步骤: 直接执行剧本 ansible-playbook rsync_server.yaml
2021年02月24日
171 阅读
0 评论
0 点赞
2021-02-23
LINUX运维学习之综合架构篇——Ansible 批量管理服务上
1、什么是ansibleansible 是一个基于Python开发的自动化运维工具其功能实现基于SSH远程连接服务ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能ansible官方网站:https://docs.ansible.com/2、ansible 的特点列表项目不需要安装客户端。基于系统自带的sshd服务不需要服务端需要依靠大量的模块实现批量管理功能配置文件/etc/ansible/ansible.cfg3、ansible 批量管理服务意义提高工作效率提高工作准确度减少维护的成本减少重复性工作4、ansible 批量管理服务功能可以实现批量系统操作配置可以实现批量软件服务部署可以实现批量文件数据分发可以实现批量系统信息收集常用模块模块说明command执行命令模块,ansible命令执行默认模块shell执行shell脚本模块script把脚本发到客户端,然后执行,执行脚本命令在远端服务器上copy把文件发送到远端file设定文件属性模块service系统服务管理模块cron定时任务管理模块yumyum软件包安装管理模块synchronize使用rsync同步文件模块5、ansible 批量管理服务部署管理端服务器1、安装部署软件 yum install -y ansible2、需编写主机清单文件vim /etc/ansible/hosts添加需要管理的主机的IP地址定义可以管理的主机的信息 172.16.1.31 172.16.1.41 172.16.1.73、测试是否可以管理多个主机,由于我没开1.7 的主机会报个错,影响不大 ansible all -a "hostname"6、ansible服务架构信息1、主机清单配置 2、 软件模块信息 3、 基于秘钥连接主机 4、 主机需要关闭selinux 5、 软件剧本功能7、ansible 软件模块应用ansible官方网站:https://docs.ansible.com/模块的应用语法格式:ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"命令类型模块:command – Executes a command on a remote node在一个远程主机上执行一个命令 ansible 172.16.1.31 -m command -a "hostname"拓展应用:1、chdir Change into this directory before running the command.在执行命令之前对目录进行切换 ansible 172.16.1.31 -m coomand -a "chdir=/tmp touch test.txt"如果不加chdir=/tmp,默认在/root下创建2、creates If it already exists, this step won’t be run.若是文件存在了,不执行命令操作 ansible 172.16.1.31 -m command -a "creates=/tmp/hosts chdir=/tmp touch test.txt"3、removes If it already exists, this step will be run.若是文件存在,这个步骤将执行 ansible 172.16.1.31 -m command -a “removes=/tmp/hosts chdir=/tmp touch oldboy.txt”4、free_form(required)The command module takes a free form command to run. There is no parameter actually named ‘free form’. See the examples!使用command模块的时候,-a参数后面必须写上一个合法linux命令信息注意事项:有些符号信息无法识别: <", ">", "|", ";" and "&"7、第二个模块:shell (万能模块)shell – Execute commands in nodes在节点上执行操作用法: ansible 172.16.1.31 -m shell -a "hostname" ansible 172.16.1.31 -m shell -a "cd /tmp;pwd"实践应用: 利用shell执行脚本 第一个步骤: 编写一个脚本 vim /server/scripts/yum.sh #!/bin/bash yum install -y htop第二个步骤: 将脚本发送到远程主机 scp -rp yum.sh 172.16.1.31:/server/scripts第三个步骤: 将脚本权限进行修改(添加执行权限) ansible 172.16.1.31 -m shell -a "chmod +x /server/scripts/yum.sh"第四个步骤: 运行ansible命令执行脚本 ansible 172.16.1.31 -m shell -a "/server/scripts/yum.sh"rpm -e htop --nodeps 卸载软件8、script (万能模块)第一个步骤: 编写一个脚本第二个步骤: 运行ansible命令执行脚本 ansible 172.16.1.31 -m scripts -a "/server/scripts/yum.sh"PS: scripts模块参数功能和command模块类似9、文件类型模块:copy – Copies files to remote locations将数据信息进行批量分发基本用法: ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root" 172.16.1.31 | CHANGED => { --- 对哪台主机进行操作 "changed": true, --- 是否对主机信息进行改变 "checksum": "6ed7f68a1d6b4b36c1418338b2001e421eeba270", --- 生成一个文件校验码==MD5数值 "dest": "/etc/hosts", --- 显示目标路径信息 "gid": 0, --- 显示复制后文件gid信息 "group": "root", --- 显示复制后文件属组信息 "md5sum": "7afd7b74854f0aaab646b3e932f427c0", --- 生成一个文件校验码==MD5数值 "mode": "0644", --- 显示复制后文件权限信息 "owner": "root", --- 显示复制后文件属主信息 "size": 401, --- 显示文件的大小信息 "src": "/root/.ansible/tmp/ansible-tmp-1557804498.23-26487341925325/source", "state": "file", --- 显示文件的类型信息 "uid": 0 --- 显示复制后文件uid信息 }补充说明: ansible软件输出颜色说明:绿色信息: 查看主机信息/对主机未做改动黄色信息: 对主机数据信息做了修改红色信息: 命令执行出错了粉色信息: 忠告信息蓝色信息: 显示ansible命令执行的过程拓展应用:在传输文件是修改文件是属主和属组信息 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root owner=oldboy group=oldboy"在传输文件时修改文件的权限信息 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/ mode=1777"在传输数据文件信息时对远程主机源文件进行备份ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/ backup=yes"创建一个文件并直接编辑文件的信息 ansible 172.16.1.31 -m copy -a "content='oldboy123' dest=/etc/hosts"remote_src If no, it will search for src at originating/master machine.src参数指定文件信息,会在本地管理端服务进行查找If yes it will go to the remote/target machine for the src. Default is no.src参数指定文件信息,会从远程主机上进行查找 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root"这个命令会把远程管理端的hosts文件传输到服务端 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root remote_src=yes"这个命令会把远程服务端的hosts文件移动到/root目录PS: ansible软件copy模块复制目录信息 ansible 172.16.1.31 -m copy -a "src=/oldboy dest=/oldboy" src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制 ansible 172.16.1.31 -m copy -a "src=/oldboy/ dest=/oldboy" src后面目录有/: 只将目录下面的内容都进行远程传输复制10、file – Sets attributes of files设置文件属性信息基本用法: ansible 172.16.1.31 -m file -a "dest=/etc/hosts owner=oldboy group=oldboy mode=666"扩展用法:1、可以利用模块创建数据信息 (文件 目录 链接文件) state 参数 =absent --- 缺席/删除数据信息 =directory --- 创建一个目录信息 =file --- 检查创建的数据信息是否存在 绿色存在 红色不存在 =hard --- 创建一个硬链接文件 =link --- 创建一个软链接文件 =touch --- 创建一个文件信息创建目录信息: ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=directory" ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy01/oldboy02/ state=directory"创建文件信息: ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=touch"创建链接文件信息:软链接: ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_hard.txt state=hard"硬链接: ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_link.txt state=link"2、 可以利用模块删除数据信息 ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=absent" ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=absent"
2021年02月23日
170 阅读
0 评论
0 点赞
2021-02-01
LINUX运维学习之综合架构篇——综合架构远程管理服务(SSH)
1、远程管理服务概念SSH是一个安全的远程连接,它的数据信息是加密的,端口号为22,SSH服务默认可以为root用户连接。TELNET是一个不安全的远程连接,它的数据信息为明文,端口号为23,默认不可以用root用户连接。2、SSH服务连接工作原理(数据加密)(1)客户端 执行远程连接命令(2)客户端 服务端 建立三次握手过程(3)服务端 让客户端进行确认是否接收服务端公钥信息(4)客户端 进行公钥确认,接收公钥信息(5)服务端 让客户端确认登录用户密码信息(6)客户端 进行密码信息确认(7)客户端 服务器 远程连接建立成功3、私钥和公钥的作用:利用私钥和公钥对数据信息进行加密处理利用公钥和私钥进行用户身份认证基于密码的方式进行远程连接: 公钥和私钥只能完成数据加密过程基于秘钥的方式进行远程连接: 公钥和私钥可以完成身份认证工作4、SSH远程连接方式基于口令的方式进行远程连接,连接比较麻烦 不太安全基于密钥的方式进行远程连接,连接方便 比较安全基于秘钥方式连接过程(原理)客户端(管理端) 执行命令创建秘钥对客户端(管理端) 建立远程连接(口令),发送公钥信息客户端(管理端) 再次建立远程连接服务端(被管理端) 发送公钥质询信息客户端(管理端) 处理公钥质询信息,将质询结果返回给服务端服务端(被管理端) 接收到质询结果,建立好远程连接5、SSH实现基于密钥连接的部署步骤(1)创建一个密钥对信息 ssh-keygen -t dsa(2)管理端需要将公钥进行分发 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31(3)远程测试 ssh root@172.16.1.31 hostname ssh 172.16.1.316、如何不用交互输入密码信息(1)安装软件 yum install -y sshpass(2)执行免交互式分发公钥信息 sshpass -p 123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41(3)如何不要输入连接yes或no的确认信息 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 "-o StrictHostKeyChecking=no"(4)服务端口号发生变化 sshpass -p 123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 "-o StrictHostKeyChecking=no"7、分发公钥脚本 vim fenfa_pub_key.sh #!/bin/bash for ip in {7,31,41} do echo "================= host 172.16.1.$ip pub-key start fenfa =======" sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.$ip "-o StrictHostKeyChecking-no" &>/dev/null echo "host 172.16.1.$ip fenfa success" echo "================= host 172.16.1.$ip fenfa end ===================" echo "" done8、SSH服务配置文件 /etc/ssh/sshd_config Port 22 --- 修改服务端口信息 ListenAddress 0.0.0.0 --- 监听地址 指定一块网卡能够接受远程访问请求 PS: 指定监听地址只能是本地网卡上有的地址 PermitEmptyPasswords no --- 是否允许远程用户使用空密码登录,默认不允许 PermitRootLogin yes --- 是否禁止root用户远程连接主机 建议改为no GSSAPIAuthentication no --- 是否开启GSSAPI认证功能 不用的时候关闭 UseDNS no --- 是否开启反向DNS解析功能 建议进行关闭9、SSH远程服务防范入侵的案例1、用密钥登录,不用密码登陆2、牤牛阵法:解决SSH安全问题 a.防火墙封闭SSH,指定源IP限制(局域网、信任公网) b.开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)。3、尽量不给服务器外网IP4、最小化(软件安装-授权)5、给系统的重要文件或命令做一个指纹 /etc/passwd md5sum 11110000aaaabbbb 监控 inotify /bin 监控6、给他锁上 chattr +iPS:SSH相关的命令总结 ssh-keygen ssh-copy-id sshpass ssh scp sftp 172.16.1.41 ls 查看远程ftp服务器信息 cd --- 查看远程ftp服务器信息 lls 查看本地ftp客户端信息 lcd --- 查看本地ftp客户端信息 get --- 下载信息 put --- 上传信息 help --- 查看命令帮助 bye --- 退出ftp连接
2021年02月01日
140 阅读
0 评论
0 点赞
1
...
9
10
11