对比参考学习某些开源的平台都有这么一个特点就是需要安装客户端(说白了就是类似后门木马的插件),客户端的兼容性适应问题不说,而且全部服务器都要装相应的客户端,明显超出斗哥预期的轻量级的实现自动化的初衷,但是办法总比困难多作为老板的省钱小能手身轻如燕的斗哥还真找到一个工具无需安装客户端就能实现自动化运维的工具 step4:设置用于鉴权的SSH密钥 主控端生成ssh的公私钥,默认生成的密钥保存在/root/.ssh文件夹下 [root@root tmp]# ssh-keygen ? 0x04 实际问题中自动化的思考 这里斗哥想从实际的需求以及遇到的问题出发来达到轻量级地实现自动化的目标。 ●需要检查的节点清单(确保开放ssh端口,不是默认22端口的话另分类出来这里暂不做考虑、节点root权限的账号密码) 2.主控端的公钥需要批量下发 主控端通过ssh-keygen命令生成公私钥后,公钥需要下发到节点才可实现主控端对节点的控制 ,0x02中的是单个节点的公钥下发,并且需要人机交互键入节点ssh密码,显然不适合面对多个节点的下发。
实战ansible ? 前言 本次实战目的: 批量配置几百台服务器的公钥 使用ansible对服务器集群批量处理执行命令 ansible管理拓扑图 ? 模拟场景 首先在ansible管理机(Server81)生成RSA公钥 使用ssh-keygen -t rsa生成密钥对。 ? 将公钥推送至客户机器 [root@server81 ansible]# ansible-playbook push-ssh.yaml ? 失败的原因就是初始ssh访问客户机的时候,都会有检验公钥的提示。只要配置禁用即可。 再次执行批量推送公钥 [root@server81 ansible]# ansible-playbook push-ssh.yaml ? 测试是否成功推送公钥 查看各机器时间 ?
提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。
本文针对的是Ansible使用中的敏感信息保护问题展开介绍。 二、问题:运维平台存在敏感信息泄露风险 Ansible官方提供了详尽的使用指南,网上也有很多优秀的Ansible教程用例,但就我们产品在实践Ansible中遇到的服务器敏感信息安全保护问题,网上这方面的资料却相对较少 在对远端服务器建立SSH的方式上,支持显式密码方式连接,也支持SSH公私钥证书的方式。无疑,SSH密码或私钥证书就是Ansible使用中典型的敏感信息。 采用隐式公私钥证书连接的方式,如何防止私钥证书被恶意窃取,对企业服务器进行非法连接? 本文以远端服务器的SSH连接密码和证书,就敏感信息保护,结合Ansible进行实践探索。 1. 工程化的加密实践 SSH远程连接方式选择 在通过Ansible对企业内服务器进行管理时,推荐使用公私钥方式,证书认证可以很好的解决企业内的服务器密码频繁变更问题。
系统默认是不记录日志的,如果想把ansible系统的输出记录到指定地方,需要设置log_path来指定一个存储Ansible日志的文件 9. private_key_file # 在使用ssh公钥私钥登录系统时使用的秘钥路径 ’的模式能够反转主控关系并使远程系统通过定期从中央git目录检出 并 拉取 配置指令来实现背景连接通信 第一条命令(公钥认证) 我们已经安装ansible了,第一件事就是编辑或者创建/etc/ansible node2 # 因为考虑到安全问题,会有主机秘钥的检查,但如果在内网非常信任的服务器就没必要了. sed -i 's/# *StrictHostKeyChecking *ask/StrictHostKeyChecking | rc=0 >> hello 公钥认证 Ansible1.2.1及其之后的版本都会默认启用公钥认证 如果有个主机重新安装并在“known_hosts”中有了不同的key,这会提示一个错误信息直到被纠正为止 # 私钥路径 --step # 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍 --syntax-check # 只检测 playbook 文件语法是否有问题,不会执行该
ssh-keygen -t rsa #三次回车,中途的问题是问秘钥存放位置(默认/root/.ssh),是否加密秘钥。实验方便这里不加密。 ssh-copy-id -i .ssh/id_rsa.pub [email protected]172.18.43.71 #将公钥发送给目标主机 ssh-copy-id -i .ssh/id_rsa.pub /nginx.yml - hosts: nginx remote_user: root roles: - nginx 4.7 测试,没问题的话就下一步 ansible-playbook -C /mysql.yml - hosts: mysql remote_user: root roles: - mysql 5.4 测试,没问题的话就下一步 ansible-playbook -C 6.2 分别执行 ansible-playbook web.yml ansible-playbook nginx.yml ansible-playbook mysql.yml 6.3 访问页面 http
playbook是Ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。 输入 ansible web --list-hosts 可查看分组下的主机 (2)安装sshpass 下一步需要推送本机公钥到所管理的服务器 Ansible所有操作需要通过ssh远程操作,且第一次通过ansible /configure 将安装的软件进行配置, make && make install 编译并安装, 完成安装 (3)生成秘钥公钥并将公钥推送到被管理主机 本机输入:ssh-keygen -t rsa (一直回车)产生相关秘钥, 秘钥自动放在: /root/.ssh, 通过ansible批量推送公钥, 首先编写推送公钥的playbook vi pushssh.ymal,创建并编译pushssh.ymal pushssh.ymal 完成公钥推送,成功后如下图: 五、Ansible-playbook安装mysql (1)首先在管理服务器端配置yum源(详细yum源配置可参照相关网上资源,此处不做过多介绍
除kubelet以外其它任何组件均在容器中运行 这样做的好处有几点: 保证一致性,这样避免掉很多因宿主环境问题导致的安装失败,如keepalived版本问题,系统库问题等等 统一管理统一监控,这样我们就不需要为如 里的公钥分发给你所有的服务器 配置ansible playbook的hosts文件 执行ansible 下面逐一说明: 启动ansible容器与免密钥设置 找台宿主机如你的PC,或者一台服务器, 8Td6tgZtq7cVU//kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464 这样公钥就生成了 kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464" >> authorized_keys 这样公钥分发工作完成了 roles/install-all.yaml uninstall all # ansible-playbook roles/uninstall-all.yaml 新增节点 删掉hosts
主机上做,我上面是现在ansible主机上生成一对ssh密钥,然后通过ssh-copy-id 把公钥复制给本机生成authorized_keys文件,然后在把.ssh目录复制给远端客户机,这样一来ansible 主机上生成密钥对,然后把公钥发给对方即可。 命令对我们写的playbook进行了测试,没有问题,接下来我们使用ansible-playbook来安装httpd [root@test ~]# ansible-playbook install_httpd.yml 是否语法问题 [root@test ~]# ansible-playbook -C set_virtualhost_conf_file.yml PLAY [websers] *********** 没有问题,接下来我们来运行playbook,把对应的文件推送到httpd服务器上,然后在服务器上检查我们写的配置文件是否正确 [root@test ~]# ansible-playbook set_virtualhost_conf_file.yml
Ansible只能在你的主控制器上运行,甚至可以是你的笔记本电脑!它是解决复杂问题的简单方法。 本指南将向您介绍Ansible的基础知识。 幸运的是,许多Ansible模块可以解决繁重的问题。 您可以编写playbooks来执行初始服务器配置,添加用户和目录,确保安装或卸载某些软件包,移动文件等。 第一项业务是添加我们的公共加密密钥,以便我们可以在不提供密码的情况下进行连接。 的/ etc / ansible /主机1 2 [linode] 123.123.123.123 编写一个创建新普通用户的剧本,添加我们的公钥,并将新用户添加到sudoers文件中。 看一下公司自己提供的一些Ansible剧本示例。 以下是一些需要探索的主题,这些主题在您创建任何复杂的剧本时变得非常重要,并且您将在其他人的剧本中经常看到。
192.168.1.106和192.168.1.107 备注: 为了方便演示, 以下命令都是基于root用户 免密配置¶¶ 即: 基于公钥的登陆 # 1. 使用 ssh-copy-id 命令安装公钥 ssh-copy-id -i /root/.ssh/id_ed25519 root@192.168.1.106 ssh-copy-id -i /root/.ssh 使用 Ansible Playbook¶¶ Playbook(剧本)是使用ansible的一种完全不同的形式,非常强大。 完整Ansible Playbook¶¶ 整合之前的安装, 完整的Ansible Playbook 如下: vi nginx.yml --- - hosts: web vars: src_root 分别访问: http://192.168.1.106/ http://192.168.1.107/ 查看NGINX运行状态.
Roles模块 的官网平台,基于网络的 ansible-playbook Ansible 定制自动化的任务集编排工具 ansible-pull Ansible远程执行命令的工具,拉取配置而非推送配置 playbook模式(剧本模式): 是Ansible主要管理方式,也是Ansible功能强大的关键所在。 ad-hoc命令 ansible 配置公私钥 前面我们已经提到过 ansible 是基于 ssh 协议实现的,为了实现无密码的登录、执行,可以给被访问主机分配秘钥。 其配置公私钥的方式与 ssh 协议的方式相同,具体操作步骤如下: 1.生成私钥 ssh-keygen 2.向主机分发私钥 ssh-copy-id root@10.0.0.12 ssh-copy-id root =/data/bbb.jpg src=aaa.jpg state=link" yum、service等模块这里因为篇幅原因暂不描述,大家可以访问官网了解。
Ansible安装配置管理 Ansible优势和应用场景 Ansible:开源部署工具 开发语言:Python 特点:ssh协议通讯,全平台,无需编译,模块化部署管理 作用:推送playbook进行远程节点快速部署 #同时加载ansible2.5版本 # source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q #验证加载效果 # ansible-playbook : root roles: - testbox #查看树形文件夹 #切换deploy用户,创建ssl秘钥认证 # ssh-keygen -t rsa ? #指定deploy用户公钥 # ssh-copy-id -i /home/deploy/.ssh/id_rsa root@report.example.com(test.example.com是ansible 本机DNS) # ansible-playbook -i inventory/testenv .
Ansible安装配置管理 Ansible优势和应用场景 Ansible:开源部署工具 开发语言:Python 特点:ssh协议通讯,全平台,无需编译,模块化部署管理 作用:推送playbook进行远程节点快速部署 /index.html https://blog.csdn.net/wating_jx/article/details/71084592 Ansible常用模块操作和编写规范 playbook框架与格式 #同时加载ansible2.5版本 # source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q #验证加载效果 # ansible-playbook : root roles: - testbox #查看树形文件夹 #切换deploy用户,创建ssl秘钥认证 # ssh-keygen -t rsa #指定deploy用户公钥 # ssh-copy-id -i /home/deploy/.ssh/id_rsa root@report.example.com(test.example.com是ansible本机DNS) # ansible-playbook
#首先,生成默认格式的密钥对,私钥与公钥。 ssh-keygen #然后将生成的公钥加入到10.10.107.234的认证列表 ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] #好了公钥认证的相关操作配置完成 #比如,服务器环境从大类上可以分为"生产环境"和"测试环境",把主机分成了两组生产组和测试组,但是生产环境又包含很多业务模块, #比如,A模块生产组、B模块生产组,同理测试环境中也会有同样的问题,比如A syntax-check demo.yml #语法playbook: demo.yml #说明没问题 剧本初识-多个play 比如我们把上面的主机或者组分别分成两个不同的场景:对于Local主机模块是不变化的 WeiyiGeek.restarnginx 那么问题来了?
测试主机连通性 这里报错是因为实验用的主机交换其他两台主机的公钥/私钥的原因导致的 ? 实验SSH免密码登陆设置 生成私钥和公钥 ssh-keygen -t rsa -P '' ? 复制公钥文件问authorized_keys ? 把公钥传送到其他主机 ? 在68的主机上面可以看见公钥已经传送过来了,并且确认文件的权限是否正确 ? 重复以上操作把公钥发送给69的主机 ? 示例2:在playbook中定义变量 ? 测试,也没有问题的 ? 思考?假如同时利用-e的参数传递一个变量的参数的话会怎么样? 检查playbook的文件有没语法错误 ? 测试运行,此处报错是因为找不到nginx的服务,所以应该是没有问题的 ? 正式运行,没有问题 ? 查看一下端口是否已经打开 ? 为了演示效果,实验前把CentOS6的nginx先卸载掉,此处70的报错只是因为ssh缺少那边没有提供公钥文件,此处就不再演示 ? 检查playbook语法有没有问题 ?
添加一组websrvs服务器,以用于下面的测试 测试主机连通性 这里报错是因为实验用的主机交换其他两台主机的公钥/私钥的原因导致的 实验SSH免密码登陆设置 生成私钥和公钥 ssh-keygen - t rsa -P '' 复制公钥文件问authorized_keys 把公钥传送到其他主机 在68的主机上面可以看见公钥已经传送过来了,并且确认文件的权限是否正确 重复以上操作把公钥发送给69的主机 中定义变量 测试,也没有问题的 思考? 为了演示效果,实验前把CentOS6的nginx先卸载掉,此处70的报错只是因为ssh缺少那边没有提供公钥文件,此处就不再演示 检查playbook语法有没有问题 测试运行,没有报错,可以看出当执行 以及handlers出问题了。
在你的电脑上,执行以下操作: 安装ansible 安装ansible 若已安装,可省略 apt install ansible -y ansible授信 生成免密登录需要的秘钥对 ssh-keygen -t rsa -b 4096 把公钥发送到授信机器,注意这里的用户名是ubuntu,腾讯云上默认创建的ssh-copy-id ubuntu@139.155.176.153 ssh-copy-id ubuntu 实际上遇到的问题还是很多的,这里列举一些我遇到的 网络连接问题 整个安装过程需要下载诸多内容,主要包括: ansible脚本 docker images 如果现有的环境无法联网,需要自己配置局域网内的私有数据源来支撑安装过程 ansible运行问题 ansible脚本实际上是把Installing Elastic Cloud Enterprise里面的内容固化为了playbook,将其中过程拆分成了很多tasks,在开始运行之前 安装当前受支持的Docker版本 创建所需的用户并为其设置限制 创建一个xfs分区并对其进行配置 配置docker 根据不同的角色,使用docker下载并安装ECE 其实整个过程中会因为环境的差异出现非常多的问题
云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。
扫码关注云+社区
领取腾讯云代金券