一、Openssh服务
1.1认证方式
| 认证方式 | 配置文件 | 配置说明 |
|---|---|---|
| 密码登录 | sshd_config | PasswordAuthentication yes |
| 密钥认证 | sshd_config 秘钥认证方式进行免密码登录 | PubekyAuthentication yes |
1.2 使用流程
1.2.1创建秘钥
#创建
ssh-keygen
回车即可(也可以在pass里设置密码)
ssh-keygen
回车即可(也可以在pass里设置密码)
1.2.2 分发秘钥与测试
#分发秘钥
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.7
ssh-copy-id root@10.0.0.7
ssh-copy-id 10.0.0.7
#ssh-copy-id 命令本质上是ssh命令
#测试连接
ssh root@10.0.0.7 whoami
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.7
ssh-copy-id root@10.0.0.7
ssh-copy-id 10.0.0.7
#ssh-copy-id 命令本质上是ssh命令
#测试连接
ssh root@10.0.0.7 whoami
1.2.3 批量分发秘钥
ssh-keygen -f /root/.ssh/id_rsa -P ”
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.7
提示yes/no 第一次运行
提示输入对应节点的密码
提示yes/no 第一次运行
提示输入对应节点的密码
sshpass -pLidao996 ssh 10.0.0.8 hostname -I
sshpass 可以从-p命令行选项读取密码 -f 从文件中读取密码 -e 从变量中读取密码
sshpass 可以从-p命令行选项读取密码 -f 从文件中读取密码 -e 从变量中读取密码
主机密钥检查
临时关闭主机密钥检查功能即可
-o StrictHostKeyChecking=no
临时关闭主机密钥检查功能即可
-o StrictHostKeyChecking=no
sshpass -pLidao996 ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 -o StrictHostKeyChecking=no root@10.0.0.7
[root@m01 ~]# cat /server/scripts/fenfa.sh
#!/bin/bash
####################################
#File Name:/server/scripts/fenfa.sh
#Version:V1.0
#Author:oldboy lidao996
#Organization:www.oldboyedu.com
#Desc:
###################################
#1.vars
key=/root/.ssh/id_rsa
ips=”5 6 7 8 9 10 31 41 51 52 “
pass=Lidao996
#2.check
[ -f “${key}” ] || {
ssh-keygen -f ${key} -P ” >/dev/null 2>&1
if [ $? -eq 0 ];then
echo “秘钥创建成功”
else
echo “秘钥创建失败”
exit 1
fi
}
#3.分发
for ip in $ips
do
sshpass -p${pass} ssh-copy-id -p 22 -o StrictHostKeyChecking=no root@10.0.0.${ip} >/dev/null 2>&1
if [ $? -eq 0 ];then
echo “10.0.0.$ip秘钥分发ok”
else
echo “10.0.0.$ip秘钥分发failed”
fi
done
#4.检查
for ip in $ips
do
ssh 10.0.0.$ip hostname -I
done
#!/bin/bash
####################################
#File Name:/server/scripts/fenfa.sh
#Version:V1.0
#Author:oldboy lidao996
#Organization:www.oldboyedu.com
#Desc:
###################################
#1.vars
key=/root/.ssh/id_rsa
ips=”5 6 7 8 9 10 31 41 51 52 “
pass=Lidao996
#2.check
[ -f “${key}” ] || {
ssh-keygen -f ${key} -P ” >/dev/null 2>&1
if [ $? -eq 0 ];then
echo “秘钥创建成功”
else
echo “秘钥创建失败”
exit 1
fi
}
#3.分发
for ip in $ips
do
sshpass -p${pass} ssh-copy-id -p 22 -o StrictHostKeyChecking=no root@10.0.0.${ip} >/dev/null 2>&1
if [ $? -eq 0 ];then
echo “10.0.0.$ip秘钥分发ok”
else
echo “10.0.0.$ip秘钥分发failed”
fi
done
#4.检查
for ip in $ips
do
ssh 10.0.0.$ip hostname -I
done
二、批量管理工具
2.1选型
- ansible(无客户端)
- saltstack
- Puppst
- Chef
2.2 ansible 使用
2.2.1 安装ansible
yum install -y python3-pip
df -h /tmp/
容量 已用 可用 已用% 挂载点
97G 4.2G 93G 5% /
python3 -m pip install – -upgrade pip
pip3 config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip3 install ansible
df -h /tmp/
容量 已用 可用 已用% 挂载点
97G 4.2G 93G 5% /
python3 -m pip install – -upgrade pip
pip3 config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip3 install ansible
2.2.2 配置ans
[root@m01 ~]# egrep -v ‘^$|#’ /etc/ansible/ansible.cfg
[defaults]
interpreter_python=/usr/bin/python3
gathering = implicit
host_key_checking = False
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
[defaults]
interpreter_python=/usr/bin/python3
gathering = implicit
host_key_checking = False
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
2.2.3 书写主机清单文件与测试
#进入hosts
vim /etc/ansible/hosts
#内容:
[lb]
10.0.0.5
10.0.0.6
[web]
10.0.0.[7:10]
[db]
10.0.0.51
10.0.0.52
[nfs]
10.0.0.31
[bak]
10.0.0.41
#命令
ansible all -m ping
vim /etc/ansible/hosts
#内容:
[lb]
10.0.0.5
10.0.0.6
[web]
10.0.0.[7:10]
[db]
10.0.0.51
10.0.0.52
[nfs]
10.0.0.31
[bak]
10.0.0.41
#命令
ansible all -m ping

2.3 ans模块
2.3.1 命令脚本三兄弟
| 模块 | 说明 | 补充 |
|---|---|---|
| command | 简单命令,无法使用特殊符号| “ {} | 默认模块,即使不加也可以默认使用 |
| shell | 执行命令,支持特殊符号 | |
| csript | 分发脚本,运行脚本 |
ansible all -m command -a ‘hostname -I’
ansible all -a ‘hostname -I’
ansible all -a ‘hostname -I’
ansible all -m shell -a “echo {1..5}”
ansible all -m command -a “echo {1..5}”
ansible all -m command -a “echo {1..5}”
#创建yum.sh文件
vim /server/scripts/yum.sh
#内容:
yum install -y telnet tree lrzsz nmap
sleep 20
#命令 ansible web -m script -a ‘/server/scripts/yum.sh’
vim /server/scripts/yum.sh
#内容:
yum install -y telnet tree lrzsz nmap
sleep 20
#命令 ansible web -m script -a ‘/server/scripts/yum.sh’