Ansible的指定用户与密码登录、免密登录、指定ssh端口以及主机清单Inventory配置

在实际使用中并不需要对ansible配置进行修改,或者说只有需要的时候才修改ansible配置。

添加用户账号

说明:

1、 运维人员使用的登录账号;

2、 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放;

3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。

 # 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息
useradd -u -d /app yun && echo '' | /usr/bin/passwd --stdin yun
echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod /app/

基于密码连接「了解」

在实际生产环境中,建议使用基于秘钥连接而不是密码连接。

原因如下:

1、将密码直接写入文件中,有安全隐患;

2、生产环境的密码可能会定期更换,如果基于密码连接,那么我们也会频繁的维护,造成维护成本高;

3、基于秘钥连接,我们只需要做一次秘钥分发,后期连接无需任何修改。

清单配置

 [yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ cat hosts_pwd
# 未分组机器,放在所有组前面
# 默认端口22,可省略
# 方式1:主机 + 端口 + 密码
172.16.1.180 ansible_ssh_port= ansible_ssh_user=yun ansible_ssh_pass='' # 方式2:主机 + 端口 + 密码
[proxyservers]
172.16.1.18[:] ansible_ssh_port= ansible_ssh_user=yun ansible_ssh_pass='' # 方式3:主机 + 端口 + 密码
[webservers]
172.16.1.18[:] ansible_ssh_port= ansible_ssh_user=yun
[webservers:vars]
ansible_ssh_pass=''

测验连接

 [yun@ansi-manager ansible_info]$ ansible 172.16.1.180 -m ping -i ./hosts_pwd   # 普通用户执行
172.16.1.180 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}
[yun@ansi-manager ansible_info]$ sudo ansible 172.16.1.180 -m ping -i ./hosts_pwd # 提权使用 root 用户执行
172.16.1.180 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}

大概提示信息:因为启用了主机密钥检查,而 sshpass 不支持这一点。请将此主机「172.16.1.180」的指纹添加到你本机的known_hosts文件中以管理此主机。

跳过主机密钥检查,有两种方式:

方式1:修改 Linux 系统配置

 [root@ansi-manager ssh]# vim /etc/ssh/ssh_config
# AddressFamily any
# ConnectTimeout
# StrictHostKeyChecking ask # 将该配置的注释打开,并改为 StrictHostKeyChecking no 这样针对所有用户都不会在进行 「主机密钥检查」了
# IdentityFile ~/.ssh/identity

但是这个是 Linux 自带的配置,我们不能随意去更改。因此不建议如此操作。

方式2:修改 ansible 配置

 [root@ansi-manager ansible]# pwd
/etc/ansible
[root@ansi-manager ansible]# vim ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False # 将该配置的注释去掉

改配置仅对 root 用户生效,其他普通用户是不生效的。这里使用该方法。

再次连接测试

 [yun@ansi-manager ansible_info]$ ansible 172.16.1.180 -m ping -i ./hosts_pwd  # 普通用户还是不行
172.16.1.180 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}
[yun@ansi-manager ansible_info]$ sudo ansible 172.16.1.180 -m ping -i ./hosts_pwd # 提权使用 root 用户执行
172.16.1.180 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[yun@ansi-manager ansible_info]$ sudo ansible proxyservers -m ping -i ./hosts_pwd # 正常
[yun@ansi-manager ansible_info]$ sudo ansible webservers -m ping -i ./hosts_pwd # 正常

基于秘钥连接「推荐」

在实际生产环境中,建议使用基于秘钥连接而不是密码连接。

原因如下:

1、将密码直接写入文件中,有安全隐患;

2、生产环境的密码可能会定期更换,如果基于密码连接,那么我们也会频繁的维护,造成维护成本高;

3、基于秘钥连接,我们只需要做一次秘钥分发,后期连接无需任何修改。

实现yun用户免秘钥登录

要求:根据规划实现 172.16.1.180 到 172.16.1.180、172.16.1.181、172.16.1.182、172.16.1.183、172.16.1.184、172.16.1.185 免秘钥登录

因此需要在 172.16.1.180 机器创建秘钥,然后分发到受控机器。

创建秘钥

 [yun@ansi-manager ~]$ ssh-keygen -t rsa  # 一路回车即可 注意使用的是 yun 用户
# 生成之后会在用户的根目录生成一个 “.ssh”的文件夹
[yun@ansi-manager ~]$ ll -d .ssh/
drwx------ yun yun Jul : .ssh/
[yun@ansi-manager ~]$ ll .ssh/
total
-rw------- yun yun Jul : id_rsa
-rw-r--r-- yun yun Jul : id_rsa.pub

分发密钥

 [yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.180
[yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.181
[yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.182
[yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.183
[yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.184
[yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.185

测验免密登录是否成功

 [yun@ansi-manager ~]$ ssh 172.16.1.180  # 等价于 ssh yun@172.16.1.180
[yun@ansi-manager ~]$ ssh 172.16.1.181
[yun@ansi-manager ~]$ ssh 172.16.1.182
[yun@ansi-manager ~]$ ssh 172.16.1.183
[yun@ansi-manager ~]$ ssh 172.16.1.184
[yun@ansi-manager ~]$ ssh 172.16.1.185

注意:必须保证每台机器都免密登录成功,因此需要每台机器都验证。

.ssh目录中的文件说明

 [yun@ansi-manager .ssh]$ pwd
/app/.ssh
[yun@ansi-manager .ssh]$ ll
total
-rw------- yun yun Jul : authorized_keys
-rw------- yun yun Jul : id_rsa
-rw-r--r-- yun yun Jul : id_rsa.pub
-rw-r--r-- yun yun Jul : known_hosts
########################################################################################
authorized_keys :存放要远程免密登录机器的公钥,主要通过这个文件记录多台要远程登录机器的公钥
id_rsa : 生成的私钥文件
id_rsa.pub :生成的公钥文件
know_hosts : 已知的主机公钥清单

清单配置

 [yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ cat hosts_key
# 未分组机器,放在所有组前面
# 默认端口22,可省略
# 方式1、主机 + 端口 + 密钥
172.16.1.180: # 方式2:主机 + 端口 + 密钥
[proxyservers]
172.16.1.18[:]: # 方式3:别名 + 主机 + 端口 + 密码
[webservers]
web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=
web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=
web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=

测验连接

测验一

 [yun@ansi-manager ansible_info]$ ansible 172.16.1.180 -m ping -i ./hosts_key
172.16.1.180 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

测验二

 [yun@ansi-manager ansible_info]$ ansible proxyservers -m ping -i ./hosts_key
172.16.1.181 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.182 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

测验三

 [yun@ansi-manager ansible_info]$ ansible webservers -m ping -i ./hosts_key
web03 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
web01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
web02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

混合方式和主机组方式

清单配置

 [yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ cat hosts_group
# 未分组机器,放在所有组前面
# 默认端口22,可省略
# 方式1、主机 + 端口 + 密钥
172.16.1.180 # 方式一、主机组变量 + 主机 + 密码
[proxyservers]
172.16.1.18[:] ansible_ssh_port= ansible_ssh_user=yun ansible_ssh_pass='' # 方式二、主机组变量 + 主机 + 密钥
[webservers]
172.16.1.18[:]: # 定义多组,多组汇总整合
# website 组包括两个子组[proxyservers, webservers]
[website:children]
proxyservers
webservers

说明:定义多组使用没有问题。但是不能像上面一样既有密码配置,又有秘钥配置,这样会增加维护成本。这里为了演示因此用了密码和秘钥配置。

测验连接

测验一

 # 如果 ~/.ssh/known_hosts 文件中没有添加受控机指纹,那么必须提权操作
[yun@ansi-manager ansible_info]$ sudo ansible proxyservers -m ping -i ./hosts_group --list-hosts
hosts ():
172.16.1.181
172.16.1.182
[yun@ansi-manager ansible_info]$ sudo ansible proxyservers -m ping -i ./hosts_group
172.16.1.182 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.181 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

测验二

 [yun@ansi-manager ansible_info]$ ansible webservers -m ping -i ./hosts_group --list-hosts
hosts ():
172.16.1.183
172.16.1.184
172.16.1.185
[yun@ansi-manager ansible_info]$ ansible webservers -m ping -i ./hosts_group
………………

测验三

 [yun@ansi-manager ansible_info]$ ansible website -m ping -i ./hosts_group --list-hosts
hosts ():
172.16.1.181
172.16.1.182
172.16.1.183
172.16.1.184
172.16.1.185
[yun@ansi-manager ansible_info]$ ansible website -m ping -i ./hosts_group

测验四

特殊组:all

 [yun@ansi-manager ansible_info]$ ansible all -m ping -i ./hosts_group --list-hosts
hosts ():
172.16.1.180
172.16.1.181
172.16.1.182
172.16.1.183
172.16.1.184
172.16.1.185
[yun@ansi-manager ansible_info]$ ansible all -m ping -i ./hosts_group

———END———
如果觉得不错就关注下呗 (-^O^-) !

Ansible-免密登录与主机清单Inventory的更多相关文章

  1. SSH免密登录详解

    SSH免密登录详解 SSH(Security Shell)安全外壳协议,是较为可靠的,专为远程登录会话和其他网络服务提供安全保证的协议. ​ 对于传统的网络服务程序(例如,FTP,Telnet等)来说 ...

  2. linux 配置ssh免密登录

    一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目 ...

  3. 【FATE】设置虚拟机固定IP以及免密登录

    一.前期准备 1.VMWare上新建三个Centos7的虚拟机 2.VMWare虚拟机的三种联网方式 1.桥接模式 -- 桥接: 默认使用VMnet0 这一种联网方式最简单,在局域网内,你的主机是怎么 ...

  4. ansible用authorized_key模块批量推送密钥到受控主机(免密登录)(ansible2.9.5)

    一,ansible的authorized_key模块的用途 用来配置密钥实现免密登录: ansible所在的主控机生成密钥后,如何把公钥上传到受控端? 当然可以用ssh-copy-id命令逐台手动处理 ...

  5. openstack私有云布署实践【11.3 计算nova - compute节点-nova用户免密登录(用于云主机冷迁移+扩展云主机大小)】

    云主机迁移+扩展云主机大小 ,官方说它依赖nova用户之间的免密登录.确保每个resion区域的compute节点服务器他们可以相互SSH免密   compute1-7     他们相互SSH免密 k ...

  6. 宿主机ssh免密登录docker容器

    一.检查系统内核 二.安装docker 1.yum install docker  -y 2.docker version                    #查看docker版本 3.syste ...

  7. centos修改启动顺序,登录后提示,启动级别,主机名,免密登录

    修改启动顺序 # vim  /etc/inittab ....... d:3:initdefault: #找到这一行,d:3:initdefault:最小化启动 d:5:initdefault:图形界 ...

  8. 关于修改主机名和ssh免密登录

    修改主机名的常规方法: 1.hostname name2.echo name  > /proc/sys/kernel/hostname3.sysctl kernel.hostname=name4 ...

  9. linux做免密登录,成功分发公钥后登录主机依旧需要输入密码的问题解决

    问题描述 在主机A上用ssh-keygen生成密钥对后,用ssh-copy-id命令将公钥成功copy到主机B上后,测试从A免密登录B,但是依旧需要输入主机B的密码后才能登录. 出现此错误的原因 如果 ...

随机推荐

  1. POJ-1811-Prime Test(pollard_rho模板,快速找最小素因子)

    题目传送门 sol:Pollard_Rho的模板题,刚看了Pollard_Rho和Miller_Rabin很多原理性的东西看不懂,只是记住了结论勉强能敲代码. Pollard_Rho #include ...

  2. 使用Cron表达式创建定时任务

    CronTriggerCronTrigger功能非常强大,是基于日历的作业调度,而SimpleTrigger是精准指定间隔,所以相比SimpleTrigger,CroTrigger更加常用.CroTr ...

  3. volatile与Synchronized

    摘自: https://blog.csdn.net/zxh476771756/article/details/78685581 一.JVM内存模型: JVM将内存组织为主内存和工作内存两个部分. 主内 ...

  4. 跨越真实和虚拟世界的边界——走近SIGGRAPH 2014大会

    2014大会" title="跨越真实和虚拟世界的边界--走近SIGGRAPH 2014大会"> 作者:孙鑫 微软亚洲研究院研究员 一场大会振奋一座城 温哥华位于加 ...

  5. 吴裕雄--天生自然HTML学习笔记:HTML 标题

    在 HTML 文档中,标题很重要. HTML 标题 标题(Heading)是通过 <h1> - <h6> 标签进行定义的. <h1> 定义最大的标题. <h6 ...

  6. win7 任务栏 无法固定文件夹和文件 解决方法

    2010年开始使用win7,一直都在用一个功能,把常用的文件夹和文件都直接锁定到任务栏,方便使用. 最近这个功能一直有问题,开始只是重启以后,以前固定的文件没有了,这个也懒的去弄它,没了在添加一次. ...

  7. 云服务器离线安装MariaDB安装步骤和解决办法

    前面我写了tomcat的安装那么接下来我们来安装云服务的数据库服务 第一步:下载安装包 https://downloads.mariadb.org/ 按照上图所示操作就能完成在线安装,但由于国内的网络 ...

  8. Zookeeper:fsync超时导致实例异常

    一.问题描述 2019-02-19 08:44左右,实时计算服务重启,报错显示找不到zk集群的leader节点,同时ZooKeeper集群有告警显示连接超时: 指标[连接耗时(ms)=18221]符合 ...

  9. DBFlow框架的学习笔记之入门

    什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...

  10. SecureCRT语法高亮设置

    因为默认情况下,SecureCRT不能显示语法高亮特性,整个界面颜色单一,看起来不爽,也没有效率,所有通过设置一下语法高亮还是很有必要的, 默认字体也看着不是很清晰,还是更改为我比较喜欢的Courie ...