Powershell、svn 和身份验证

标签 powershell svn powershell-remoting

我可以远程桌面进入给定的机器并运行 svn,而不提供身份验证信息,它可以工作;我的 AD 身份验证允许我访问我想要的存储库。

我也可以使用 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: Unable to connect to a repository at URL '[snipped]' + CategoryInfo : NotSpecified: (svn: E175013: U...eases/20150620':String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError svn: E175013: Access to '[snipped]' forbidden

最佳答案

查看您正在使用的代码会有所帮助,但如果这是我怀疑的,那么您正在使用带有 Enter-PSSession 的 PowerShell 远程处理。或 Invoke-Command .

由于这些将默认使用 kerberos 身份验证,并且 SVN 服务器可能位于第三台机器上,因此您可能会遇到 kerberos 双跳身份验证问题。

简而言之,您不能从机器 A 远程访问机器 B,然后在该 session 中尝试使用相同的身份验证上下文访问机器 C。

您可以通过以下几种方式解决此问题: CredSSP 经常在其中提出,但我发现它很复杂,通常重新考虑工作流程会更好。

例如,您可能能够显式指定 SVN 命令的凭据。

或者,您可以在使用 RunAs 用户的服务器上创建自己的端点。然后所有命令将来自机器 B 作为特定用户:

  • https://stackoverflow.com/a/30061125/3905079
  • https://stackoverflow.com/a/26077172/3905079
  • 关于Powershell、svn 和身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780627/

    相关文章:

    svn - Redmine 和 SVN : How to link a Revision to an Issue AFTER the commit has happened?

    svn - 忽略特定目录或文件而不使用 svn :ignore

    powershell - 无法通过Powershell连接到live @ edu

    c# - Exchange Online 管理 Powershell 模块和证书 Oauth

    powershell - Enter-PSSession不适用于端口5986

    .net - 使用 powershell 解析逗号分隔的文件

    powershell - 可以从 cmd 调用 headless,但不能从 powershell 调用 headless

    Powershell线程处理问题

    variables - 如何在 PowerShell 中测试变量是否超过八个字符?

    svn - 如何为svn external设置修订号?