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模块查看和帮助
查找模块
ansible-doc -l #模块就Linux命令了。
查看某个模块的具体参数帮助
ansible-doc -s command #Linux命令参数
8、ansible模块
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模块
chdir 在执行命令之前,通过cd命令进入到指定目录中
creates 定义一个文件是否存在,如果不存在,则运行相应命令;存在跳过此步骤
注:执行的脚本必须在远程服务器上存在
creates 定义文件是否存在,如果不存在,则运行相应命令,如果存在跳过此步骤
2.script模块
creates 定义文件是否存在,如果不存在,则运行相应命令,如果存在跳过此步骤
free_form(必有参数) 参数信息中可以输入任何系统命令信息,实现远程管理
removes 定义文件是否存在,如果存在,则运行相应命令,如果不存在跳过此步骤
3.copy模块
src — 推送数据的源文件信息
dest — 推送数据的目标路径
backup — 对推送传输过去的文件,进行备份
content — 直接批量在被管理端文件中添加内容
group — 将本地文件推送到远端,指定文件属组信息
owner — 将本地文件推送到远端,指定文件属主信息
mode — 将本地文件推送到远端,指定文件权限信息
force — 分为force=no或yes,如果目标主机包含该文件,但内容不同,设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
4.yum安装模块
name ---指定要安装的软件包名称
state ---指定使用yum的方法
installed,present ---安装软件包
removed,absent ---移除软件包
latest ---安装最新软件包
5.file模块
path 指定远程主机目录或文件信息
recurse — 递归授权
state —
directory — 在远端创建目录
touch — 在远端创建文件
link — link或hard表示创建链接文件
absent — 表示删除文件或目录
mode — 设置文件或目录权限
owner — 设置文件或目录属主信息
group — 设置文件或目录属组信息
6.systemd模块
name 定义要启动服务的名称
state 指定服务状态
started 启动服务
stopped 停止服务
restarted 重启服务
reloaded 平滑重启
7.crond模块
minute 分
hour 时
day 日
month 月
weekday 周
job 任何计划执行的命令,state要等于present
backup 是否备份之前的任务计划
user 新建任务计划的用户
8.group模块
name — 指定创建的组名
gid — 指定组的gid
state
absent — 移除远端主机的组
present — 创建远端主机的组(默认)
user模块
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命名机制的一个子集