Powershell: ConvertFrom-SecureString์ด Linux์—์„œ ์†์ƒ๋จ

์— ๋งŒ๋“  2016๋…„ 08์›” 05์ผ  ยท  62์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: PowerShell/PowerShell

์žฌํ˜„ ๋‹จ๊ณ„

  1. Ubuntu 14.04์— PowerShell ์„ค์น˜
  2. PowerShell ์‹œ์ž‘
  3. ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
   $password = Convertto-Securestring -String "PowerShellRocks!" -AsPlainText -Force
   ConvertFrom-SecureString $password  

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

์˜ค๋ฅ˜ ์—†์Œ

์‹ค์ œ ํ–‰๋™

๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

PS /home/chythu/temp> ConvertFrom-SecureString $password                        ConvertFrom-SecureString : Unable to load DLL 'CRYPT32.dll': The specified
module could not be found.
 (Exception from HRESULT: 0x8007007E)
At line:1 char:1
- ConvertFrom-SecureString $password
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  - CategoryInfo          : NotSpecified: (:) [ConvertFrom-SecureString], Dl
    lNotFoundException
  - FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell
    .Commands.ConvertFromSecureStringCommand

ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ

Name                           Value
---
PSVersion                      5.1.10032.0
PSEdition                      PowerShellCore
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   3.0.0.0
GitCommitId                    v6.0.0-alpha.7
CLRVersion
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

2016-04-10์— @ travisez13์˜ ์—…๋ฐ์ดํŠธ

ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ

> $PSVersionTable
Name                           Value                                           
----                           -----                                           
PSVersion                      6.0.2                                           
PSEdition                      Core                                            
GitCommitId                    v6.0.2                                          
OS                             Darwin 17.5.0 Darwin Kernel Version 17.5.0: M...
Platform                       Unix                                            
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                         
PSRemotingProtocolVersion      2.3                                             
SerializationVersion           1.1.0.1                                         
WSManStackVersion              3.0                                             


ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋‹ค์Œ ์ž‘ํ’ˆ
```Powershell

์ž์‹ ์˜ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

$ ํ‚ค = (3,4,2,3,56,34,254,222,1,1,2,23,42,54,33,233,1,34,2,7,6,5,35,43)
$ s | ConvertFrom-SecureString-ํ‚ค $ Key
```

Area-Cmdlets Issue-Bug OS-Linux OS-macOS Resolution-Fixed

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ•ต์‹ฌ์€ .NET ํ”„๋ ˆ์ž„ ์›Œํฌ (๋ฐ PowerShell)์— ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐœ๋ฐœ / ์šด์˜์ด ๋น„๋ฐ€์„ ์ €์žฅํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์šด OS๋ฅผ ๋ฏน์Šค์— ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ๊ฐ‘์ž๊ธฐ ์‚ฌ๋ผ์ง€์ง€ ์•Š์•˜๊ณ  ํ•ญ์ƒ ์‹ค์šฉ์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Azure KeyVault, RED ID ๊ด€๋ฆฌ ๋˜๋Š” Thycotic Secret Server์™€ ๊ฐ™์€ ์›น ์„œ๋น„์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜•

.NET ํŒ€์€ ์—ฌ๊ธฐ์—์„œ ํŠน๋ณ„ํžˆ ๋„์›€์ด๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ASP.NET์ด ์ž์ฒด DataProtection ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ–ˆ์Œ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ƒ๋‹นํžˆ ์ด์ƒํ•˜๊ณ  ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์‚ฌ์šฉ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ :

PowerShell ํŒ€์€ SecureString ์ง๋ ฌํ™”์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ตฌํ˜„์„ ๋งŒ๋“ค ๊ณ„ํš์ž…๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” cmdlet์„ ์ œ๊ฑฐํ•˜๊ณ  CliXML์— ๋Œ€ํ•ด ํ˜„์žฌ "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Crypto dll ๋งŒ ์žˆ๋‹ค๋ฉด"์˜ค๋ฅ˜๋ณด๋‹ค ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  62 ๋Œ“๊ธ€

https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/security/SecureStringHelper.cs#L449

๋ถ€์กฑํ•œ CoreCLR ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ KrishnaV-MSFT ์ด์•ผ๊ธฐ Azure ๋ฐ๋ชจ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Alpha.10 ๋ฐ–์œผ๋กœ ์ด๋™

MacOS 10.12 ๋ฒ ํƒ€ (16A270f)์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

PS> $User="Jared"
PS> $PWord = ConvertTo-SecureString โ€“String "TestString" โ€“AsPlainText -Force   
PS> $Cred = New-Object -TypeName "System.Management.Automation.PSCredential" โ€“ArgumentList $User, $PWord
PS> ConvertFrom-SecureString -SecureString ($Cred.Password)

๊ฒฐ๊ณผ:

ConvertFrom-SecureString : Unable to load DLL 'CRYPT32.dll': The specified module could not be found.
 (Exception from HRESULT: 0x8007007E)
At line:1 char:1
+ ConvertFrom-SecureString -SecureString ($Cred.Password)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-SecureString], DllNotFoundException
    + FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.ConvertFromSecureStringComman

์•ˆ๋…•ํ•˜์„ธ์š”,

๋งคํ•‘ ๋œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋™์ผํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ค๋ฅ˜ : psdrive :

Get-ChildItem Cert:/LocalMachine/

์˜ค๋ฅ˜:

get-childitem : 'crypt32.dll'DLL์„๋กœ๋“œ ํ•  ์ˆ˜ ์—†์Œ : ์ง€์ •๋œ ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
(HRESULT ์˜ˆ์™ธ : 0x8007007E)
์ค„ : 1 char : 1

  • get-childitem ์ธ์ฆ์„œ : / LocalMachine /
  • ~ ~ ~ ~ ~ ~ ~~~

    • CategoryInfo : ์ง€์ •๋˜์ง€ ์•Š์Œ : (:) [Get-ChildItem], DllNotFoundException

    • FullyQualifiedErrorId : System.DllNotFoundException, Microsoft.PowerShell.Commands.GetChildItemCommand

@ 35359595 ์ข‹์€ ๋ฐœ๊ฒฌ! ์˜ค๋ฅ˜๋Š” ํ™•์‹คํžˆ ๋” ์นœ๊ทผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. Linux ๋ฐ macOS์—์„œ Cert:/ ๊ณต๊ธ‰์ž๋Š” ์žฌ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ์‹œ์Šคํ…œ์ด ์ธ์ฆ์„œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ์„œ๋กœ ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ PowerShell v6 alpha 14๋ฅผ ์‚ฌ์šฉํ•˜๋Š” 16.04.1์—๋Š” ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด ๋ชจ๋“ˆ์„ Linux๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. Windows๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  OS์—์„œ Web API ํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ SecureString์„ ๋‹ค์‹œ ๊ฐ€์ ธ ์˜ค๋Š” .NET Standard 2.0 API๋กœ๋งŒ ํ™œ์„ฑํ™” ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • CoreFX ๋ฌธ์ œ : dotnet / corefx # 13062
  • CoreFX 2.0 PR : dotnet / corefx # 13362

ConvertFrom-SecureString ๋ฐ ConvertTo-SecureString ์— ์˜์กด System.Security.Cryptography.ProtectedData ์•„์ง ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค netstandard2.0 .
๋”ฐ๋ผ์„œ์ด ๋‘ cmdlet์€ Unix ํ”Œ๋žซํผ์—์„œ ๋‹ค์‹œ ์ž‘์—…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด .Net Core์— ์˜ค๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” WinRM์— ์˜์กดํ•˜๊ณ  PSCredential์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. Linux ๋˜๋Š” MacOS์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ์šฐ๋ฆฌ๋ฅผ ์กฐ๊ธˆ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ์˜ค๋ฅ˜ :
ConvertTo-SecureString : DLL 'CRYPT32.dll'์„ (๋ฅผ)๋กœ๋“œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค : ์ง€์ •๋œ ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
(HRESULT ์˜ˆ์™ธ : 0x8007007E)

@ reddwarf666 System.Security.Cryptography.ProtectedData ํŒจํ‚ค์ง€๋Š” nuget.org์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ netstandard2.0 ๋ถˆ๋งŒ ์‚ฌํ•ญ์ด์ง€๋งŒ Unix ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๊ตฌํ˜„์ด ์—†์Šต๋‹ˆ๋‹ค. Unix ํ”Œ๋žซํผ์—์„œ 'PlatformNotSupportedException'์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ConvertFrom/ConvertTo-SecureString ๋Š” Unix ์šฉ์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. Unix์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ .NET Core ํŒ€์˜ ์ง€์นจ์„ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. / cc @joeyaiello

[System.Runtime.InteropServices.Marshal] :: SecureStringToBSTR ๋ฐ [System.Runtime.InteropServices.Marshal] :: PtrToStringAuto๊ฐ€ ํ•จ๊ป˜ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

SecureString cmdlet์„ ์‚ฌ์šฉํ•  ๋•Œ Mac ๋ฐ Linux์˜ 6.0.0-beta3์—์„œ ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ConvertFrom-SecureString : 'CRYPT32.dll'DLL์„๋กœ๋“œ ํ•  ์ˆ˜ ์—†์Œ : ์ง€์ •๋œ
๋ชจ๋“ˆ ๋˜๋Š” ํ•ด๋‹น ์ข…์†์„ฑ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
(HRESULT ์˜ˆ์™ธ : 0x8007007E)

Linux debian (jessie 64 ๋น„ํŠธ)์—์„œ convertfrom-securestring ๋ฐ convertto-securestring (v6.0.0-beta.3)๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

PS /> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.0.0-beta
PSEdition                      Core
GitCommitId                    v6.0.0-beta.3
OS                             Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26)
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

PS />

PS /> read-host -assecurestring | convertfrom-securestring | out-file securestring.txt
********
convertfrom-securestring : Unable to load DLL 'CRYPT32.dll': The specified module or one of its dependencies could not be found.
 (Exception from HRESULT: 0x8007007E)
At line:1 char:29
+ read-host -assecurestring | convertfrom-securestring | out-file secur ...
+                             ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-SecureString], DllNotFoundException
    + FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand



md5-cc0d4e3d925c664b6904e6cd6297ae12



PS /> $pass = cat securestring.txt | convertto-securestring
convertto-securestring : Unable to load DLL 'CRYPT32.dll': The specified module or one of its dependencies could not be found.
 (Exception from HRESULT: 0x8007007E)
At line:1 char:32
+ $pass = cat securestring.txt | convertto-securestring
+                                ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertTo-SecureString], DllNotFoundException
    + FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand



md5-afb1baa637f2a1134516e0960e48b6df



PS /> [Reflection.Assembly]::LoadFrom("CRYPT32.dll")
Exception calling "LoadFrom" with "1" argument(s): "Bad IL format."
At line:1 char:1
+ [Reflection.Assembly]::LoadFrom("CRYPT32.dll")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : BadImageFormatException



md5-cc0d4e3d925c664b6904e6cd6297ae12



PS /> Add-Type -Path 'CRYPT32.dll'
Add-Type : Bad IL format.
At line:1 char:1
+ Add-Type -Path 'CRYPT32.dll'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-Type], BadImageFormatException
    + FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.AddTypeCommand

/opt/microsoft/powershell/6.0.0-beta.3/์— ๋ณต์‚ฌํ•˜๊ณ  ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ ๊ฒฝ์šฐ์—๋„ ์œ„์™€ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ / ์•Œ๋ ค์ง„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๊นŒ?

@vchrizz Windows์™€ Unix๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜ธํ™˜์ด๋˜์ง€ ์•Š์œผ๋ฉฐ Unix์—์„œ Windows dll์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CoreFX๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค.

@iSazonov ๋‚˜๋Š” ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ /opt/microsoft/powershell/6.0.0-beta.3/์˜ .dll ํŒŒ์ผ ๋•Œ๋ฌธ์— ๊ถ๊ธˆํ•ดํ–ˆ์ง€๋งŒ ๋‹ค์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
linux .dll ํŒŒ์ผ :
"PE32 ์‹คํ–‰ ํŒŒ์ผ (DLL) (์ฝ˜์†”) Intel 80386 Mono / .Net ์–ด์…ˆ๋ธ”๋ฆฌ, MS Windows ์šฉ"
"PE32 + ์‹คํ–‰ ๊ฐ€๋Šฅ (DLL) (์ฝ˜์†”) Mono / .Net ์–ด์…ˆ๋ธ”๋ฆฌ, MS Windows ์šฉ"
Windows CRYPT32.dll ํŒŒ์ผ :
"PE32 ์‹คํ–‰ ํŒŒ์ผ (DLL) (GUI) Intel 80386, MS Windows ์šฉ"

์ด์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  Export-Clixml์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

PS /> $cred=Get-Credential โ€“credential "myuser" | Export-Clixml SecureCredentials.xml

Windows PowerShell credential request
Enter your credentials.
Password for user myuser: **********

Export-Clixml : Unable to load DLL 'CRYPT32.dll': The specified module or one of its dependencies could not be found.
 (Exception from HRESULT: 0x8007007E)
At line:1 char:45
+ ... Credential โ€“credential "myuser" | Export-Clixml SecureCredentials.xml
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Export-Clixml], DllNotFoundException
    + FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.ExportClixmlCommand

@vchrizz ํ˜„์žฌ .Net CLI๋Š” ๋ชจ๋“  ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ Unix ํŒจํ‚ค์ง€์— ๋„ฃ์Šต๋‹ˆ๋‹ค. # 3961 Unix ํŒจํ‚ค์ง•์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

@ daxian-dbw OpenSSH ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธ / ๋ณดํ˜ธ ํ•ด์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ง€์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Nuget ํŒ€๋„ ์ด๊ฒƒ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ SteveL-MSFT๋Š” ๊ธฐ๋Šฅ์ด ๋ˆ„๋ฝ ๋œ ๊ฒƒ์œผ๋กœ ์ œ๊ธฐ ํ•œ ์‚ฌ๋žŒ์ด๋ฏ€๋กœ Nuget ํŒ€์ด ํ•„์š”๋กœํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (NuGet / Home # 1851).

@ SteveL-MSFT @psmulovics CoreFX ํŒ€์ด ๋‹ซํžŒ ๋ฌธ์ œ๋ฅผ ์ „ํ˜€ ์ถ”์ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง„์ „์„ ์›ํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์ด์Šˆ ์ƒ์„ฑ https://github.com/dotnet/corefx/issues/22510

์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜„ ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋‹ต์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. Windows์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” OS ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
..
.NET Core์—์žˆ๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. Windows์—์„œ๋Š” DPAPI๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Windows๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์—์„œ Windows DPAPI๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฒฐ๋ก ์„ ๋‚ด๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค.

  1. Windows์—์„œ System.Security.Cryptography.ProtectedData ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๊ณ„ํš ์–‘์‹์—์„œ ๊ธฐ๋Šฅ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‹ค๋ฅธ ๊ณ„ํš ์–‘์‹์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. -๊ทธ๋ ‡๋‹ค๋ฉด ์ถ”์ ์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@iSazonov ๋Š” ์˜ต์…˜ 2๋„ System.Runtime.InteropServices.Marshal์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@iSazonov ์ ์–ด๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋Œ€์‹  ์™„๋ฃŒ๋˜์ง€ ์•Š๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๋ช…ํ™•์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž‘์€ ์ž‘์—… ํ•ญ๋ชฉ์ด ์•„๋‹ˆ๋ฏ€๋กœ 6.1.0์— ๋Œ€ํ•ด ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@ SteveL-MSFT Windows PowerShell๊ณผ์˜ ์—ญ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์˜ค๋Š˜ System.Security.Cryptography.ProtectedData๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ngetchell CoreFX ๋ฌธ์ œ์— ์„ค๋ช… ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋„ˆ๋ฌด ๋งŽ์€ ํŠน์ • ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฏ€๋กœ CoreFX๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค. Unix ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ Windows ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์›๊ฒฉ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@iSazonov ์žฌํ˜„์€ Windows์—์„œ beta.4๋กœ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜๋ฉฐ ํ˜„์žฌ Windows๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ SteveL-MSFT System.Security.Cryptography.ProtectedData์—์„œ ๋ถ€์ •ํ™•ํ•˜๊ฒŒ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. _CoreFX package_๋ฅผ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ์€-๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํŒจํ‚ค์ง€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? Unix์—์„œ * -SecureString cmdlet์„ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

@iSazonov ๊ณต์‹ ํŒจํ‚ค์ง€๋กœ ์ด๋™ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ ๋‹‰์Šค์˜ ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. cc @joeyaiello

์ด ์ด์•ผ๊ธฐ๋ฅผ ๋‹ค์‹œ ํ•‘ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์—ฌ์ „ํžˆ ConvertTo / ConvertFrom SecureString cmdlet์„ _remove_ ํ•  ๊ณ„ํš์ž…๋‹ˆ๊นŒ?
Import / Export CliXml์—์„œ Credentials ๋ฐ SecureStrings ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์ด๋“ค ๋ชจ๋‘๋Š” ์—ฌ์ „ํžˆ HRESULT์—์„œ ๋งค์šฐ ๋น„์šฐํ˜ธ์  ์ธ DllNotFoundException์„ ๋˜์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...

Export-Clixml cmdlet์„ ์‚ฌ์šฉํ•  ๋•Œ Linux์—์„œ CRYPT32.dll ์˜ค๋ฅ˜์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. PS ๋ฒ„์ „ 6.0.0

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์˜ ์ด์‹์„ฑ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด pwsh ๋˜๋Š” CoreFX ์ชฝ ( ํ›„์ž๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค).

@cenit ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” Windows ํ˜ธํ™˜ ๊ธฐ๋Šฅ ํŒฉ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

@iSazonov SecureString์€ Windows ํ˜ธํ™˜ ๊ธฐ๋Šฅ ํŒฉ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ๋น„ Windows์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ํŠน์ • OS ์ง€์›์— ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ œ๊ฑฐ ๋  ๊ฒฝ์šฐ Unix์˜ * -SecureString cmdlet์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋†“์นœ ๊ฒฝ์šฐ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์œ ๋‹‰์Šค์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ์œ ๋‹‰์Šค์—์„œ ์š”๊ตฌ๋˜๋Š” ๋ˆ„๋ฝ ๋œ "OS ํŠน์ •"๋ถ€๋ถ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค๊ณ  ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

CoreFX์˜์ด ๋ฌธ์ œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์š”์•ฝํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค : https://github.com/dotnet/corefx/issues/22510
์•ˆํƒ€๊น๊ฒŒ๋„ ์ง„์ „์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ์ž˜ ์„ค๋ช…ํ•ด์ค๋‹ˆ๋‹ค.

@ SteveL-MSFT WCP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ณตํ†ต ํŒจํ„ด if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { ... } ์‚ฌ์šฉ ๊ฐ€์ •
WCP์— ์ผ๋ถ€ API๊ฐ€ ์—†์œผ๋ฉด WCP ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํ”ผ๋“œ๋ฐฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ ์—†์ด๋„ ์šฐ๋ฆฌ๋Š” #if !UNIX ๊ณผ ๊ฒฐํ•ฉ ๋œ ๊ณตํ†ต ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@iSazonov ์ด ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•ด SecureString ์œ ํ˜•์ด ์‹ค์ œ๋กœ ๋น„ Windows์—์„œ ๋นˆ ๊ตฌํ˜„์ด๋ฏ€๋กœ WCP๊ฐ€ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ข‹์•„์š”. ๐Ÿ˜„

์ข‹์•„, ๋‚ด๊ฐ€ ๋˜‘๋ฐ”๋กœ ์žก์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ํŽธ์ง‘ํ•˜๊ณ ์žˆ๋‹ค ...

  1. Windows๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” SecureString ๊ตฌํ˜„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  2. PowerShell ํŒ€์€์ด๋ฅผ ์กฐ๋กฑํ•˜์—ฌ ํ•„์š”ํ•œ ๋ชจ๋“  API๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ทธ๋Ÿฐ ๋‹ค์Œ .NET ํŒ€์ด์ด๋ฅผ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ ๋‹จ๊ธฐ์  ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ๋งŒ
  4. ๋”ฐ๋ผ์„œ (in) SecureString์„ ์ง๋ ฌํ™”ํ•˜๋ ค๊ณ ํ•˜๋ฉด Windows๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํ•จ์ˆ˜๊ฐ€ ์ด์ œ Windows ์ „์šฉ์ด์ง€๋งŒ ๋ชจ๋“  ๊ณณ์— ๋…ธ์ถœ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

18 ๊ฐœ์›” ์ „์˜ ์กฐ๊ธฐ ๊ฒฝ๊ณ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ 

6 ๊ฐœ์›” ์ „ .Net Framework ํŒ€์˜ _ ๋งค์šฐ ๋ถ„๋ช…ํ•œ _ ๋ฉ”์‹œ์ง€์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ .

๐Ÿ™„

ํ•ต์‹ฌ์€ .NET ํ”„๋ ˆ์ž„ ์›Œํฌ (๋ฐ PowerShell)์— ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐœ๋ฐœ / ์šด์˜์ด ๋น„๋ฐ€์„ ์ €์žฅํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์šด OS๋ฅผ ๋ฏน์Šค์— ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ๊ฐ‘์ž๊ธฐ ์‚ฌ๋ผ์ง€์ง€ ์•Š์•˜๊ณ  ํ•ญ์ƒ ์‹ค์šฉ์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Azure KeyVault, RED ID ๊ด€๋ฆฌ ๋˜๋Š” Thycotic Secret Server์™€ ๊ฐ™์€ ์›น ์„œ๋น„์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜•

.NET ํŒ€์€ ์—ฌ๊ธฐ์—์„œ ํŠน๋ณ„ํžˆ ๋„์›€์ด๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ASP.NET์ด ์ž์ฒด DataProtection ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ–ˆ์Œ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ƒ๋‹นํžˆ ์ด์ƒํ•˜๊ณ  ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์‚ฌ์šฉ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ :

PowerShell ํŒ€์€ SecureString ์ง๋ ฌํ™”์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ตฌํ˜„์„ ๋งŒ๋“ค ๊ณ„ํš์ž…๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” cmdlet์„ ์ œ๊ฑฐํ•˜๊ณ  CliXML์— ๋Œ€ํ•ด ํ˜„์žฌ "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Crypto dll ๋งŒ ์žˆ๋‹ค๋ฉด"์˜ค๋ฅ˜๋ณด๋‹ค ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

๊ด€๋ จ ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
NuGet / Home # 1851
dotnet / corefx # 6746

ASP.NET DataProtection์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ค๋Š˜๋‚  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ์ค‘ ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์šฐ๋ฆฌ๋Š” ๊ฝค ๋งŽ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

MySQL ๋ช…๋ น ์ค„์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์•”ํ˜ธ๋ฅผ ์ฝ์œผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธ๋ฅผ ์ž…๋ ฅ ํ•  ๋•Œ ์ฝ˜์†”์— ์•”ํ˜ธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋„๋ก ๊ถŒ์žฅ๋˜๋Š” ๋Œ€์•ˆ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์žฌํ˜„ ๋‹จ๊ณ„

$str = Read-Host -AsSecureString
ConvertFrom-SecureString -SecureString $str

๊ฒฐ๊ณผ

ConvertFrom-SecureString : Unable to load DLL 'CRYPT32.dll': The specified module or one of its dependencies could not be found.
 (Exception from HRESULT: 0x8007007E)
At line:1 char:1
+ ConvertFrom-SecureString -SecureString $str
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [ConvertFrom-SecureString], DllNotFoundException
+ FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand

@ pcgeek86 ์ด๊ฒƒ์€ Linux์˜ ๋ณด์•ˆ ๋ฌธ์ž์—ด์—์„œ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ์–ป๋Š” ํ•˜๋‚˜์˜ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

$str = Read-Host -AsSecureString
$plaintext = [System.Net.NetworkCredential]::new('',$str).Password

์„ค๋ช…์— ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Linux์—์„œ ๋น„๋ฐ€์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ๊ฝค ์—‰๋ง์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ตฌํ˜„ ๋…ธ๋ ฅ๊ณผ ์˜ค๋ž˜๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Gnome์ด Secret Service API๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. libsecret ์€ Secret Service ๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Mac OS X์—์„œ๋Š” security ๋ช…๋ น ์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํ†ตํ•ด ๋˜๋Š” ํ‚ค ์ฒด์ธ ์„œ๋น„์Šค ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ‚ค ์ฒด์ธ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

QtKeychain ์€ Linux (libsecret ์‚ฌ์šฉ), Mac OS X (ํ‚ค ์ฒด์ธ ์‚ฌ์šฉ) ๋ฐ Windows (Windows Credential Store ์‚ฌ์šฉ)์— ๋Œ€ํ•œ ํ”Œ๋žซํผ ๋…๋ฆฝ์  ์ธ ์•”ํ˜ธ ๋ฐ ๋น„๋ฐ€ ๊ด€๋ฆฌ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ฉฐ ์•„๋งˆ๋„ PowerShell์— ํ•„์š”ํ•œ ๊ฒƒ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์‹œ์ž‘์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋  ๋•Œ๊นŒ์ง€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์— ์ž๊ฒฉ ์ฆ๋ช…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$credentialKey = New-Object 'byte[]' (256/8)
$rng = New-Object 'Security.Cryptography.RNGCryptoServiceProvider'
$rng.GetBytes($credentialKey)

$serializableCredential = [pscustomobject]@{ 
                                                UserName = $credential.UserName;
                                                Password = ConvertFrom-SecureString -SecureString $credential.Password -Key $credentialKey
                                            }

$job = Start-Job {
    param(
        [Parameter(Mandatory)]
        [byte[]]
        $Key
    )
    $serializedCredential = $using:serializableCredential

    $password = ConvertTo-SecureString -String $serializedCredential.Password -Key $Key
    $credential = New-Object 'PSCredential' ($serializedCredential.UserName,$password)
    [Array]::Clear($Key,0,$Key.Length)
} -ArgumentList (,$credentialKey) | Wait-Job | Receive-Job

[Array]::Clear($credentialKey,0,$credentialKey.Length)

์•”ํ˜ธ = ConvertFrom-SecureString -SecureString $ credential.Password -Key $ credentialKey

์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

์–ด์จŒ๋“  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ConvertFrom-SecureString : Cannot bind argument to parameter 'SecureString' because it is null.
At /home/myusername/powershell.ps1:7 char:99
+ ... = ConvertFrom-SecureString -SecureString $credential.Password -Key $c ...
+                                              ~~~~~~~~~~~~~~~~~~~~

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ณ€์ˆ˜์— ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•”ํ˜ธ๋ฅผ ์ •์˜ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ :

ConvertFrom-SecureString : Cannot bind parameter 'SecureString'. Cannot convert the "testpassword" value of type "System.String" to type "System.Security.SecureString".

psremote๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์—ด๋ฆฐ ๋ชจ๋“  ๋ฌธ์ œ๋Š” ์ด๊ฒƒ์˜ ์ค‘๋ณต์œผ๋กœ ๋งˆ๊ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
Linux์—์„œ CryptoAPI ๊ตฌํ˜„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค ๊ตํ™˜ ์ค‘์— PSRemote๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
๊ด€์‹ฌ์ด์žˆ๋Š” ์‚ฌ๋žŒ์€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.
Btw, ์šฐ๋ฆฌ๋Š” ๋ณด์•ˆ ๋ฌธ์ž์—ด์ด ์•„์ง ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ^ ๊ทธ๋ ‡๊ฒŒ ๋ฉˆ์ถ˜๋‹ค๋ฉด ๋ณด์•ˆ ๋ฌธ์ž์—ด๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
๋‚˜์ค‘์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ์— ํ‚ค๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ConvertFrom-SecureString ์ปค๋งจ๋“œ ๋ ›์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ psremoting์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. rsa 2048 ํ‚ค ์Œ์„ ์ƒ์„ฑํ•˜๊ณ , rsa๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™” / ๋ณตํ˜ธํ™”ํ•˜๊ณ , AES CBC ๊ต์ฐจ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ ํ•ด๋… ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ์†Œ์‹์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
PSRemoting์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์•ˆ์ „ํ•œ ๋ฌธ์ž์—ด ์„ ์ง€์›ํ•˜๋Š” PSRP

@KKomarov repo ๋‹จ๊ณ„ ๋ฐ ์ œ์•ˆ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ์—ฌ์‹ญ์‹œ์˜ค.

@KKomarov ๋Š” PSCore6.2-RC์—์„œ https://github.com/PowerShell/PowerShell/issues/8723์˜ ์ผ๋ถ€๋กœ ์ด๋ฏธ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Windows๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๋ณด์•ˆ ๋ฌธ์ž์—ด์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์€ ๋ณ„๋„์˜ ๋ฌธ์ œ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

DE0001 : SecureString์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
https://github.com/dotnet/platform-compat/blob/master/docs/DE0001.md#de0001 -securestring-shouldnt-be-used

๋ฟก ๋นต๋€จ

DE0001 : SecureString์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
https://github.com/dotnet/platform-compat/blob/master/docs/DE0001.md#de0001 -securestring-shouldnt-be-used

์ด๊ฒƒ์ด ์™„๋ฒฝํ•œ ์ƒ์•„ํƒ‘ ์„ธ๊ณ„์—์„œ๋Š” ์ข‹์ง€๋งŒ Powershell์—์„œ๋Š” ์ง€์†์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ๊ฒฐํ•ฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋‚˜๋จธ์ง€ API, ๊ธฐ๋ณธ ์ธ์ฆ ๋งŒ ์ง€์›ํ•˜๋Š” ๋ ˆ๊ฑฐ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ํ˜•์‹์œผ๋กœ ์ธ์ฆํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ถŒ์žฅ ์‚ฌํ•ญ์— ๋ช…์‹œ๋œ๋Œ€๋กœ ๋ชจ๋“  ํ•ญ๋ชฉ์— "Windows ์ž๊ฒฉ ์ฆ๋ช… ๋˜๋Š” ์ธ์ฆ์„œ ์‚ฌ์šฉ"์€ ์ƒˆ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ์œ„ํ•œ ์ข‹์€ ๊ถŒ์žฅ ์‚ฌํ•ญ์ด์ง€๋งŒ powershell์„ ์‚ฌ์šฉํ•˜๋Š” ์šฉ๋„๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

PSCredential์ด SecureString์˜ ๊ตฌํ˜„ ์ธ ๊ณณ์œผ๋กœ๊ฐ€๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ .net ์ฝ”์–ด์— TPM์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค ๋“ฑ์„ ์•”ํ˜ธํ™” ํ•  ์ˆ˜์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€์žˆ์„ ๋•Œ๊นŒ์ง€ "์ถฉ๋ถ„ํžˆ ์ข‹์€"์˜ต์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

AES256์„ ์‚ฌ์šฉํ•˜๊ณ  ์•”ํ˜ธํ™” ํ‚ค๊ฐ€ ๋น„ Windows ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ 600 ๊ถŒํ•œ์ด ๋ถ€์—ฌ ๋œ ํŒŒ์ผ์ด๋˜๋„๋กํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์€ Windows์—์„œ Crypto API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์˜์ง€ ์•Š์€ ์‹œ์ž‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ณด ์šฉ์œผ๋กœ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ณธ์งˆ์ ์œผ๋กœ :

  1. System.Security.Cryptography.ProtectedData๋Š” Windows ์ „์šฉ์ด๋ฏ€๋กœ SecureString์„ ํฌํŒ… ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. API๋ฅผ ์ด์‹ ํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ ํŒ€์€ API๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. Windows์—์„œ SecureString์— ๋Œ€ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์›๊ฒฉ ํฌํ•จ).
  3. PowerShell Core๋Š” ์œ ์—ฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋ ˆ๊ฑฐ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณดํ˜ธ ๋œ ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋ณธ ์ธ์ฆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๋ณดํ˜ธ ๋œ ํ™˜๊ฒฝ๊ณผ ๊ณต์šฉ ํ™˜๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ ์ˆ˜ํ–‰ ํ•  ์ž‘์—… (๊ธฐ๋ณธ ์ธ์ฆ ๋ฐฉ์ง€, ๊ฒฝ๊ณ  ๋งŒ ํฌํ•จ)์˜ ์ฃผ์š” ๋ฌธ์ œ.

์ดˆ๊ธฐ์— @ PowerShell / powershell-committee๋Š” ๋‘˜ ๋‹ค ์•ˆ์ „ํ•˜์ง€ ์•Š๋”๋ผ๋„ SecureString ์˜ ๊ธฐ๋Šฅ์  ์š”๊ตฌ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด SensitiveString ๋„์ž…์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค ( SecureString ์œ ํ˜•์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด). ์œ ํ˜• ( "Sensitive"๋˜๋Š” "Secure"๊ฐ€ ์ž…๋ ฅ์„ ์—์ฝ”ํ•˜์ง€ ์•Š๊ณ  ํ”„๋กฌํ”„ํŠธํ•˜๋„๋ก PowerShell์— ํ‘œ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์›๊ฒฉ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ ์ด์ƒ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.์ด ๋ฒ„๊ทธ์˜ ์›๋ž˜ ๋ฌธ์ œ๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•จ) SecureString์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์ž„์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค.

์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋Œ€๋žต์ ์ธ ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ (์˜ˆ : microsoft-debian-stretch-prod ๋ฐ๋น„์•ˆ ์ €์žฅ์†Œ์—์„œ)?

์ด ๋ฒ„๊ทธ์˜ ์›๋ž˜ ๋ฌธ์ œ๋Š”์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (๋” ์ด์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ). SecureString์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋ผ๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ˆ˜์ •์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์–ด๋–ค ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? powershell_6.1.3-1.ubuntu.16.04_amd64.deb์—์„œ ์—ฌ์ „ํžˆ crypt32.dll ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (6.2.0-rc.1 ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํŒจํ‚ค์ง€์™€ ๋™์ผํ•œ ๊ฑฐ๋ž˜).

๋˜ํ•œ ์ง๋ ฌํ™” ํ•  ๋ฐ์ดํ„ฐ์— SecureString ๋˜๋Š” PSCredential ๊ฐœ์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์„ ๋•Œ์ด ์ˆ˜์ •์ด Import / Export-CliXml์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@rmbolger ์ตœ์‹  ๋นŒ๋“œ (6.2.0-RC)๋กœ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@rmbolger ์™€ ๋˜‘๊ฐ™์€ ๊ฒƒ์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

/home/hillr
03-20 23:44:55 31ms 11> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.2.0-rc.1
PSEdition                      Core
GitCommitId                    6.2.0-rc.1
OS                             Linux 4.4.0-17763-Microsoft #379-Microsoft Wed Mar 06 19:16:00 PST 2019
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0โ€ฆ}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

/home/hillr
03-21 00:47:45 35ms 12> ConvertFrom-SecureString -SecureString $ss
ConvertFrom-SecureString : Unable to load shared library 'CRYPT32.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libCRYPT32.dll: cannot open shared object file: No such file or directory
At line:1 char:1
+ ConvertFrom-SecureString -SecureString $ss
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [ConvertFrom-SecureString], DllNotFoundException
+ FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
5 / 5 - 1 ๋“ฑ๊ธ‰