一、SSH登陆验证

1.方式一:手动输入密码

2.方式二:基于密钥的方式

1)生成密钥对

[root@m01 ~]# ssh-keygen

2)推送密钥对

1.手动方式
#管理端
[root@m01 ~]# cat .ssh/id_rsa.pub
#被管理端
[root@web01 ~]# vim .ssh/authorized_keys
[root@web01 ~]# chmod 700 .ssh/
[root@web01 ~]# chmod 600 .ssh/authorized_keys

2.命令方式:
#管理端
[root@m01 ~]# ssh-copy-id root@172.16.1.31
[root@m01 ~]# ssh-copy-id root@172.16.1.41

3)巡检脚本

#1.巡检脚本
[root@m01 ~]# vim xunjian.sh 
#!/bin/bash
ip='
7
31
41
'
for i in `echo $ip`;do
     echo "###############172.16.1.$i##############"
     ssh root@172.16.1.$i "$1"
done

#2.巡检脚本
[root@m01 ~]# cat all.sh 
#!/usr/bin/bash
[ $# -ne 1 ] && echo "请输入执行的命令" && exit 1

for i in 31 41
do
    echo "#########172.16.1.$i#####"
    ssh root@172.16.1.$i "$1"
done

二、ssh免密场景

实践场景,用户通过Windows/MAC/Linux客户端连接跳板机免密码登录,跳板机连接后端无外网的Linux主机实现免密登录,架构图如下。
实践多用户登陆一台服务器无密码
实践单用户登陆多台服务器免密码

ssh登陆验证及httpd初始_编程

1.windows使用xshell免密登陆服务器

1.xshell --> 工具 --> 新建用户密钥生成向导
2.下一步 --> 申城公钥对
3.下一步 --> 密钥信息(给密钥起名字,加密码)
4.xshell --> 工具 --> 查看密钥用户管理者
5.密钥属性 --> 公钥
6.将公钥复制到服务器的.ssh目录下的authorized_keys文件
7.授权文件

2.跳板机脚本

#!/bin/bash
#jumpserver
lb01=10.0.0.5
lb02=10.0.0.6
web01=10.0.0.7
web02=10.0.0.8
web03=10.0.0.9
nfs=10.0.0.31
backup=10.0.0.41
db01=10.0.0.51
m01=10.0.0.61
zabbix=10.0.0.71

menu(){
        cat <<-EOF
        +-------------------------+
        |     1) lb01             |
        |     2) lb02             |
        |     3) web01            |
        |     4) web02            |
        |     5) web03            |
        |     6) nfs              |
        |     7) backup           |
        |     8) db01             |
        |     9) m01              |
        |     10) zabbix          |
        |     h) help             |
        +-------------------------+
EOF
}
#菜单函数
menu

#连接函数
connect(){
  ping -c 1 -w 1 $1 &>/dev/null
  if [ $? -eq 0 ];then
    ssh root@$1
  else
    echo -e "\033[5;4;40;31m 别连了,我的哥,$2:$1机器都没开!!!\033[0m"
  fi
}

#控制不让输入ctrl+c,z
trap "" HUP INT TSTP
while true
do
    read -p "请输入要连接的主机编号:" num
    case $num in
            1|lb01)
              connect $lb01 lb01
                    ;;
            2|lb02)
              connect $lb02 lb02
                    ;;
            3|web01)
              connect $web01 web01
                    ;;
            4|web02)
              connect $web02 web02
                    ;;
            5|web03)
                  connect $web03 web03
                    ;;
            6|nfs)
              connect $nfs nfs
                    ;;
            7|backup)
                  connect $backup backup
                    ;;
            8|db01)
                   connect $db01 db01
                    ;;
            9|m01)
                    connect $m01 m01
                    ;;
            10|zabbix)
                    connect $zabbix zabbix
                    ;;
            h|help)
                    clear
                    menu
                    ;;
            close)
                    break
                    ;;
    esac
done

三、免交互expect

1.安装expect

[root@m01 ~]# yum install -y expect

2.编写脚本

[root@m01 ~]# vim xunjian.exp
#!/usr/bin/expect
set ip 10.0.0.31
set pass 1
set timeout 30
spawn ssh root@$ip
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$pass\r"}
}
expect "root@*"  {send "df -h\r"}
expect "root@*"  {send "exit\r"}
expect eof

四、免交互sshpass[扩展]

1.安装

[root@m01 ~]# yum install -y sshpass

2.命令参数

[root@m01 ~]# sshpass -p 1 ssh root@10.0.0.31
[option]
-p:指定密码
-f:从文件中取密码
-e:从环境变量中取密码
-P:设置密码提示

#当连接不上时,可能是因为没有主机信息文件,则加入ssh免交互参数
[root@m01 ~]# sshpass -p 1 ssh -o StrictHostKeyChecking=no root@10.0.0.31

五、ssh安全优化

1.优化内容

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。
1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录
3.密码认证方式改为密钥认证
4.重要服务不使用公网IP地址
5.使用防火墙限制来源IP地址

2.配置

[root@m01 ~]# vim /etc/ssh/sshd_config
#修改ssh端口
Port 2222
#禁止使用root登录服务器
PermitRootLogin no
#禁止使用密码登录服务器
PasswordAuthentication no

UseDNS                  no      # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication    no      # 禁止GSS认证,减少连接时产生的延迟
HTTP协议

一、HTTP协议

1.什么时http

HTTP 全称:Hyper Text Transfer Protocol 
中文名:超文本传输协议

http就是将用户的请求发送到服务器,将服务器请求到的内容传输回给浏览器,浏览器进行解析,解析后变成便于观看的也买你

2.超文本

包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),
因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。

html文件 -> 包含各种各样的元素(URL链接)-> 形成WebPage简称web页面

3.什么是URL

URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文件

当我们访问: baidu.com
实际上访问: http://www.baidu.com:80/index.html

URL由协议、主机和端口(默认为80)以及文件名三部分构成:
#URL:  http://www.baidu.com:80/index.html
	   协议   域名          端口  请求的文件及路径
#协议:stf、ssh、tcp、http、file
#域名:访问的主机名字(有代表性,好记,唯一)
#端口:进入网站的门户
#文件:真实存在于服务器上的文件

HTTP  URL  HTML三者关系
一个完整html页面,是由很多URL组成的,而HTTP协议是用来传输和解析html页面的

二、HTTP协议原理

1.原理

1.首先,当你在浏览器中输入一个网址的时候(https://www.baidu.com/index.html)浏览器会帮你分析,你输入的这个URL
2.其次,浏览器会向DNS服务器请求解析,该URL中的域名www.baidu.com,解析出百度服务器所在的IP地址
3.DNS服务器,会将解析出来的IP地址110.111.112.113并返回给浏览器。
4.浏览器接收到DNS返回的IP地址,立即与该IP所在的服务器建立TCP连接(80端口)。
5.浏览器请求文档,也就是咱们常说的html页面,GET /index.html,并发出HTTP请求报文。
6.服务器给出响应,将请求的index.html文档返回给浏览器,也就是响应HTTP请求的报文。
7.TCP连接响应完之后,释放TCP连接。
8.最后就能显示出,你请求的这个页面了

2.数据报文

GET那一部分内容被称为:请求头信息
GET和HTTP之间有一个空行被称为:请求空行
HTTP中的信息被称为:回应信息
HTTP与faa之间也有个空行被称为:响应空行
faa部分被称为:主体

三、请求页面信息

1.基本信息

#请求的URL
Request URL: https://blog.driverzeng.com/zenglaoshi/2039.html
#请求的方式
Request Method: GET
#状态码
Status Code: 200
#远程主机和端口
Remote Address: 122.193.130.81:443
#
Referrer Policy: no-referrer-when-downgrade

2.请求头部

#请求的域名
:authority: blog.driverzeng.com
#请求的类型
:method: GET
#请求的文件路径
:path: /zenglaoshi/2039.html
#请求的协议
:scheme: https
#请求的资源类型
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
#请求过程压缩
accept-encoding: gzip, deflate, br
#字符类型
accept-language: zh-CN,zh;q=0.9
#登录验证
authorization: Basic emxzX2FkbWluOjFxYXokUkZW
#缓存控制
cache-control: no-cache
#缓存验证
cookie: PHPSESSID=7155d8f835a6580a0fbe6c930c265a40
#缓存
pragma: no-cache

upgrade-insecure-requests: 1
#用户的客户端
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36

3.响应头部

#阿里云信息存储时间
ali-swift-global-savetime: 1597742129
#缓存控制
cache-control: no-store, no-cache, must-revalidate
#压缩
content-encoding: gzip
#文件类型和字符集
content-type: text/html; charset=UTF-8
#时间
date: Tue, 18 Aug 2020 09:15:29 GMT
#加密id
eagleid: 9903e79615977421289024140e
#失效时间
expires: Thu, 19 Nov 1981 08:52:00 GMT
#软连接
link: <https://blog.driverzeng.com/wp-json/>; rel="https://api.w.org/"
link: <https://blog.driverzeng.com/?p=2039>; rel=shortlink
#缓存
pragma: no-cache
#web服务
server: Tengine
#状态码
status: 200
#跨域访问
timing-allow-origin: *
#渲染
vary: Accept-Encoding
#各级缓存
via: cache20.l2cn1817[275,200-0,M], cache4.l2cn1817[276,0], cache4.l2cn1817[276,0], kunlun9.cn206[283,200-0,M], kunlun2.cn206[284,0]

-----cdn服务器的参数-----
x-cache: MISS TCP_MISS dirn:-2:-2
x-pingback: https://blog.driverzeng.com/xmlrpc.php
x-powered-by: PHP/7.1.21
x-swift-cachetime: 0
x-swift-savetime: Tue, 18 Aug 2020 09:15:29 GMT

四、HTTP请求方法

在HTTP请求报文中的方法(Method),是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:
方法(Method) 含义
GET 请求读取一个Web页面
POST 附加一个命名资(如Web页面)
DELETE 删除Web页面
CONNECT 用于代理服务器
HEAD 请求读取一个Web页面的头部
PUT 请求存储一个Web页面
TRACE 用于测试,要求服务器送回收到的请求
OPTION 查询特定选项