PowerShell을 사용하여 PuTTY를 통해 RHEL 루트 비밀번호를 변경했지만 비밀번호를 무엇으로 변경했는지 모르겠습니다.


8

기본적으로 제목입니다. 내 친구가 Powershell 및 PuTTY를 통해 RHEL 비밀번호를 일괄 변경하는 스크립트를 제공했지만 로그인 할 때 입력 한 새 비밀번호가 작동하지 않습니다. 문제는 특수 문자 중 하나를 이스케이프하지 않는 것입니다. 새 비밀번호에 새 비밀번호가 무엇인지 알 수 없습니다.

내가 사용한 "새 비밀번호"는 다음과 비슷합니다 : a1b2c3d "4e5f6g7

일반 문자열의 보안 문자열을 바꾸거나 SSH 대신 telnet을 패킷 캡처와 함께 사용하여 정확히 무엇을 보내고 있는지 확인하려고했지만 지금까지는 효과가 없었습니다.

System.Management.Automation.PSCredential -argumentlist "root",$newrootPassword
     $newrootPassword2 = Read-Host "Retype new root password" -AsSecureString
     $newrootCredential2 = new-object -typename System.Management.Automation.PSCredential -argumentlist "root",$newrootPassword2


    putty.exe -ssh -pw $oldrootCredential.GetNetworkCredential().Password root@$_

    echo y | plink.exe -ssh -v -pw $oldrootCredential.GetNetworkCredential().Password root@$_ "echo root:'$newrootPassword' | chpasswd" 2>&1 

새 비밀번호가 a1b2c3d "4e5f6g7 일 것으로 예상했지만 로그인시 작동하지 않습니다.

답변:


16

문제는 SecureString을 표준 문자열이 필요한 것으로 전달하려고한다는 것입니다. Password 속성은 SecureString 형식이며 plink에 전달할 수 없으며 System.Security.SecureString으로 변환됩니다 . 암호 변경이 실제로 작동 한 경우 암호가 설정된 것입니다.

SecureString을 plink 명령에 적합한 텍스트 형식으로 변환하려면 여기 에서이 예제와 같은 함수를 사용해야합니다.

function Get-PlainText()
{
    [CmdletBinding()]
    param
    (
        [parameter(Mandatory = $true)]
        [System.Security.SecureString]$SecureString
    )
    BEGIN { }
    PROCESS
    {
        $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString);

        try
        {
            return [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr);
        }
        finally
        {
            [Runtime.InteropServices.Marshal]::FreeBSTR($bstr);
        }
    }
    END { }
}

Write-Host실제 plink.exe로 테스트하기 전에 명령 줄 값을 출력 하여 명령을 테스트 할 수 있습니다 . 또는 ProcMon 을 실행 하고 Operation is Process Create에서 필터링 한 다음 plink.exe가 시작되면 속성을 사용하여 전달되는 전체 실제 명령 줄을 볼 수 있습니다.


6
친애하는 주님. 지구상에서 누가 ... 이건 너무 많은 수준의 잘못입니다 (YouTube가 아닙니다). 어쨌든, 당신은 용기가 이것을 심연에 깊이 넣을 수있는 나의 공감대를 가지고 있습니다.
wvxvw
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.