服务应用:
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