使用Plink / PuTTY的加密密码

时间:2017-11-02 07:26:52

标签: powershell encryption putty ssh-keys plink

我想在PowerShell中加密密码,并将其与plinkputty一起使用。

是的,我知道它只需要明文密码(link)。

不,我不会使用生成的密钥,因为我们不支持它。

我的问题:

  1. 有关建议如何在-pwputty
  2. 中使用plink标记的加密密码的任何建议
  3. 我可以生成特定的字符串作为密钥吗?我的意思是获取当前的明文密码并将其转换为密钥,然后将其用作-i而不是-pw
  4. 我的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
    

3 个答案:

答案 0 :(得分:1)

如您所知,您不能对PuTTY / Plink使用加密密码(SecureString)。

您所能做的就是解密安全字符串并将解密的纯文本密码传递给PuTTY / Plink。

有关解密的信息,请参阅PowerShell - Decode System.Security.SecureString to readable password

$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开关。我们只使用一些"生成的密码"用它。

答案 1 :(得分:1)

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

是我在脚本中使用的-pw;     $ $ putty -ssh $ server -l $ user -pw $ pass -m $ command

我知道你说你做了 - 我而不是-pw然而我发现它的效果非常好,因为没有任何文件存储密码存储在任何地方。

答案 2 :(得分:-2)

这是我的解决方案,它在菜单循环中运行。效果很好。 我只需要“缓存”我输入的内容,或者(自动将先前输入的凭据自动传递到对话框中),否则每次我都必须重新输入凭据时。

$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