Powershell, svn и аутентификация

Я могу использовать удаленный рабочий стол на данном компьютере и запускать svn без предоставления информации об аутентификации, и он работает; моя аутентификация AD позволяет мне получить доступ к репозиторию, который я хочу.

Я могу использовать Powershell для подключения к машине и выполнения команд svn. Однако, когда я это делаю, я получаю "доступ запрещен". [Environment]::UserName появляется с именем пользователя, которое я ожидал (мое имя пользователя AD) при запуске из script, который удаленно выполняется.

Что мне не хватает, чтобы сделать эту работу?

Некоторые коды:

$Session = New-PSSession -ComputerName $computerName;

if (-Not ($Session)) {
    Write-Host "Did not create session!";
    Return;
}

Invoke-Command -Session $Session -FilePath 'switchAllRepositories.ps1' -ArgumentList $branchName;

Remove-PSSession $Session;

и в switchAllRepositories у меня есть параметр:

Param(
  [string]$branchURL
)

серия вызовов типа:

If(Test-Path "C:\webfiles\repositoryname") {
    Write-Host "Switching repositoryname"
    SwitchRepo "repositoryname" ($branchURL) "C:\webfiles\repositoryname";
}

которые вызывают:

Function SwitchRepo ($repoName, $branchPath, $workingCopy)
{
    $to = ("https://[url]/svn/" + $repoName + $branchPath);
    Write-Host "to $to";

    #debug
    $user = [Environment]::UserName
    Write-Host "as $user";

    $exe = "C:\Program Files\TortoiseSVN\bin\svn.exe";
    &$exe switch "$to" "$WorkingCopy" --username [redacted] --password [redacted] --no-auth-cache --non-interactive --trust-server-cert

    if ($process.ExitCode -ne 0) {
        #$wshell = New-Object -ComObject Wscript.Shell
        #$wshell.Popup("Error switching " + $repoName,0,"Done",0x1)
        Write-Host "Error detected!"
    }
}

Точная ошибка:

svn: E175013: невозможно подключиться к репозиторию по URL-адресу '[Пропущено]     + CategoryInfo: NotSpecified: (svn: E175013: U... упрощает /20150620 ': String) [], RemoteException     + FullyQualifiedErrorId: NativeCommandError svn: E175013: доступ к '[snipped]' запрещен

Ответ 1

Это поможет увидеть код, который вы используете, но если это то, что я подозреваю, тогда вы используете удаленный PowerShell с помощью Enter-PSSession или Invoke-Command.

Так как по умолчанию будет использоваться аутентификация Kerberos, а сервер SVN, вероятно, находится на третьей машине, вы, вероятно, столкнетесь с проблемой проверки подлинности с двумя повторами кебероса.

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

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

Так, например, вы можете явно указать учетные данные для команд SVN.

Или вы можете создать свою собственную конечную точку на сервере, который использует пользователя RunAs. Затем все команды будут выполняться от Machine B в качестве конкретного пользователя: