2015-06-11 3 views
11

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

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

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

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

$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 СВН: E175013: Доступ к '[пропущено] запрещено

+1

В зависимости от способа подключения. –

+0

@ MathiasR.Jessen Что вам нужно знать? Я создаю удаленный сеанс и вызывая скрипт, используя сеанс. – Yamikuronue

+0

Показать часть 'switchAllRepositories.ps1', где он принимает параметры (когда вы вызываете его с помощью 'Invoke-Command', вы отправляете имя ветки в качестве аргумента), это должен быть блок-параграф справа вверху ps1, я думаю. – briantist

ответ

4

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

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

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

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

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

Или вы можете создать свою собственную конечную точку на сервере, использующем пользователя RunAs. Тогда все команды будут от машины В качестве конкретного пользователя:

+0

Это похоже на то, что мне не хватает :) Но почему тогда, когда я пробовал жестко кодировать имя пользователя и пароль в свой скрипт, это тоже не сработало? Вероятно, что-то о SVN, пытаясь предпочесть кеберосы над предоставленными учетными данными или некоторыми такими. – Yamikuronue

+0

Не могли бы вы изменить свой вопрос, чтобы включить код? – briantist

+0

Не знаете, какие строки вы хотите, но я редактировал некоторые коды. – Yamikuronue

Смежные вопросы