2016-10-13 4 views
5

Я знаю, что я могу сохранить пароль к файлу:сохранить PSCredential в файле

Read-Host "Enter Password" -AsSecureString | ConvertFrom-SecureString | Out-File $passwordfile 

и прочитать его из файла:

$secpasswd = (Get-Content $passwordfile | ConvertTo-SecureString) 

, а затем создать PSCredential объект:

$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd) 

Но могу ли я сохранить $ credential в файле, поэтому имя пользователя и пароль были сохранены вместе?

ответ

8

Для хранения и извлечения зашифрованных учетных данных легко использовать PowerShell встроенный в XML-сериализации (Clixml):

$credential = Get-Credential 

$credential | Export-CliXml -Path 'C:\My\Path\cred.xml' 

реимпортировать:

$credential = Import-CliXml -Path 'C:\My\Path\cred.xml' 

Важно помнить о том, что по умолчанию используется API защиты данных Windows, а ключ, используемый для шифрования пароля, специфичен как для пользователя , так и для устройства, в котором работает код.

В результате зашифрованные учетные данные не могут быть импортированы другим пользователем или одним и тем же пользователем на другом компьютере.

Зашифровав несколько версий одинаковых учетных данных с разными пользователями и на разных компьютерах, вы можете иметь один и тот же секрет для нескольких пользователей.

Поставив имя пользователя и компьютера в имени файла, вы можете хранить все зашифрованные секреты таким образом, что позволяет и тот же код, чтобы использовать их без жесткого либо кодирования:

Encrypter

# run as each user, and on each computer 

$credential = Get-Credential 

$credential | Export-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 

код, который использует сохраненные учетные данные:

$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 

правильная версия файла для работающего пользователя будет загружен автоматически (или она не будет выполнена потому что файл не существует).

+0

У меня возникла идея сохранить учетные данные на моем ноутбуке, а затем использовать их на сервере, а не жестко кодировать их в скрипте. Похоже, это невозможно. Но могу ли я использовать сохраненный зашифрованный пароль на другом компьютере? – Alexan

+0

@Alex, если вы сохраняете их на одном компьютере, вы не можете загружать их на другой, если вы не используете свой собственный ключ шифрования; но если вы это сделаете, у вас возникнет проблема получения/транспортировки/использования ключа при расшифровке и сохранении его в секрете. Вы можете перезагрузить их на своем компьютере, а затем (возможно) передать их на другой компьютер во время выполнения, например, через некоторый зашифрованный транспорт (например, через удаленный PowerShell)? Это зависит от того, что вы пытаетесь сделать. – briantist

+0

Что делать, если есть несколько пользователей? Можем ли мы хранить учетные данные более чем у одного пользователя? Если да, то как получить учетные данные конкретного пользователя? –