Используйте зашифрованный пароль для Plink/PuTTY

Я хотел бы зашифровать пароль в PowerShell и использовать его с plink и putty.

Да, я знаю, что он ожидает только открытый пароль (шифрование пароля с использованием команды SecureString для plink.exe).

Нет, я не буду использовать сгенерированные ключи, потому что мы это не поддерживаем.

Мои вопросы:

  1. Любые предложения, как я могу использовать зашифрованный пароль для флага -pw в putty или plink
  2. Могу ли я сгенерировать определенную строку в качестве ключа? Я имею в виду взять текущий пароль в открытом виде и преобразовать его в ключ, а затем использовать его как -i вместо -pw

Мой securePass.ps1 код:

$password = read-host -prompt "Enter your Password" 
write-host "$password is password" 
$secure = ConvertTo-SecureString $password -force -asPlainText 
$bytes = ConvertFrom-SecureString $secure 
$bytes | out-file C:\encrypted_password1.txt

В основном:

$securePass = Get-Content C:\encrypted_password1.txt
$pass = $securePass | ConvertTo-SecureString
plink -batch -ssh $defUser@$srv -pw $pass
putty -ssh $defUser@$srv -pw $pass

person igor    schedule 02.11.2017    source источник


Ответы (3)


Как вы знаете, вы не можете использовать зашифрованный пароль (SecureString) для PuTTY/Plink.

Все, что вы можете сделать, это расшифровать защищенную строку и передать расшифрованный текстовый пароль в PuTTY/Plink.

Для расшифровки см. PowerShell — декодирование System.Security.SecureString в читаемый пароль:

$securePass = Get-Content C:\encrypted_password1.txt
$pass = $securePass | ConvertTo-SecureString

$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($pass)
$decrypted = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
plink -batch -ssh $defUser@$srv -pw $decrypted 

Ваш вопрос 2) не имеет никакого смысла. Вы написали, что не можете пользоваться ключами. Таким образом, вы не можете использовать переключатель -i. Давайте использовать только какой-нибудь «сгенерированный пароль».

person Martin Prikryl    schedule 02.11.2017

$Credential = $(Get-Credential)
$user = $Credential.GetNetworkCredential().Username
$pass = $Credential.GetNetworkCredential().Password

то, что я использую, то в сценарии я использую -pw; $ $putty -ssh $server -l $user -pw $pass -m $команда

Я знаю, что вы сказали, что сделали -I вместо -pw, однако я обнаружил, что это работает довольно хорошо, так как файл с вашим паролем нигде не хранится.

person Shelby    schedule 11.12.2017

Это было мое решение, которое работает в цикле меню. работает очень хорошо. Мне просто нужно «кэшировать» мой введенный ввод или (автоматически передавать ранее введенные учетные данные в диалоговое окно), иначе каждый раз, когда мне приходится повторно вводить учетные данные.

$Key = New-Object Byte[] 32
     [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)
$Key | Out-File AES.key
(get-credential).Password | ConvertFrom-   SecureString -key (get-content AES.key) | set-content "AESPassword.txt"
$password = Get-Content AESPassword.txt |   ConvertTo-SecureString -Key (Get-Content AES.key)
$credential = New-Object System.Management.Automation.PsCredential($env:userName,$password)
$ServerName = Read-Host -Prompt "What is the server name?"
$Command = ".\plink.exe"
$arg1  =  '-t'
$arg2 = $credential.GetNetworkCredential().username+'@'+$ServerName
$arg3 = '-pw'
$arg4 = $credential.GetNetworkCredential().Password
$arg5 = $scriptcmd
#Write-Output $Command $arg1 $arg2 $arg3 $arg4 $arg5
& $Command $arg1 $arg2 $arg3 $arg4 $arg5
person Elektro Kinetik    schedule 12.10.2018
comment
Как и в случае с вашим предыдущим ответом, это не имеет смысла. Вы запрашиваете у пользователя пароль, шифруете его с помощью сложного кода только для того, чтобы расшифровать его обратно и передать в расшифрованном виде в Plink. Почему? - Я уже писал тебе несколько раз: не трать время зря. Вы не можете передать зашифрованный пароль в Plink. Ни за что. - person Martin Prikryl; 12.10.2018
comment
Не могли бы вы не комментировать мой пост? кажется вашим упрямым не в состоянии видеть точку зрения других людей. Это работает для меня, если вам это не нравится... продолжайте :) - person Elektro Kinetik; 12.10.2018