Скрипт PowerShell для передачи SecureString в Plink в качестве паролей учетной записи и sudo - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь использовать Powershell (чтобы можно было замаскировать пароль) для запуска команды Plink на удаленной машине с Linux, чтобы дать топ-20 каталогов под / opt ...

Соединяется, парольправильно замаскирован, но без результатов Write-output показывает, что собранная командная строка верна ...

, но кажется, что она зависает и не возвращает результаты.может ли быть так, что результаты записи-вывода отличаются от того, что фактически отправляет plink?

Когда я копирую запись-вывод в командную строку cmd и запускаю ее напрямую, она работает (хорошо, что она все еще запрашивает пароль секундувремя из-за sudo, но оно работает и возвращает ожидаемые результаты ...

получение от него не требующего второго пароля для sudo определенно будет большой победой, но теперь мне просто нужно выяснить, почему это не таквозвращение результатов.

Заметьте, что при использовании нескольких аргументов мне было проще собираться таким образом;)

$UserName = Read-Host -Prompt "What is your username?"
$SecPassword = Read-host "what is your password?" -AsSecureString
$ServerName = Read-Host -Prompt "What is the server name?"
$Password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecPassword))
$Command = "C:\Tools\plink.exe"
$arg1  =  '-ssh'
$arg2 = $UserName+'@'+$ServerName
$arg3 = '-pw'
$arg4 = $SecPassword 
$arg5 = '-t'
$arg6 = 'echo' 
$arg7 =  '-e'
$arg8 = $SecPassword
$arg10 = ' | ' 
$arg11 = 'sudo du -aSh /opt/*'
$arg12 = ' | '
$arg13 = 'sort -rh'+' | '
$arg14 = 'head -n 20'
$CommandOut = "$Command $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8 $arg10 $arg11 $arg12 $arg13 $arg14"
Write-Output $CommandOut
& $Command $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8 $arg10 $arg11 $arg12 $arg13 $arg14

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Я решил, с помощью следующей ссылки на этом сайте.Я не расшифровывал пароль правильно, поэтому Плинк мог прочитать его ... (Спасибо, М Прикрил)

В моей первоначальной попытке соединение было установлено, но оно не было правильно аутентифицировано и не было очевидно ...сеанс только что завис. ..

PowerShell - Декодирование System.Security.SecureString в читаемый пароль

$password = ConvertTo-SecureString 'P@ssw0rd' -AsPlainText -Force

$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($password)
$result = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
$result 
0 голосов
/ 21 сентября 2018

c: \ Tools \ plink.exe -ssh john@192.168.2.100 -w System.Security.SecureString -t echo -e System.Security.SecureString |sudo du -ash / opt / * |сортировать -rh |head -n 20

Это не может сработать.

Плинк видит только System.Security.SecureString как буквенную строку .Поэтому Plink будет использовать «System.Security.SecureString» в качестве пароля.Не настоящий пароль.То, что вы делаете, на самом деле чепуха.Вы не можете использовать PowerShell для «маскирования пароля» .Это бессмысленно.Вы должны передать реальный пароль Plink.Невозможно «замаскировать» пароль (по крайней мере, если он указан в командной строке).

На самом деле это XY вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...