Credenciales con PowerShell

PowerShell ofrece un mundo de opciones y maneras de realizar las cosas, nunca existe una única solución para una tarea en particular. Dentro de PowerShell se encuentra la posibilidad de acceder con credenciales diferentes a las que se están utilizando en la consola al momento de ejecutarla, por lo que es indispensable conocer como manipular estos datos que en algunos casos pueden llegar a ocasionar brechas de seguridad si no se encuentran en buenas manos. Por lo que manipular credenciales con PowerShell tiene que ser un tema que debemos conocer en detalle.

Credenciales con PowerShell

Existe un primer Cmdlet para manipular las credenciales con PowerShell, que tiene por nombre Get-Credential. Con este Cmdlet vamos a poder generar un objecto del tipo PSCredential, el cúal nos va a servir para varios y repetidos usos, como por ejemplo el siguiente:

$Credentials = Get-Credential
Connect-MsolService -Credential $Credential

Credenciales en PowerShell

Con el código anterior, nos va a desplegar un cuadro para poder ingresar nuestras credenciales, que nos van a servir para iniciar sesión en Office 365.

Ahora que es lo que realmente hace este cmdlet? Sabemos que genera un objeto, por lo que podemos investigar sus propiedades, vamos a ejecutar:

$Credentials | Get-Member

Para poder ver todas las propiedades y métodos que contiene. Ahora que sabemos esto, podemos ejecutar

$Credentials.UserName 

Para que nos devuelva el nombre ingresado en las credenciales, por ejemplo.

Get-Credential

Crear un objecto SecureSctring

Básicament existen 2 maneras de crear un objecto “SecureString”:

#Primera opción
$SecureString = Read-Host -AsSecureString
#Segunda opción
$SecureString = ConvertTo-SecureString "Contraseña" -AsPlainText -Force

En el primer caso si comparamos con Get-Credential, vemos que solamente podemos proveer la contraseña. Este ejemplo va a solicitarnos que ingresemos la contraseña con un prompt en la consola misma de PowerShell.

Obviamente que la segunda opción no es muy practica en el caso de utilizarlo en un script, ya que la contraseña queda a la vista de todos, por ello es que vamos a ver como guardar las contraseñas ya encriptadas y no en forma de “texto plano”

Guardar una contraseña encriptada

$SecureString = Read-Host -AsSecureString
$EncryptedPassWord = ConvertFrom-SecureString -SecureString $SecureString
Set-Content -Path "C:\tmp\mypass.txt" -Value $EncryptedPassWord

Con el bloque anterior vamos a guardar en un archivo de texto la contraseña ya encriptada.

Ahora como vamos a hacer para poder utilizar esta contraseña dentro de nuestros scripts, con el siguiente código:

$EncryptedPassWord = Get-Content -Path "C:\tmp\mypass.txt"
$SecureString = ConvertTo-SecureString -String $EncryptedPassWord
$Credentials = New-Object System.Management.Automation.PSCredential "UserName", $SecureString

Vamos va revisar lo anterior: Primero se obtiene la contraseña encriptada del archivo de texto. Luego se guarda en la variable $SecureString, para posteriormente generar un objecto PSCredential (el mismo objeto que genera el Cmdlet Get-Credential) usando la contraseña definida en la variable $SecureString y definiendo el nombre del usuario como UserName.

Ahora bien, ya con este último procedimiento vamos a tener una mejor idea de como se manipulan las credenciales en PowerShell.

Comments