使用SecureString进行plink.exe命令的密码加密

时间:2013-02-11 22:25:26

标签: powershell password-encryption plink securestring

我想在PowerShell中加密密码

我试过了:

在CLI中:

Read-Host -prompt "Password ?" -AsSecureString | ConvertFrom-SecureString | out-file "D:\root.pwd"

在我的script.ps1中:

$pwsNAS = Get-Content "D:\root.pwd" | ConvertTo-SecureString
plink.exe root@192.168.x.y -pw $pwdNAS df

但它不起作用......

我尝试过凭据,但似乎没有更好......

(我的密码没有任何空格或重音字符)

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

当然它不起作用。 plink期望-pw选项的(明文)密码,而不是SecureString对象。如果要在脚本中避免使用明文密码:请使用公钥身份验证。如果您不希望其他人知道您的密码(或密钥):给他们自己的帐户和密码/密钥。

答案 1 :(得分:0)

要通过ssh进行连接,最好使用由PuttyGen或其他密钥生成工具生成的密钥。

但是,有一种方法可以将安全字符串转换为明文字符串,详细here.请注意:a)只有当同一个用户帐户同时加密和解密安全字符串时才会有效,并且b)它是不太安全。

答案 2 :(得分:0)

有关解密,请参阅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 ... -pw $decrypted 

尽管如其他答案所示,您最好使用公钥身份验证。