Ansible批量修改WebLogic JDBC 数据源口令
Posted Oracle一体机用户组
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible批量修改WebLogic JDBC 数据源口令相关的知识,希望对你有一定的参考价值。
根据安全最佳实践,数据库用户口令需要定期更改,当数据库用户口令修改后,对应的weblogic中的数据源也要进行相应的修改,当weblogic domain的个数比较多时,可以利用ansbile这样的工具批量修改,提高效率。
本地执行的wlst脚本网上有很多例子,比如:
##################################################################
#
# Update password for JNDI connections
#
##################################################################
print("*** Trying to Connect.... *****")
connect('weblogic','welcome1','t3://localhost:7001')
print("*** Connected *****")
edit()
startEdit()
print ("*** Encrypt the password ***")
en = encrypt('hr')
print "Encrypted pwd: ", en
print ("*** Changing pwd for LocalDB ***")
dsName = 'LocalDB'
print 'Changing Password for DataSource ', dsName
cd('/JDBCSystemResources/'+dsName+'/JDBCResource/'+dsName+'/JDBCDriverParams/'+dsName)
set('PasswordEncrypted',en)
save()
activate()
为了使用ansible调用在多个主机执行,我们需要将脚本的几个关键信息,修改为变量,通过给脚本传参数,适应多个主机上运行,比如:
# cat updatepw.py
import sys
connect(sys.argv[2],sys.argv[3],sys.argv[1])
print("***Connected *****")
edit()
startEdit()
print ("***Encrypt the password ***")
en =encrypt(sys.argv[4])
print "Encryptedpwd: ", en
dsName = 'DS1'
print 'ChangingPassword for DataSource ', dsName
cd('/JDBCSystemResources/'+dsName+'/JDBCResource/'+dsName+'/JDBCDriverParams/'+dsName)
set('PasswordEncrypted',en)
save()
activate()
这样改造以后,管理服务器URL,weblogic用户名,口令,以及新口令都是以参数形式传递给脚本的。
为了保证加密口令语句的成功,必须保证从domain的根目录下调用wlst。为了简单起见,再写一个shell脚本来保证这一点:
# cat updatepw.sh
#!/bin/bash
cd/home/oracle/mw/user_projects/domains/$1
/home/oracle/mw/wlserver_10.3/common/bin/wlst.sh/tmp/updatepw.py $2 $3 $4 $5
其中wlst.sh的绝对路径请根据具体情况修改。我这里假设所有主机上weblogic的home目录都是一样的,如果不一样,也可以实现,就是更麻烦一点,把这部分也变成变量,通过参数传递值。
具体的playbook脚本比较简单:
# cat updatepw.yml
- name: updatepassword of jdbc DS
hosts: cell
remote_user: oracle
gather_facts: no
tasks:
- name: copy updatepw.py
copy: src=./updatepw.py dest=/tmp/mode=0755 force=yes
- name: copy updatepw.sh
copy: src=./updatepw.sh dest=/tmp/mode=0755 force=yes
- name: run updatepw.sh
shell: /tmp/updatepw.sh {{dname}} {{durl}}{{duser}} {{dpass}} {{newpass}}
将updatepw.py和updatepw.sh分发到各个主机,然后再执行updatepw.sh,并使用ansible变量传递参数,在脚本中定义了5个变量:
Weblogic域名称: dname
管理服务器URL: durl
Weblogic用户名: duser
Weblogic口令: dpass
更改的新口令: newpass
这几个变量我在ansible的inventory文件中给出了值,也就是/etc/ansible/hosts
[cell]
192.168.0.18 dname=domain3 durl=t3://localhost:7001duser=weblogic dpass=welcome1
192.168.0.19 dname=domain1 durl=t3://localhost:7001duser=weblogic dpass=welcome1
[cell:vars]
newpass=test
在每个主机后面写的是host vars,每个主机对应的值可以不一样。
[cell:vars] 部分给出的是group vars,这个变量的值在组中所有主机上都一样。
# ansible-playbookupdatepw.yml
PLAY[update password of jdbc DS]************************************************************************************************
TASK[copy updatepw.py] ************************************************************************************************
ok:[192.168.0.19]
ok:[192.168.0.18]
TASK[copy updatepw.sh]************************************************************************************************
ok:[192.168.0.19]
ok:[192.168.0.18]
TASK [runupdatepw.sh]************************************************************************************************
changed:[192.168.0.19]
changed:[192.168.0.18]
PLAYRECAP ************************************************************************************************
192.168.0.18 : ok=3 changed=1 unreachable=0 failed=0
192.168.0.19 : ok=3 changed=1 unreachable=0 failed=0
使用ansible做这样的事,有很多口令都是明文写在inventory文件中的,存在安全隐患,如果要提高安全性,可以使用ansible-vault来加密信息:
比如我们可以将ansible的hosts文件加密,这样,写在其中的口令信息就不会泄露了,具体方法:
# ansible-vaultencrypt hosts
New Vault password:
Confirm New Vaultpassword:
Encryption successful
执行时会要求你输入加密的口令,这个口令在执行playbook时需要用来解密相应的文件。
加密后的hosts文件内容会变成这样:
# cat hosts
$ANSIBLE_VAULT;1.1;AES256
63326132643838643339346635346234626139613665393430613435626533643634363139373932
3630656434313261313039626432613435343034636430350a323132396435623030383632353461
36323061343434623337646637376465643332366330383461386566613139623661663665643730
……
使用加密后的hosts文件运行playbook的方法:
# ansible-playbook --ask-vault-passupdatepw.yml
系统会提问加密口令,输入加密口令后,在内存中解密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 数据源口令的主要内容,如果未能解决你的问题,请参考以下文章