martes, 9 de julio de 2013

Crear credenciales encriptada en un fichero con PowerShell

Hola,

Hoy voy a empezar a publicar los scripts basados en PowerShell para Netapp, que también publico en Netapperos.com, web dedicada a los locos de Netapp. 

Lo primero aclarar que no es lo mismo una credencial ofuscada que una credencial encriptada. Si se quieren ejecutar los scripts siempre con la misma máquina y siempre con el mismo usuario, la forma más segura es almacenar las credenciales en un fichero encriptado. Si se va a ejecutar el script desde varias máquinas y con varios usuarios, la única forma que se me ocurre es ofuscar las credenciales, o lo que es lo mismo, darles un aspecto de encriptado, pero en realidad se podría revertir y llegar a sacar la información. Este último caso lo veremos en otro post.

Este es el caso primero, el de crear un fichero de texto encriptado para guardar las credenciales y que éstas sean seguras. Es un proceso muy sencillo, pero tiene como limitación que utiliza nuestros IDs para hacer la encriptación de la contraseña. Es decir, que si lo utiliza otra persona le pedirá introducir las credenciales.

CREAR EL FICHERO DE TEXTO
-------------------------------------
Este script va a mostar una pantalla de login, donde meteremos las credenciales que queremos utilizar y automáticamente nos generará un fichero llamado CRED.TXT, donde las almacena de forma encriptada. Para que funcione es tan simple como copiar estas dos líneas de código en un nuevo PS1 y ejecutarlo.
$Credential = Get-Credential
$credential.Password | ConvertFrom-SecureString | Set-Content CRED.TXT

ASOCIAR EL FICHERO A UN SCRIPT
-------------------------------------------
Este trozo de script se pegará en nuestro PS1 para 'rescatar' las credenciales que tenemos encriptadas en CRED.TXT. Hay que fijarse que es necesario incluir el usuario asociado a las credenciales. En nuestro caso he utilizado 'root'. En fichero CRED.TXT se encuentra en el mismo path que el script, pero se podría centralizar y apuntar hacia esa ruta.
$password = Get-Content CRED.TXT | ConvertTo-SecureString
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "root",$password

Espero que os sea útil. Es una forma de poder ejecutar scritps sin tener que recordar las credenciales o tener que incluirlas en texto plano dentro del código.
Un saludo,

No hay comentarios: