Plink/PuTTY 使用加密密码
Use encrypted password for Plink/PuTTY
我想在 PowerShell 中加密密码并将其与 plink
和 putty
一起使用。
是的,我知道它只需要明文密码 (Password encryption using SecureString for plink.exe command)。
不,我不会使用生成的密钥,因为我们不支持它。
我的问题:
- 关于如何在
putty
或 plink
中为 -pw
标志使用加密密码的任何建议
- 我可以生成特定的字符串作为键吗?我的意思是获取当前的明文密码并将其转换为密钥,然后将其用作
-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
如您所知,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
PuTTY 0.77 Plink 新支持 -pwfile
switch 允许更安全的方式通过本地文本文件(仍然是纯文本)传递密码。
你的问题2)没有任何意义。你写道你不能使用钥匙。所以你不能使用 -i
开关。更不用说使用一些“生成的密码”了。
$Credential = $(Get-Credential)
$user = $Credential.GetNetworkCredential().Username
$pass = $Credential.GetNetworkCredential().Password
是我在脚本中使用的然后我使用-pw;
$ $putty -ssh $server -l $user -pw $pass -m $command
我知道你是说你做了 -I 而不是 -pw 但是我发现它工作得很好,这样就没有任何文件存储你的密码。
这是我的解决方案,它在菜单循环中运行。效果很好。
我只需要 "cache" 我输入的内容或(将之前输入的凭据自动传递到对话框中)否则每次我都必须重新输入凭据。
$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
我想在 PowerShell 中加密密码并将其与 plink
和 putty
一起使用。
是的,我知道它只需要明文密码 (Password encryption using SecureString for plink.exe command)。
不,我不会使用生成的密钥,因为我们不支持它。
我的问题:
- 关于如何在
putty
或plink
中为 - 我可以生成特定的字符串作为键吗?我的意思是获取当前的明文密码并将其转换为密钥,然后将其用作
-i
而不是-pw
-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
如您所知,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
PuTTY 0.77 Plink 新支持 -pwfile
switch 允许更安全的方式通过本地文本文件(仍然是纯文本)传递密码。
你的问题2)没有任何意义。你写道你不能使用钥匙。所以你不能使用 -i
开关。更不用说使用一些“生成的密码”了。
$Credential = $(Get-Credential)
$user = $Credential.GetNetworkCredential().Username
$pass = $Credential.GetNetworkCredential().Password
是我在脚本中使用的然后我使用-pw; $ $putty -ssh $server -l $user -pw $pass -m $command
我知道你是说你做了 -I 而不是 -pw 但是我发现它工作得很好,这样就没有任何文件存储你的密码。
这是我的解决方案,它在菜单循环中运行。效果很好。 我只需要 "cache" 我输入的内容或(将之前输入的凭据自动传递到对话框中)否则每次我都必须重新输入凭据。
$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