Доступ к защищенному паролем сетевому ресурсу (ограничение двойного / второго прыжка) - PullRequest
0 голосов
/ 08 января 2019

Речь идет о знаменитом ограничении двойного прыжка, которое выглядит тривиальным и имеет как минимум 10 обходных путей, но я не могу найти даже такое, которое подходит для моей настройки.

Вот мое окружение: у меня ~ 50 виртуальных машин в Windows 10, каждая виртуальная машина работает на отдельном оборудовании - мы используем виртуальные машины, потому что наши ИТ-специалисты утверждают, что их проще поддерживать, а физические, мне лично не нравятся виртуальные машины, но это не так то, что зависит от меня. Мы находимся в не доменной среде, Active Directory нет, мы используем рабочую группу, и каждый компьютер администрируется индивидуально.

Моя цель - оптимизировать управление ПК, например, установку программного обеспечения, регистрацию / запуск служб и т. Д. Мне нужно сделать это на всех компьютерах одновременно, чтобы не выполнять каждую задачу 50 раз. Мне удалось относительно быстро запустить PowerShell Remote, но очень скоро я застрял на невозможности доступа к любому сетевому ресурсу, требующему дополнительной аутентификации (все наши сетевые ресурсы требуют аутентификации LDAP).

То, что я пробовал до сих пор.

  1. Повторная аутентификация из сеанса, описанного здесь :

    $mappedDrive = @{
        Name = "u"
        PSProvider = "FileSystem"
        Root = "\\bladefs\share2"
        Credential = 'svetlozar.draganov'
    }
    Invoke-Command -ComputerName bw33 -ScriptBlock {
        New-PSDrive @using:mappedDrive
        Get-Content -Path \\bladefs\share2\text.txt
        Get-PSDrive
        Remove-PSDrive -Name "u"
        Get-PSDrive
    } -Credential render
    

    То, что делает вышеупомянутая команда, - это запуск удаленной команды через Invoke-Command, которая запрашивает две аутентификации, первая аутентификация - это подключение к машине bw33, затем с помощью команды New-PSDrive другая аутентификация отправляется в уже установленную сессию с bw33 для монтирования общего сетевого ресурса с именем пользователя и паролем. Это иногда в очень редких случаях действительно работает, но я не могу точно определить, когда и почему это работает и почему в большинстве случаев не работает. Несмотря на то, что я выполняю абсолютно один и тот же сценарий PowerShell десятки раз, он работает только для очень небольшого процента из них, для остальных он просто говорит следующее:

    A specified logon session does not exist. It may already have been
    terminated
        + CategoryInfo          : InvalidOperation: (u:PSDriveInfo) [New-PSDrive], Win32Exception
        + FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand
        + PSComputerName        : bw33
    Cannot find path '\\bladefs\share2\text.txt' because it does not exist.
        + CategoryInfo          : ObjectNotFound: (\\bladefs\share2\text.txt:String) [Get-Content], ItemNotFoundException
        + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
        + PSComputerName        : bw33
    

    Я на самом деле запечатлел работающую и нерабочую попытку на видео ниже: https://drive.google.com/uc?id=1HYD8p-VkLYyIExZVWO_8qgpI2kmlUDgF

    Как вы можете видеть при первом выполнении, все в порядке. PSDrive успешно сопоставлен, и я могу достичь сетевого пути \ bladefs \ share2, но при втором выполнении я получил некоторые ошибки.

  2. Аналогично приведенному выше, но вместо сопоставления диска с помощью команды PSDrive сопоставление его с помощью команды NET USE с именем пользователя и паролем.

    Invoke-Command -ComputerName bw33 -Credential render -ScriptBlock {
        net use x: \\bladefs\share2 /user:svetlozar.draganov password
        Test-Path \\bladefs\share2
    }
    

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

    System error 1312 has occurred.
        + CategoryInfo          : NotSpecified: (System error 1312 has occurred.:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
        + PSComputerName        : bw33
    A specified logon session does not exist. It may already have been terminated.
    

    Вот видео еще одной попытки, которая снова фиксирует выполнение и нерабочее выполнение этой команды: https://drive.google.com/uc?id=1wP20sbmXMfWu4dvjsdF8REDWgNxiKAS-

  3. Использование CredSSP, описанного здесь :

    $session = New-PSSession -cn bw33 -Credential render -Authentication Credssp
    Invoke-Command -Session $session -ScriptBlock {Test-Path \\bladefs\share2}
    

    Хотя это самый популярный и небезопасный способ решения этой проблемы, я решил попробовать, потому что рекомендуемые опции не работают. К сожалению, я тоже попал в тупик с этим подходом, вот ошибки:

    New-PSSession : [bw33] Connecting to remote server bw33 failed with
    the following error message : The request is not  supported. For more
    information, see the about_Remote_Troubleshooting Help topic.
    At line:1 char:12
    + $session = New-PSSession -cn bw33 -Credential render -Authentication  ...
    +            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException
       + FullyQualifiedErrorId : 50,PSSessionOpenFailed
    Invoke-Command : Cannot validate argument on parameter 'Session'. The
    argument is null or empty. Provide an argument that is  not null or empty,
    and then try the command again.
    At line:2 char:25
    + Invoke-Command -Session $session -ScriptBlock {Test-Path \\bladefs\sh ...
    +                         ~~~~~~~~
       + CategoryInfo          : InvalidData: (:) [Invoke-Command], ParameterBindingValidationException
       + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand
    

    и соответственно видео: https://drive.google.com/uc?id=10tbAq6vvRsvT-1SGqOzvPgIPcM-MT8CJ

1 Ответ

0 голосов
/ 09 января 2019

Некоторое время назад у меня была проблема, похожая на вашу, но у меня есть настройка присоединения к домену. Это не должно иметь большого значения, если у вас есть полномочия. В вашем примере вы, кажется, не используете реальный объект PSCredential, который может быть вашей проблемой. Если вы можете использовать те же учетные данные для подключения к удаленной системе, а затем вернуться к своей общей папке, то это должно работать:

$Password = Read-Host -Prompt 'Enter Password' -AsSecureString
$Credential = New-Object -TypeName PSCredential('username',$Password)
$mappedDrive = @{
  Name = "u"
  PSProvider = "FileSystem"
  Root = "\\bladefs\share2"
  Credential = $Credential
}
Invoke-Command -ComputerName bw33 -Credential $Credential -ScriptBlock {
  New-PSDrive @Using:mappedDrive
  # Do Stuff...
  Remove-PSDrive -Name "u"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...