Ansible批量修改WebLogic JDBC 数据源口令

根据安全最佳实践,数据库用户口令需要定期更改,当数据库用户口令修改后,对应的weblogic中的数据源也要进行相应的修改,当weblogic domain的个数比较多时,可以利用ansbile这样的工具批量修改,提高效率。

修改Data Source口令的wlst脚本

本地执行的wlst脚本网上有很多例子,比如:

为了使用ansible调用在多个主机执行,我们需要将脚本的几个关键信息,修改为变量,通过给脚本传参数,适应多个主机上运行,比如:

这样改造以后,管理服务器URL,weblogic用户名,口令,以及新口令都是以参数形式传递给脚本的。

为了保证加密口令语句的成功,必须保证从domain的根目录下调用wlst。为了简单起见,再写一个shell脚本来保证这一点:

其中wlst.sh的绝对路径请根据具体情况修改。我这里假设所有主机上weblogic的home目录都是一样的,如果不一样,也可以实现,就是更麻烦一点,把这部分也变成变量,通过参数传递值。

Ansible playbook及变量定义

具体的playbook脚本比较简单:

将updatepw.py和updatepw.sh分发到各个主机,然后再执行updatepw.sh,并使用ansible变量传递参数,在脚本中定义了5个变量:

Weblogic域名称: dname

管理服务器URL: durl

Weblogic用户名: duser

Weblogic口令: dpass

更改的新口令: newpass

这几个变量我在ansible的inventory文件中给出了值,也就是/etc/ansible/hosts

在每个主机后面写的是host vars,每个主机对应的值可以不一样。

[cell:vars] 部分给出的是group vars,这个变量的值在组中所有主机上都一样。

执行ansible playbook

将updatepw.py, updatepw.sh, updatepw.yml放在ansible server上的同一路径下,执行:

口令安全问题

使用ansible做这样的事,有很多口令都是明文写在inventory文件中的,存在安全隐患,如果要提高安全性,可以使用ansible-vault来加密信息:

比如我们可以将ansible的hosts文件加密,这样,写在其中的口令信息就不会泄露了,具体方法:

执行时会要求你输入加密的口令,这个口令在执行playbook时需要用来解密相应的文件。

加密后的hosts文件内容会变成这样:

使用加密后的hosts文件运行playbook的方法:

系统会提问加密口令,输入加密口令后,在内存中解密hosts文件,保证playbook能够被正常执行。

加密后的文件,可以通过ansible-vault decrypt <文件名>方式解密。

也可以通过ansible-vault view <文件名>方式直接查看内容,还可以通过ansible-vault edit <文件名>来直接编辑,当然,这些命令都是会要求输入加密口令的。

另外,当配置ansbile使用用户名/口令登录各主机时,需要将ansible_ssh_user, ansible_ssh_pass以host vars的形式写在inventory文件或变量文件中,为了安全,也可以用类似的方式加密。

未经允许不得转载:Oracle一体机用户组 » Ansible批量修改WebLogic JDBC 数据源口令

相关推荐