第二个部分-集群批量管理与维护
目录
Toggle1.基础:
SSHD服务配置文件☆ ☆ ☆ ☆ ☆
ssh客户端命令:ssh,scp,sftp
ssh密钥认证(免密码登录,双机互信)☆ ☆ ☆ ☆ ☆
Ansible批量分发,批量管理,批量维护与部署
对于已经掌握使用流程的服务,进行批量管理
2.0 目标
修改sshd服务端配置文件修改ssh端口号,修改ssh禁用root远程登录.
使用ssh命令远程连接,使用scp传输数据.
配置主机的秘钥认证(写成脚本)
Ansible进行初步批量管理
2.1 openssh服务
实现加密的远程连接/传输数据.
openssh-server 服务端(sshd,/etc/ssh/sshd_config)
openssh-clients客户端命令 scp,ssh
2.2 telnet 服务端vs openssh 服务端
telnet服务
#1.安装服务
yum install -y telnet-server
#2.启动
systemctl disable telnet.socket
systemctl start telnet.socket
#3.本地shell中连接
telnet 10.0.0.61 23
麒麟系统中telnet-server属于telnet软件包
2.4 Openssh-server配置文件
核心配置文件: /etc/ssh/sshd_config
/etc/ssh/ssh_config 客户端配置文件
/etc/ssh/sshd_config 服务端配置文件
Linux系统ssh远程连接优化配置
##1. 注释掉sshd服务端已有的配置
sed -ri.bak ‘/^(UseDNS|GSSAPIAuth|Port|PermitRoot)/s@^@#@g’ /etc/ssh/sshd_config
##2. 重新配置连接优化,端口,是否准许root的远程登录.
cat >>/etc/ssh/sshd_config<<EOF
UseDNS no
GSSAPIAuthentication no
Port 22
PermitRootLogin yes
EOF
2.5 Openssh-Clients客户端命令
scp 远程传输文件
ssh 远程连接
sftp 远程传输文件(一般开发通过图形化界面使用ftp工具)
1) scp ☆☆☆☆☆
#scp使用方式
scp 文件/目录 用户名@ip:路径
-r 递归传输,传输目录
-p 保持属性信息不变
-rp 人品
-P(大写) Port 指定端口号
scp -rp -P 22 /etc/hostname root@10.0.0.41:/tmp/
2) ssh ☆☆☆☆☆
功能:
- 远程连接.
- 远程连接并执行命令或脚本.(不要执行交互式命令)
案例01: 使用oldboy用户远程连接到10.0.0.41的22端口
ssh -p 22 oldboy@10.0.0.41
案例02: 使用oldboy用户远程连接到10.0.0.41的22端口并执行whoami命令或ip a 命令
ssh -p 22 oldboy@10.0.0.41 whoami
案例03: 远程连接10.0.0.31节点并执行多条命令:whoami , pwd, hostname命令
ssh -p22 nfs01 "whoami Վ阪 pwd Վ阪 hostname -I "
ssh -p22 nfs01 "whoami ; pwd ; hostname -I "
&& 并且,命令行中表示前一个命令执行成功再执行后面的命令.
; 分号,分隔命令.相当于是1行的结束.
3) sftp
ftp 文件传输协议
sftp linux中ftp客户端和lrzsz类似.
lrzsz传输大文件较慢. 推荐使用scp即可.
ftp工具开发人员使用.操作linux的目录和文件.
ftp文件传输协议,服务和客户端,服务端端口是21和20.
openssh (sshd)也提供了,ftp功能,sftp,端口是22.
ftp客户端:常用sftp命令,软件xftp,winscp……….
如果上传大文件建议使用ftp或scp
2.6 Openssh小结
openssh 服务 vs telnet 服务区别
openssh服务端: /etc/ssh/sshd_config端口,禁用root远程登录.
openssh 客户端: scp(-rp -P端口) ssh(-p端口)
2.7 密钥认证 ☆☆☆☆☆
1) 概述
Linux中我们要连接主机,输入用户密码然后连接.
我们发现每次连接都要输入密码,对于一些批量操作不方便.
我们需要有一种新的认证方法,每次连接不需要输入密码.
这个方法叫: 密钥认证(免密码登录,双机互信.)
2) 原理(流程)
3) 手动创建与分发密钥 ☆☆☆☆☆
①创建秘钥对
②发送公钥给对应的节点.
#1.创建密钥对
ssh-keygen
#然后3个回车即可.
存储在/root/.ssh/id_rsa
#2.分发公钥到对应的节点
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.31
#把公钥传输到对应节点的~/.ssh/authorized_keys
#3.检验
ssh root@172.16.1.31 hostname
温馨提示:
不要修改.ssh目录权限,家目录权限.密钥文件的权限
正确ssh文件权限示意:
[root@m01 ~]# ll -d /root/
dr-xr-x— 3 root root 191 2月 23 12:00 /root/
[root@m01 ~]# ll -d /root/.ssh/
drwx—— 2 root root 57 3月 1 10:06 /root/.ssh/
[root@m01 ~]# ll /root/.ssh/
总用量 12
-rw——- 1 root root 2590 3月 1 10:02 id_rsa
-rw-r–r– 1 root root 562 3月 1 10:02 id_rsa.pub
-rw-r–r– 1 root root 170 3月 1 10:06 known_hosts
4) 如何自动分发公钥
阻碍:
输入yes/no
输入密码
输入密码: sshpass
自动输入密码的解决方案:
sshpass:推荐简单易用.给ssh相关命令提供密码.
expect:较为复杂,语言,实现把交互转换为非交互.
sshpass -p1 ssh-copy-id 172.16.1.41
-p指定ssh的密码
如果.41是第1次连接,则需要输入yes/no,这个就会导致sshpass+ssh-copy-id失败.
sshpass选项
-p指定密码
-f指定密码文件(密码放在文件中)
-e 从SSHPASS环境变量读取
export SSHPASS=xxxx
解决yes/no的问题
linux连接新的主机的时候,做了1个主机信息认证(校验),选择yes后信息就会被存放到~/.ssh/known_hosts文件中.
希望分发公钥的时候临时关闭这个功能.
HostKeyChecking或StrictHostKeyChecking
彻底关闭yes/no提示. Host key check
仅仅在使用ssh-copy-id的时候关闭(临时)
sshpass -p1 ssh-copy-id -o StrictHostKeyChecking=no 172.16.1.41
#-o选项本质是ssh命令的选项
5) 一键创建秘钥对 ☆☆☆☆☆
ssh-keygen -f /root/.ssh/id_rsa -P ”
-f 指定密钥文件位置和文件名
-P 指定密码短语 “” ” 表示设置为空.
6) 书写一键脚本
- 检查密钥文件是否存在,如果不存在则创建 ~/.ssh/id_rsa
- ip列表(变量,文件,数组)分发公钥
- for+分发命令
- 检查成功,失败
- for+批量执行命令
- for+ssh命令 hostname -I
cat /server/scripts/fenfa.sh
#!/bin/bash
#author: lidao996
#desc:
# 1.一键创建秘钥对(如果不存在)
# 2.一键分发公钥
# 3.一键检查
#1. vars
key=/root/.ssh/id_rsa
ips=”7 31 41″
pass=1
#ips=”`cat /server/files/ip.txt`”
#2. 一键创建秘钥对
if [ ! -f $key ];then
ssh-keygen -f $key -P ” &>/dev/null
if [ $? -eq 0 ];then
echo “秘钥对创建成功”
else
cho “密钥对创建失败”
exit 1
fi
fi
#3. 一键分发公钥
echo “分发公钥-开始”
for ip in $ips
do
sshpass -p$pass ssh-copy-id -o
StrictHostKeyChecking=no 172.16.1.$ip
#这里也可以通过$? + if判断公钥分发是否成功
done
echo “分发公钥-完成”
#4. 一键检查
echo “检查-开始”
for ip in $ips
do
ssh -o StrictHostKeyChecking=no 172.16.1.$ip
hostname -I
#这里也可以通过$? + if执行是否成功
done
echo “检查-结束”
7) 密钥认证小结
密钥认证完成后通过脚本实现基本的批量管理.
书写脚本+ssh/scp命令.
密钥认证后面很多服务所必须的底层环境: ansible.
2.8 SSHD小结
修改sshd服务端配置文件修改ssh端口号,修改ssh禁用root远程登录.
使用ssh命令远程连接,使用scp传输数据.
配置主机的秘钥认证(写成脚本)
Ansible进行初步批量管理