2015-06-11 16 views
11

Posso desktop remoto in un dato computer ed eseguire svn, senza fornire informazioni di autenticazione, e funziona; la mia autenticazione AD mi consente di accedere al repository che voglio.PowerShell, svn e autenticazione

Posso usare Powershell per connettermi alla macchina ed eseguire anche comandi svn. Tuttavia, quando lo faccio, ottengo "accesso vietato". [Environment]::UserName viene visualizzato con il nome utente che mi aspettavo (il mio nome utente AD) quando viene eseguito dallo script che viene eseguito da remoto.

Cosa mi manca per far funzionare questo?

Alcuni codice:

$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; 

e in switchAllRepositories, ho un parametro:

Param(
    [string]$branchURL 
) 

una serie di chiamate come:

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

che richiedono:

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!" 
    } 
} 

L'errore esatto è:

svn: E175013: Impossibile connettersi a un repository all'URL '[tagliato]' + CategoryInfo: NotSpecified: (SVN: E175013: U ... facilita/20150620' : String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError svn: E175013: l'accesso a '[snipped]' vietato

+1

dipende da come ci si connette. –

+0

@ MathiasR.Jessen Che cosa hai bisogno di sapere? Sto creando una sessione remota e invocando uno script utilizzando la sessione. – Yamikuronue

+0

Mostra la parte di 'switchAllRepositories.ps1' dove accetta i parametri (quando lo chiami con 'Invoke-Command' stai inviando un nome di ramo come argomento), dovrebbe essere un blocco param in cima alla ps1, penso. – briantist

risposta

4

sarebbe utile per vedere il codice che si sta utilizzando, ma se è quello che ho sospetto che tu stia utilizzando il servizio remoto di PowerShell con Enter-PSSession o Invoke-Command.

Dal momento che quelli per impostazione predefinita utilizzano l'autenticazione Kerberos e il server SVN è probabilmente su una terza macchina, è probabile che si verifichi il problema dell'autenticazione con doppio hop di kerberos.

In poche parole, non è possibile eseguire il comando remoto nella macchina B dalla macchina A, quindi dall'interno di quella sessione provare ad accedere alla macchina C utilizzando lo stesso contesto di autenticazione.

Potrebbe essere possibile risolvere il problema in alcuni modi: in questi casi è spesso presente CredSSP, ma trovo che sia complicato e in genere un ripensamento del flusso di lavoro risulta migliore.

Ad esempio, è possibile specificare esplicitamente le credenziali per i comandi SVN.

Oppure, è possibile creare il proprio endpoint sul server che utilizza un utente RunAs. Poi tutti i comandi saranno da macchina B come un utente specifico:

+0

Sembra proprio quello che mi manca :) Ma perché, quindi, quando ho provato a inserire il nome utente e la password nel mio script, non ha funzionato? Probabilmente qualcosa su SVN che prova a preferire il kerberos rispetto alle credenziali fornite o ad alcune di esse. – Yamikuronue

+0

Potresti modificare la tua domanda per includere il codice? – briantist

+0

Non sono sicuro di quali linee si desidera ma ho modificato in alcuni dei codici. – Yamikuronue