Saltar al contenido

Guardando credenciales para su reutilización por powershell y error ConvertTo-SecureString: la clave no es válida para usar en el estado especificado

No busques más por todo internet ya que has llegado al sitio correcto, tenemos la solución que buscas y sin liarte.

Solución:

Tienes que crear la contraseña. string en la misma computadora y con el mismo inicio de sesión que usará para ejecutarlo.

ConvertFrom-SecureString toma una Key ( y SecureKey) parámetro. Puede especificar el key para guardar el estándar cifrado string y luego usa el key de nuevo en ConvertTo-SecureString para recuperar la seguridad stringindependientemente de la cuenta de usuario.

http://technet.microsoft.com/en-us/library/dd315356.aspx

En un proyecto, implementé el cifrado asimétrico, mediante el cual las personas cifran la contraseña usando el público key y el proceso de automatización tiene el privado key para descifrar contraseñas: manejo de contraseñas en la configuración de producción para la implementación automatizada

Lo siguiente permitirá que las credenciales se guarden como un archivo, luego esas credenciales serán utilizadas por otro script ejecutado por un usuario diferente, de forma remota.

El código fue tomado de un gran artículo producido por David Lee, con solo algunos ajustes menores de mi parte https://blog.kloud.com.au/2016/04/21/using-saved-credentials-securely-in-powershell- guiones/

El primer paso es guardar una contraseña segura en un archivo usando AES. Lo siguiente se ejecutará como un script independiente:

            # Prompt you to enter the username and password
            $credObject = Get-Credential

            # The credObject now holds the password in a ‘securestring’ format
            $passwordSecureString = $credObject.password

            # Define a location to store the AESKey
            $AESKeyFilePath = “aeskey.txt”
            # Define a location to store the file that hosts the encrypted password
            $credentialFilePath = “credpassword.txt”

            # Generate a random AES Encryption Key.
            $AESKey = New-Object Byte[] 32
            [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)

            # Store the AESKey into a file. This file should be protected! (e.g. ACL on the file to allow only select people to read)

            Set-Content $AESKeyFilePath $AESKey # Any existing AES Key file will be overwritten

            $password = $passwordSecureString | ConvertFrom-SecureString -Key $AESKey

            Add-Content $credentialFilePath $password

Luego, en su secuencia de comandos donde necesita usar credenciales, use lo siguiente:

            #set up path and user variables
            $AESKeyFilePath = “aeskey.txt” # location of the AESKey                
            $SecurePwdFilePath = “credpassword.txt” # location of the file that hosts the encrypted password                
            $userUPN = "domainuserName" # User account login 

            #use key and password to create local secure password
            $AESKey = Get-Content -Path $AESKeyFilePath 
            $pwdTxt = Get-Content -Path $SecurePwdFilePath
            $securePass = $pwdTxt | ConvertTo-SecureString -Key $AESKey

            #crete a new psCredential object with required username and password
            $adminCreds = New-Object System.Management.Automation.PSCredential($userUPN, $securePass)

            #use the $adminCreds for some task
            some-Task-that-needs-credentials -Credential $adminCreds

Tenga en cuenta que si el usuario puede obtener acceso al archivo de contraseñas y al key archivo, pueden descifrar la contraseña para el usuario.

Si posees alguna perplejidad y capacidad de ascender nuestro noticia puedes añadir una nota y con deseo lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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