DAY 37
SSH服务知识与批量管理项目实践
1、基础端口
873 rsync
22? ssh
25? smtp? 邮件发送服务
110 pop3 邮件接收服务
80? web? 网页服务
23? ? ?? telnet
111? ? ? rpcbind
21? ? ?? ftp
3389? ?? windows远程桌面
2、SSH批量管理
2.1ssh服务端软件
yum install openssl openssh -y
rpm -qa openssh openssl
openssh-7.4p1-16.el7.x86_64?? #<==ssh服务。
openssl-1.0.2k-16.el7.x86_64? #<==加密用的ssl。
2.2ssh服务配置优化:
####Start by oldboy#2018-04-26###
PermitEmptyPasswords no
UseDNS no
GSSAPIAuthentication no
#ListenAddress 172.16.1.7:22
####End by oldboy#2018-04-26###
2.3基础了解
2.3.1认证方式
密码认证
ssh 172.16.1.31 需要输入key和密码pass
秘钥认证
ssh-keygen交互式?? 连续回车 出来私发和公钥
非交换式ssh-keygen -f ~/.ssh/id_rsa? -P '' -q
参数讲解:
ssh-keygen:密钥对创建工具
[-P old_passphrase]? 密码
[-f output_keyfile]? 输出的秘钥文件
? ? [-q]? ? ?? 不输出信息? ? ?
[-t dsa ]? 指定秘钥类型
ssh-copy-id? #专业拷贝密钥中的公钥文件的。
-f: force mode 强制
[-i [identity_file]] 指定秘钥文件
[[-o <ssh -o options>] ...] 指定ssh参数选项。
2.3.2配置文件
/etc/ssh/ssh_config
2.4? sshpass工具:指定密码非人工交互分发秘钥
yum install -y sshpass
非分交互式分发密钥sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7
2.5批量分发公钥脚本
#!/bin/bash
yum install sshpass -y &&\
#在管理机上输入
ssh-keygen? -t rsa -f ~/.ssh/id_rsa -q?? -P '' &&\
#如果创建过公钥? 可以忽略或者 y
for i in 5 6 7 8 31 41 51;do sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub 172.16.1.$i "-o StrictHostKeyChecking=no";done
DAY 38
ansible远程管理服务器的工具软件
1、基于Python语言实现,由Paramiko和PyYAML两个关键模块构建。
2、安装
yum install epel-release -y
yum install ansible -y
#如果有libselinux-python就不执行下面的命令了。
#rpm -qa |grep libselinux-python
#yum install libselinux-python -y
其他所有机器:
#rpm -qa |grep libselinux-python
#yum install libselinux-python -y
3、配置文件
/etc/ansible/hosts
/etc/ansible/ansible.cfg 配置文件?? 74行或者374行注释掉
4、命令格式
ansible? ? oldboy? ? ? -m? ? command? ? -a? ?? "free -m"
? ? ? ? ? ? ? 模块名? ? ? ? ? ? ? ? ? ?? 参数? ? ? ? ? ? ? ? ? 执行命令
5、使用anseble命令时解决密钥的问题
一种是提前执行sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7后再执行anseble
另一种是
在/etc/ansible/hosts添加:
[oldboy_pass]
172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456?? ansible_ssh_port(端口)=
172.16.1.8 ansible_ssh_user=root ansible_ssh_pass=123456?? ansible_ssh_port(端口)=
/etc/ansible/ansible.cfg 配置文件?? 74行或者374行注释掉
6、ansible命令参数
-m MODULE_NAME, ??槊?,默认command
-a MODULE_ARGS, 模块参数
-f FORKS ? ? 并发进程数,默认5个。
-i INVENTORY(default=/etc/ansible/hosts)指定主机列表文件
7、nsible??椴榭春桶镏?/p>
查找模块
ansible-doc -l? ? ? ? ? #??榫蚅inux命令了。
查看某个??榈木咛宀问镏?/p>
ansible-doc -s command? #Linux命令参数
8、ansible???/p>
ansible-doc -s command
argv
允许用户以列表和字符串的形式提供命令。只能提供字符串或列表形式,不能提供
chdir
在运行该命令之前,请切换到此目录
[root@m01 ~]# ansible oldboy? -m command -a "pwd chdir=/etc"
creates
文件名或(从2.0开始)glob模式。如果它已经存在,这个步骤将不会运行
参数:creates=/etc? 相当于条件测试? [ -e /etc ]||pwd 和下面removes相反
[root@m01 ~]# ansible oldboy? -m command -a "pwd creates=/etc"
removes
文件名或(从2.0开始)glob模式。如果已经存在,则运行此步骤*
参数:removes=/root 相当于条件测试 [ -e /root ]&&ls /root
ansible oldboy? -m command -a "ls /root removes=/root"
stdin
将命令的stdin直接设置为指定的值。
warn
如果command_warnings在ansible中打开。cfg,如果设置为“no”,不要警告此特定行
参数:warn=False 忽略警告
[root@m01 ~]# ansible oldboy? -m command -a "chmod 000 /etc/hosts warn=False"
DAY 39
Ansible批量管理工具模块和参数深入实践
1.shell???/p>
? ? ?chdir?? 在执行命令之前,通过cd命令进入到指定目录中
? ? ?creates 定义一个文件是否存在,如果不存在,则运行相应命令;存在跳过此步骤
? ? ?注:执行的脚本必须在远程服务器上存在
? ? creates? 定义文件是否存在,如果不存在,则运行相应命令,如果存在跳过此步骤
2.script模块
? ? creates? 定义文件是否存在,如果不存在,则运行相应命令,如果存在跳过此步骤
? ? free_form(必有参数) 参数信息中可以输入任何系统命令信息,实现远程管理
? ? removes?? 定义文件是否存在,如果存在,则运行相应命令,如果不存在跳过此步骤
3.copy???/p>
? ? src — 推送数据的源文件信息
? ?dest — 推送数据的目标路径
? ?backup — 对推送传输过去的文件,进行备份
? ?content — 直接批量在被管理端文件中添加内容
? ?group — 将本地文件推送到远端,指定文件属组信息
? ? owner — 将本地文件推送到远端,指定文件属主信息
? ? mode — 将本地文件推送到远端,指定文件权限信息
? ? force — 分为force=no或yes,如果目标主机包含该文件,但内容不同,设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
4.yum安装???/p>
? ? name? ? ---指定要安装的软件包名称
? ? state?? ---指定使用yum的方法
? ? installed,present?? ---安装软件包
? ? removed,absent? ? ? ---移除软件包
? ? latest? ? ? ? ? ? ?? ---安装最新软件包
5.file???/p>
? ? path 指定远程主机目录或文件信息
? ? recurse — 递归授权
? ? state —
? ? directory — 在远端创建目录
? ? touch — 在远端创建文件
? ? link — link或hard表示创建链接文件
? ? absent — 表示删除文件或目录
? ? mode — 设置文件或目录权限
? ? owner — 设置文件或目录属主信息
? ?group — 设置文件或目录属组信息
6.systemd模块
? ?name? 定义要启动服务的名称
? ?state? 指定服务状态
? ?started?? 启动服务
? ?stopped?? 停止服务
? ?restarted?? 重启服务
? ? reloaded?? 平滑重启
7.crond???/p>
? ?minute 分
? ? hour 时
? ? day 日
? ?month 月
? ?weekday 周
? ? job? 任何计划执行的命令,state要等于present
? ? backup? 是否备份之前的任务计划
? ? user? 新建任务计划的用户
8.group模块
? ? name — 指定创建的组名
? ? gid — 指定组的gid
? ? state
? ? absent — 移除远端主机的组
? ? present — 创建远端主机的组(默认)
? ? user???/p>
? ? uid — 指定用户的uid
? ? group — 指定用户组名称
? ? groups — 指定附加组名称
? ?password — 给用户添加密码
? ?shell — 指定用户登录shell
? ?create_home — 是否创建家目录
9.mount模块
? ? fstype 指定挂载文件类型
? ?path 指定挂载点
? ?opts 设定挂载的参数选项信息
? ?src? 要被挂载的目录设备信息(共享目录)
? ?boot? 确定是否在启动时文件系统被挂载
? ?只应用在solaris系统上
? ?(added in 2.2)
? ? ?dump? Dump(参见 fstab5)。注意如果设置为null或状态设置为present,它将停止工作,并将在随后的运行中复制条目
对solaris系统没有效果
? ? state?
如果为mounted在fstab文件中的设备将被激活挂载和适当配置
# 如果为unmounted设备将被卸载并不会改变fstab文件信息bsent和present只处理fstab,但不影响目前的挂载
DAY 40
老男孩Linux云计算运维58期Day40-Ansible批量管理剧本编写及自动化集群配置实践
1、playbook
1.1 什么是playbook?
? ? 把所有操作按照ansible编程语法,放在文件里执行就是playbook。
1.2 ansible剧本编写格式说明
? ? ansible剧本遵循PYyaml语法规则进行编写,yaml文件基本编写规则如下说明:
? ? 规则一:缩进
? ? yaml使用一个固定的缩进风格表示数据层结构关系,需要每个缩进级别由两个空格组成。切记一定不能使用tab键进行缩进。
? ? 规则二:冒号
? ? 每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)
? ? 规则三:短横线
? ? 想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分
2、 playbook替代方案
? ? playbook替代方案1:不同样
[root@m01 ~]# cat ansible.sh #判断 循环,可以脚本实现。
ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch"
ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch owner=oldboy group=oldboy mode=ugo=rwx"
ansible oldboy -m yum -a "name=nginx state=installed"
ansible oldboy -m service -a "name=crond state=started enabled=yes"
ansible oldboy -m cron -a "name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"
? ? playbook替代方案2:通用
? ? [root@m01 ~]# cat ~/set.sh
? ? touch /tmp/oldboy_file
? ? chown oldboy.oldboy /tmp/oldboy_file
? ? yum install nginx -y
? ? /etc/init.d/crond start
? ? chkconfig cornd on
? ? echo '#sync time oldboy' >>/var/spool/cron/root
? ? echo '00 00 * * *? /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root
? ?执行:
? ? ?ansible oldboy -m script -a "~/set.sh"
3、剧本
? ? [root@m01 /etc/ansible/yaml]# cat /etc/ansible/yaml/p1.yml
? ? - hosts: oldboy
? ? ? tasks:
? ? ? ? - name: Create a log file
? ? ? ? ? shell: echo oldboy linux. >/tmp/oldboy.log
? ? [root@m01 /etc/ansible/yaml]# cat p2.yml
? ? - hosts: oldboy
? ? ? tasks:
? ? ? ? - shell: echo oldboy linux. >/tmp/oldboy.log
3.1练习
? ? 定时任务:
ansible oldboy -m cron -a "name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"
#crond-id-001:time sync by oldboy
*/5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1
? 编写剧本:
[root@m01 /etc/ansible/yaml]# cat p4.yml
- hosts: oldboy
? tasks:
? ? - name: Cron time sync
? ? ? cron: name='sync time' minute=*/10 job='/usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1'
DAY 41
老男孩Linux云计算运维58期Day41-HTTP与WWW服务基础介绍
1、DNS,全称Domain Name System
? ? 计算机网络诞生时候
? ? 通过IP地址访问服务器。
? ? IP地址不好记:IP地址.
? ? 1.1.1.1
? ? 发展到后来 就用hosts,所有的访问服务器的主机hosts都加上解析记录
? ? 大家都把解析放到hosts,发生问题。每个人都要改HOSTS
? ?增加网站记录,如何所有知道呢?
? ? 发明了DNS
? ? 上网配置了DNS服务器,只要输入域名地址,就会有DNS服务器告诉你IP是啥。
? ? 企业上网如何让DNS知道他的域名,企业上网购买域名,默认管理平台(默认的DNS),
? ? 解析记录记录。
? ? 自动化解析,不需要分发hosts,不需要客户端做任何配置。
? ? 个人客户端只要DNS地址就行。
? ? 企业不会自建外网DNS,选择购买域名默认DNS,大企业花钱买DNSPOD,F5智能DNS解析。
? ? 服务器端开源工具:bind、powerdns,bind比较流行。
? ? 大企业的内网使用DNS,搭建bind。
2、HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议
? ? HTTP的重要应用之一是WWW服务
? ? HTTP协议的WWW服务应用的默认端口为80
? ? https的默认端口为443
? ? 1、什么是HTTP请求方法
? ? 客户端请求Web服务器时,告诉服务器要执行什么具体的动作。
? ? GET 客户端请求指定资源信息,服务器返回指定资源。
? ? ? ? 浏览网页的过程都是GET方法。
? ? POST 将客户端的数据提交到服务器,例:注册用户。
? ? ? ? 上传图片、视频,都是POST方法。
? ? DELETE 请求服务器删除Request-URI所标识的资源。
? ? MOVE 请求服务器将指定的页面移至另一个网络地址。
? ? HEAD 只请求响应报文中的HTTP首部。
? ? 什么是HTTP状态码?
? ? HTTP状态码(HTTP Status Code)是用来表示Web服务器响应http请求状态的数字代码。
? ? 404 没有你要的东西
? ? 403 权限拒绝
?范例:
? ? 查看响应头
? ? [root@web01 ~]# curl -I www.baidu.com
? ? HTTP/1.1 200 OK
? ? Accept-Ranges: bytes
? ?Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
? ?Connection: Keep-Alive
? ?Content-Length: 277
? ?Content-Type: text/html
? ? Date: Fri, 26 Apr 2019 03:48:34 GMT
? ? Etag: "575e1f60-115"
? ? Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
? ? Pragma: no-cache
? ? Server: bfe/1.0.8.18
? ?2、HTTP报文可分为两种,
? ? 一种是从Web客户端发往Web服务器的HTTP报文,称为请求报文(RequestMessage)。
? ? 另外一种是从Web服务器发往Web客户端的报文,称为响应报文(Response Message)
? ? HTTP的请求和响应报文的格式类似。
? ? MIME类型
? ?Web服务器会把通过Web传输的每个对象都打上名为MIME 类型(MIME type) 的数据格式标签。
? ? MIME类型
? ? URL,全称Uniform Resource Location,中文翻译为统一资源定位符
? ? 网址 就是URL
? ? URI,全称Uniform Resource Identifier,中文翻译为统一资源标识符
? ? URL是URI命名机制的一个子集