服务应用:

    rsync
    nfs
    sersync
运维: 
    怎么连接服务器
        SSH
    怎么批量部署

1.SSH基本概述
SSH是Secure shell Protocol的简写
在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后进行数据传输,确保了传递的数据安全

1).远程连接方式有哪些
    talnet属于明文连接方式,监听在本地23/tcp端口
    ssh属于密文连接方式,监听在本地22/tcp端口

2).SSH远程连接与Telnet远程连接区别
    ssh服务是加密服务协议,telnet服务是非加密服务协议
    ssh服务默认支持root用户登录,telnet默认不支持root用户登录

3).SSH远程服务主要功能
    1.提供远程连接服务器的服务
    2.对传输的数据进行加密

4).具体应用
    telnet主要应用在内网,针对网络设备(路由器,交换机,防火墙)
    ssh针对服务器
 
    通过端口镜像抓其他交换机接口的包

 

案例:使用vireshark验证telnet明文传输与ssh加密传输
环境:
远程服务器:CentOS7.7 m01 10.0.1.71
客户端:windows 10 wrieshark

1.安装telnet-server,实现telnet服务
[root@m01 ~]# yum install -y telnet-server
[root@m01 ~]# systemctl start telnet.socket

2.创建普通用户,用来登录telnet

[root@m01 ~]# useradd oldboy
[root@m01 ~]# echo 123456 | passwd --stdin oldboy

测试服务器端口有没有开启
telnet 10.0.1.71 22
ss -Intup | grep 22
netstat -Intup
nmap -p 22 10.0.1.71
nc 10.0.1.71 22

ssh连接抓包结果

 

 telnet抓包结果

 

2.SSH相关命令
是一个典型的C/S架构

客户端:
    Linux 
        openssh-clients
        ssh命令
    Windows
        Xshell SecureCRT、Putty    
    
服务端
    openssh-server

配置文件

服务端:
[root@m01 ~]# rpm -qc openssh-server 
/etc/ssh/sshd_config
客户端:
[root@m01 ~]# rpm -qc openssh-clients 
/etc/ssh/ssh_config
客户端其他工具:
[root@m01 ~]# rpm -ql openssh-clients 
/usr/bin/scp     *****              --远程拷贝命令
/usr/bin/sftp                       --远程文件传输命令
/usr/bin/slogin                     --远程登录命令
/usr/bin/ssh      *****             --远程连接登录命令  
/usr/bin/ssh-copy-id  *****         --远程分发公钥命令  
[root@m01 ~]# rpm -ql openssh
/usr/bin/ssh-keygen  *****          --ssh秘钥生成工具

openssh软件分析
[root@m01 ~]# yum list openssh*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Installed Packages
openssh.x86_64                                                   7.4p1-21.el7                                    @anaconda
openssh-clients.x86_64                                           7.4p1-21.el7                                    @anaconda
openssh-server.x86_64                                            7.4p1-21.el7 

[root@m01 ~]# rpm -ql openssh-server 
/etc/ssh/sshd_config                --ssh服务配置文件
/usr/sbin/sshd                      --ssh服务进程启动命令

ssh客户端包含ssh以及像scp(远程拷贝)、slogin(远程登录)、sftp(安全FTP文件传输)等应用程序

1).ssh远程登录服务器命令
ssh -p22 oldboy@10.0.1.71 [commad]

# ssh命令 
# -p(小写),用于指定远程主机端口,默认22端口可省略
# oldboy@remotehost
# "@"前面为用户名,如果用当前用户连接,可以不指定用户
# "@"后面为要连接的服务器的IP

2).scp复制数据至远程主机命令(全量复制)

# scp命令 
# -p(大写)指定端口,默认22端口可不写
# -r 表示递归拷贝目录 
# -p 表示在拷贝文件前后保持文件或目录属性不变
# -l 限制传输使用带宽(默认kb)

推:PUSH,上传
# scp -P22 -rp /tmp/oldboy oldboy@10.0.1.71:/tmp
# /tmp/oldboy为本地的目录
# "@"前为用户名
# "@"后为要连接的服务器的IP
# IP后的:/tmp目录,为远端的目标目录
# 说明:以上命令作用是把本地/tmp/oldboy推送至远端服务器10.0.1.71的/tmp目录

拉:PULL,上传
# scp -P22 -rp root@172.16.1.51:/etc/passwd /tmp/
# 还可以将远端目录或文件拉取至本地
结论
1.scp通过加密进行远程拷贝文件或目录的命令
2.scp拷贝权限为连接的用户对应的权限
3.scp支持数据的推送和拉取,但每次都是全量拷贝,效率低下。

3).xftp远程数据传输命令
一般采用图形化界面实现

 

3.SSH连接方式

1).基于账户密码远程登录

知道服务器的IP端口,账号密码,即可通过ssh客户端登录远程主机,远程主机联机过程中传输数据库都是加密的。

ssh -p22 root@10.0.1.51
Last login: Thu Jan 23 15:01:11 2020 from 10.0.1.1
[root@backup ~]# 

2).基于秘钥远程登录

默认情况下,通过ssh客户端登陆远程服务器,需要提供远程系统上的账号与密码,但为了降低密码泄露的几率和提高
登陆的方便性,建议使用秘钥验证方式

实验:
mo1 通过秘钥远程登录backup
实验步骤:

1.在m01上生成秘钥对,-t秘钥类型,-C描述信息
[root@m01 ~]# ssh-keygen -t rsa -C xiaoming@oldboyedu.com
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #秘钥保存的路径和文件名,直接回车,为默认值,不建议修改
Enter passphrase (empty for no passphrase): #设置秘钥加密的密码,不建议设置,直接回车
Enter same passphrase again:  #再次确认密码,不建议设置,直接回车

命令执行后,一路回车到底

2.将公钥传到backup的~/.ssh/authorized_keys
//命令示例:ssh-copy-id [-i [identity_file]] [user@]machine
ssh-copy-id //命令
-i          //指定下公钥的路径
[user@]     //以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
machine     //下发公钥至哪台服务器,填写远程主机IP地址
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.51 
[root@backup ~]# ls -a .ssh/

//不登录主机执行命令
[root@m01 ~]# ssh root@172.16.1.51 "free -m"
              total        used        free      shared  buff/cache   available
Mem:            972         103         774           7          94         748
Swap:          2047           0        2047

加个需求:
rsync服务器需用被nfs服务器通过ssh使用秘钥登录

1.在nfs服务器上生成密钥对
[root@nfs ~]# ssh-keygen -t rsa -C nfs
2.将nfs上的公钥分发到backup服务器上
[root@nfs ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51

使用windows公钥登录服务器
1.使用Xshell生成密钥对
工具->新建用户密钥向导->下一步一直到用户密钥信息->修改密钥名称后,下一步到最后
2.将公钥传到需要登录的服务器上。
1)创建存放公钥的目录及文件

mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys,将xshell生成的公钥复制进来,保存退出
chmod 600 ~/.ssh/authorized_keys

 

4.SSH访问控制

SSH远程服务访问控制手段
一次服务器ssh裸奔的后果

1.更改SSH服务远程登录端口               *****
2.更改SSH服务监听本地内网IP             *
3.更改SSH服务禁止ROOT管理员登录         ***
4.更改SSH服务密码登录认证为密钥认证      *****
5.重要服务器都不是有公网IP地址           ******
6.使用防火墙限制来源IP地址              *

1).SSH服务登录防护手段配置文件/etc/ssh/sshd_config

Port 6666                #变更SSH服务远程连接端口
ListenAddress 10.0.1.71  #绑定本地内网地址
PermitRootLogin          #是否允许root用户远程登录
PasswordAuthentication   #是否允许使用密码登录
UseDNS                   #是否进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication     #是否进行认证,影响ssh连接效率参数

2).SSH配置实例,添加如下配置至/etc/ssh/sshd_config,根据业务需求调整配置

Port 6666                
ListenAddress 10.0.1.71  
PermitRootLogin no          
PasswordAuthentication no  
UseDNS no                  
GSSAPIAuthentication no
(1).修改端口号
Port 6666
验证登录效果
Xshell:
root@10.0.1.71 6666

CentOS:
[root@nfs ~]# ssh root@172.16.1.71 
ssh: connect to host 172.16.1.71 port 22: Connection refused
[root@nfs ~]# ssh root@172.16.1.71 -p6666 
Last login: Fri Jan 24 19:53:06 2020 from 10.0.1.1
[root@m01 ~]# 

(2).修改监听IP
ListenAddress 10.0.1.71 
验证登录效果
[root@backup scripts]# ssh root@172.16.1.71
ssh: connect to host 172.16.1.71 port 22: Connection refused

(3).关闭密码登录,默认ssh登录的顺序:先密钥,再密码登录
PasswordAuthentication no 
(4).禁止管理员root登录
PermitRootLogin no 
验证登录效果
[root@nfs ~]# ssh root@172.16.1.71 
root@172.16.1.71's password: 
Permission denied, please try again.

 

5.SSH练习参数

环境:
m01     172.16.1.71  10.0.1.71
backup  172.16.1.51  10.0.1.51
nfs     172.16.1.41  10.0.1.41    
1.使用root用户完成一把钥匙开多把锁A钥匙,BC锁
解法:
1).在客户端A上生成密钥对
[root@m01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -C anlione 
2).将公钥推送至BC
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41 
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51 

2.在不破坏题1的前提下,完成多把钥匙开一把锁BC钥匙,A锁
1).在客户端BC上生成密钥对
[root@nfs ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
[root@backup ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
2).将公钥推送至A
[root@nfs ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.71
[root@backup ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.71

3.如何实现从A指定目录或文件分发到BC服务器
推送文件:
[root@m01 ~]# dd if=/dev/zero of=test bs=1M count=100 
[root@m01 ~]# scp -P22 -p test root@172.16.1.51:/tmp/  
[root@m01 ~]# scp -P22 -p test root@172.16.1.41:/tmp/ 
推送目录:
[root@m01 ~]# scp -P22 -rp test root@172.16.1.41:/tmp/ 
推送测速:单位是Kbit/s 
[root@m01 ~]# scp -l 8000 test root@172.16.1.51:/tmp/  

4.(附加题,不做要求)如何快速查看所有机器的load,CPU,Memory等信息(思考:服务器数量多,如何并发查看和分发数据)
解法:
#!/bin/bash
[ $# -ne 1 ] && echo "执行错误,必须输入执行的命令,如果有空格,请输入双引号引起来" && exit 1

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