安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
在hub.docker上挑选喜欢的ansible版本镜像
ansible/ansible Tags | Docker Hub
下载镜像
docker pull ansible/ansible:centos7
创建公私钥
mkdir /ansible/{ssh,sshpass} -p
ssh-keygen -t rsa -b 2048 -P '' -f /ansible/ssh/id_rsa
#定义IP表
cd /ansible/sshpass
vi hosts.sh
#!/bin/bash
#
declare -a IPS=(
"192.168.136.132,2289,EK2gV1@+UgrIXX%7p#"
)
#定义脚本
cd /ansible/sshpass
vi free_ssh_push.sh
#!/bin/bash
#
# 加载 hosts.sh 配置文件
source /root/sshpass/hosts.sh
# 循环遍历远程主机
for host in "${IPS[@]}"; do
# 使用逗号分隔 host 字符串,并将结果存储到数组 fields 中
IFS=',' read -ra fields <<< "$host"
# 提取 IP、端口和密码
ip="${fields[0]}"
port="${fields[1]}"
password="${fields[2]}"
# 检查远程主机的连通性
if ! ping -c 1 "$ip" &> /dev/null; then
echo "Failed to connect to $ip:$port. Skipping..."
continue
fi
# 构建 ssh-copy-id 命令
ssh_copy_id_cmd="/usr/bin/sshpass -p ${password} ssh-copy-id -o StrictHostKeyChecking=no -p ${port} root@$ip"
# 使用 ssh-copy-id 将公钥推送到远程主机
echo "Pushing public key to $ip:$port..."
if ! $ssh_copy_id_cmd; then
echo "Failed to push public key to $ip:$port."
continue
fi
echo "Public key pushed successfully to $ip:$port."
done
启动镜像
根据需求挂载playbook的存放路径到容器中
-v 宿主机目录:容器目录 \
docker run -td \
--name ansible \
--restart=always \
-v /ansible/ssh/:/root/.ssh/ \
-v /ansible/sshpass/:/root/sshpass/ \
ansible/ansible:centos7 \
/bin/bash
进入ansible容器
docker exec -it ansible /bin/bash
#执行免密脚本
$ bash /root/sshpass/free_ssh_push.sh
ansible-playbook -i 主机清单文件的路径 --syntax-check debug.yml
--syntax-check :语法检测
ansible的使用这里就不介绍了,网上有很多种