Actualización de hash de contraseña encryption almacenado en un file XML para sincronizar con los cambios de contraseña de dominio

¿Hay alguna forma de automatizar la tarea de mantener el file settings.xml (utilizado por Maven) sincronizado con los cambios de contraseña de dominio? La list de repositorys en settings.xml está creciendo a medida que más desarrollo migra a maven, por lo que la tarea de actualización también está creciendo.

Recientemente hemos comenzado a usar maven con algunos repositorys svn internos (corporativos) que usan el ID de usuario y la contraseña de cada desarrollador para controlar el acceso a su repository. Nuestras passwords de dominio caducan y deben cambiarse con frecuencia. Lo que significa (con frecuencia) actualizar ~ / .m2 / settings.xml con una nueva contraseña-hash.

Preferiría una solución bash o csh que haga uso de commands simples que ya existen en mis sistemas.

Vi references a Sonatype Nexus aquí en SO, parece que podría ser útil, y se lo recomendaré a nuestro personal de CM. Pero no soy optimista de que se adopte pronto, si es que alguna vez lo hace. Y no tengo time para mantener una copy privada de otra herramienta.

Ideas?

Gracias, Ken

Escribí un script bash que funciona bien para este propósito. Requiere una pequeña adición en ~ / .m2 / settings.xml para soporte (ver a continuación). La secuencia de commands toma un argumento opcional: una serie de expresiones regulares utilizada para hacer coincidir las tags opcionales asociadas con uno o más passwords de contraseña en el file xml. Estoy usando esto para indicar Domain-Name, pero podría ser cualquier cosa (o nada, ya que es opcional).

La secuencia de commands solicita que la nueva contraseña sea hash, restringe el hash generado recientemente para que sea puramente alfanumérico (para evitar posibles problemas con el escape involuntario de shell en otros lugares), realiza una copy de security del file settings.xml y luego actualiza los hashes seleccionados en settings.xml. Aquí está el guión:

#!/bin/bash # Update instances of password-hashes in ~/.m2/settings.xml for a given password [and domain] # Usage: ./mvnpwd.sh [domain-name-regex-string] # Force domain-string to upper-case to keep things simple ... mvnDomainNameRegexString=`echo $1 | tr '[az]' '[AZ]'` echo -n "New Password: " read -s mvnPassword echo # Prefer pure alpha-numeric hash ... mvnPasswordHash="" while [ -z "$mvnPasswordHash" ] do mvnHashMash=`mvn --encrypt-password "$mvnPassword"` mvnPasswordHash=`echo "$mvnHashMash" | egrep -o "\{[[:alnum:]]+\=\}"` done cp ~/.m2/settings.xml ~/.m2/settings.xml.old oldPasswordHash=`egrep -o "<changingPasswordHash_*$mvnDomainNameRegexString>\{[a-zA-Z0-9]+\=\}</changingPasswordHash_*$mvnDomainNameRegexString>" ~/.m2/settings.xml | egrep -o "\{[a-zA-Z0-9]+\=\}"` set $oldPasswordHash for p do sed --in-place -e "s/$p/$mvnPasswordHash/g" ~/.m2/settings.xml done 

Agregué un bloque de comentarios cerca de la parte superior del file settings.xml para admitir mi script. Estoy usando tags tipo xml para identificar (para el script) los valores de contraseña-hash que se usan en otro lugar en el file xml, Y para asociar cualquier nombre de dominio [opcional] con un valor hash dado. Como todo esto ocurre dentro de un bloque de comentarios, maven debería ignorarlo. Aquí hay un ejemplo settings.xml:

 <settings> <!-- Info below is to aid in updating passwords that change periodically (eg, domain password) ... <changingPasswordHash>{SomeHashWithoutADomainxYzZyHaShGiBbErIsHsTuFf=}</changingPasswordHash> <changingPasswordHash_MYDOMAIN>{SomeHashForMyDomainxYzZyHaShGiBbErIsHsTuFf=}</changingPasswordHash_MYDOMAIN> <changingPasswordHash_ANOTHERDOMAIN>{SomeHashForAnotherDomainxYzZyHaShGiBbErIsHsTuFf=}</changingPasswordHash_ANOTHERDOMAIN> --> <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>myProxy.rightHere.com</host> <port>80</port> <username>justMe</username> <password>{SomeHashWithoutADomainxYzZyHaShGiBbErIsHsTuFf=}</password> <nonProxyHosts>*.rightHere.com|*.whereIWork.com</nonProxyHosts> </proxy> </proxies> <servers> <server> <id>mySVNrepo1.rightHere.com</id> <username>justMe</username> <password>{SomeHashForMyDomainxYzZyHaShGiBbErIsHsTuFf=}</password> </server> <server> <id>corpSVNrepo2.whereIWork.com</id> <username>justMe</username> <password>{SomeHashForAnotherDomainxYzZyHaShGiBbErIsHsTuFf=}</password> </server> <server> <id>anotherSVNrepo3.notHere.com</id> <username>myOtherUserID</username> <password>{SomeHashWithoutADomainxYzZyHaShGiBbErIsHsTuFf=}</password> </server> </servers> </settings>