Password encriptado para uso en scripts

Buenas, en este post vamos a ver uno de los procedimientos que podemos usar para guardar passwords en ficheros encriptados que posteriormente usaremos para nuestros scripts.

¿Cuantos scripts nos hemos encontrado con los password en texto plano dentro de los mismos?

Obviamente esto no es seguro. Vamos a ver una forma sencilla de evitar esto.

Con las siguientes lineas de código generaremos los ficheros necesarios para su posterior uso.

 

#Generamos el fichero keyfile
$KeyFile = "D:\cloudvm.vmware" 
#Generamos la clave de encriptación y la volcamos al keyfile
$Key = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key) 
$Key | out-file $KeyFile 

#Creamos el fichero de password y lo encriptamos con nuestro keyfile
$PasswordFile = "D:\cloudvm.vcenter" 
$Key = Get-Content $KeyFile 
$Password = "P@ssword1" | ConvertTo-SecureString -AsPlainText -Force 
$Password | ConvertFrom-SecureString -key $Key | Out-File $PasswordFile 

Con esto ya tenemos generado el fichero key «cloudvm.vmware» y el fichero de password «cloudvm.vcenter» encriptado en base a nuestra key. Una vez generados no es necesario volver a hacerlo al menos que cambiemos el password del usuario.

Vemos ahora un ejemplo de uso de estos dos ficheros, en el que simplemente conectaremos contra nuestro vCenter.

#Definimos vCenter
$VCENTER="vcenter.cloudvm.es"
#Definimos el usuario de conexión a vCenter
$vCenterUser = "cloudvm@cloudvm.local"

#Definimos la ubicación del password file generado
$PasswordFile = "D:\cloudvm.vcenter"

#Definimos la ubicación del key file generado y leemos el contenido
$KeyFile = "D:\cloudvm.vmware"
$Key = Get-Content $KeyFile

#Creamos un fichero de credenciales con toda la info anterior
$Credential =New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $vCenterUser, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $Key)

#Conectamos a vCenter con el fichero de credenciales generado
Connect-VIServer -server $VCENTER -Credential $Credential -WarningAction Ignore | out-null

#Resto de codigo del script
#Desconectar de vCenter as usual

Y con esto ya no necesitamos usar nuestro password en texto plano de forma insegura. Para hacerlo aun mas seguro, deberíamos estudiar donde ubicamos nuestros ficheros key y password, a poder ser separados y en un share securizado por ejemplo, esto lo dejo para cada caso concreto de uso.

En siguientes post veremos como crear un modulo de PowerShell, de manera que no tengamos que reutilizar tanto código en todos nuestros scripts.

Gracias por compartir 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *