配置免密登录
每次执行ansible命令的时候,都需要输入ssh的认证密码,也就是root密码,如果不同的主机密码不一致,那你还得输入多次才行,因此我们可以配置如下的快捷登录方式
ansible自带的密码认证参数
可以在 /etc/ansible/hosts文件中,定义好密码即可,即可实现快速的认证,远程管理主机
参数
ansible_host 主机地址
ansible_port 端口,默认是22端口
ansible_user 认证的用户
ansible_ssh_pass 用户认证的密码
使用hosts文件的参数形式,来实现ssh认证
1、修改hosts文件,改为如下
vim /etc/ansible/hosts
[yu]
192.168.178.121 ansible_user=root ansible_ssh_pass=123456
192.168.178.122 ansible_user=root ansible_ssh_pass=123456
2、此时可以免密登录,即可自动ssh验证通过了,但是这种方式存储密码不安全
ansible yu -m command -a 'hostname' # 此时不需要加上 -k -u root
ssh密钥方式批量管理主机
这个方式比起hosts文件的密码参数来的更安全放心
在my_linux机器上创建ssh密钥对
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
2、此时检查公私钥文件
cd ~/.ssh && ls
id_rsa id_rsa.pub known_hosts
编写公钥分发脚本
mkdir /mysh
cd /mysh
vim ssh_key_send.sh
#!/bin/bash
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
SSH_Pass=123456
Key_Path=~/.ssh/id_rsa.pub
for ip in 131 132
do
sshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.178.$ip
done
# 非交互式分发公钥命令需要用sshpass指定SSH密码,通过-o StrictHostKeyChecking=no 跳过SSH连接确认信息
执行脚本
sh ssh_key_send.sh
然后就可以使用以下命令进行免密登录
ssh -o ' StrictHostKeyChecking=no' '192.168.178.121'
ssh -o ' StrictHostKeyChecking=no' '192.168.178.122'
此时在my_linux_01机器上再连接客户端机器就无须输入账号密码了,可以尝试使用ansible命令进行连接
vim /etc/ansible/hosts
将密码给删除
[yu]
192.168.178.121
192.168.178.122
ansible yu -m command -a "df -h"
此时已经无须输入密码,即可远程管理
总结
在生产环境中,ansible的连接方式,二选一即可,最好的是配置ssh公私钥免密登录
如果生产环境的要求更高,可以用普通用户去执行,再提权操作,sudo
网友评论