Proxy-Konfiguration in Powershell

5

Ich versuche, chocolatey auf einem Windows hinter einem Proxy zu installieren:

@powershell -ExecutionPolicy unrestricted

In Power Shell führe ich

$wc=new-object net.webclient;
$wc.Proxy=new-object system.net.WebProxy('<myproxy-ip>:8012',$true);
$wc.Proxy.Credentials = new-object system.net.NetworkCredential('<myusername>','<mypass>');
iex ($wc.DownloadString('https://chocolatey.org/install.ps1'));

Ich erhalte den folgenden Fehler

Exception calling "DownloadString" with "1" argument(s): "The remote server returned an error: (407) Proxy Authentication Required."
At line:1 char:1
+ iex ($wc.DownloadString('https://chocolatey.org/install.ps1'));
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

Ich verwende denselben Benutzernamen / dasselbe Passwort, das ich beim Starten von Firefox / IEXPLORER eingeben muss (siehe Abbildung). Es sind keine Standardbenutzernamen / -kennwörter für den Proxy konfiguriert, da ich sie immer eingeben muss.

Bildbeschreibung hier eingeben


Weitere Details (Verwenden von Inspect Element in Firefox in einem privaten Fenster)

Antwort-Header

Cache-Control: no-cache
Connection: close
Content-Length: 813
Content-Type: text/html; charset=utf-8
Pragma: no-cache
Proxy-Authenticate: BASIC realm="PROXY_INTERNET"
Proxy-Connection: close
Set-Cookie: BCSI-CS-dfaeac52a135c7c0=2; Path=/
Raisercostin
quelle
.Net-Anmeldeinformationen stimmen nicht mit einem Namen und einem Kennwort überein, die Sie in einen browserbasierten Proxy-Authentifizierungsbildschirm eingeben würden. Vielleicht besser beschreiben Sie den Proxy und wie Sie Ihre UN / Passwort eingeben, wenn Sie FF oder IE verwenden.
ƬᴇcƬᴇιᴇ007
@ ƬᴇcƬᴇιᴇ007 Ich hoffe, das Bild hilft bei der Identifizierung des Proxy-Typs.
Raisercostin
Nein, das reicht nicht. Wir benötigen die HTTP-Antwortheader, in denen der Proxy nach Authentifizierung fragt.
Daniel B
Ich habe die Antwort-Header vom Browser hinzugefügt. Ich weiß nicht, wie ich die Antwortheader in Powershell "debuggen" oder erfassen kann. Hast du irgendwelche Vorschläge?
Raisercostin
Das obige Beispiel hat unter Windows 7 hinter einem NTLM-Proxy einwandfrei funktioniert :) Danke.
Tod Thomson

Antworten:

1

Siehe https://github.com/chocolatey/chocolatey/wiki/Proxy-Settings-for-Chocolatey

In Powershell definieren Sie die Funktion

function Create-Proxy($proxyHost,$proxyPort,$proxyUsername,$proxyPassword){
    #$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
    $proxyUrl = $proxyHost+":"+$proxyPort;
    Write-Host "proxy url [$proxyUrl]";
    $proxy = New-Object System.Net.WebProxy($proxyUrl, $true);
    $passwd = ConvertTo-SecureString $proxyPassword -AsPlainText -Force; ## Website credentials
    $proxy.Credentials = New-Object System.Management.Automation.PSCredential ($proxyUsername, $passwd);
    return $proxy;
}

nenn es so

$wc=new-object net.webclient;
$wc.UseDefaultCredentials = $true
$wc.Proxy = Create-Proxy "<proxy-host>" "<proxy-port>" "<proxy-username>" "<proxy-clear-pass>"
$wc.DownloadString('https://chocolatey.org/install.ps1');

Was ich entdeckte, war, dass der eigentliche Download funktionierte, aber die Ausführung des Installationsprogramms nicht, da es einen benutzerdefinierten Proxy verwendete.

Das iex ($wc.DownloadString("https://chocolatey.org/install.ps1"));scheitert also daran, dass die Proxy-Konfiguration im heruntergeladenen fehlerhaft istinstall.ps1

Raisercostin
quelle
0

Kann es nicht testen (ich habe keinen ähnlichen Proxy zur Verfügung), also habe ich eigentlich keine Ahnung, ob dies funktionieren wird, aber hier ist etwas, was Sie versuchen können:

$wc = new-object net.webclient;
$proxyUri = new-object system.uri("http://<myproxy-ip>:8012");
$wc.Proxy = new-object system.net.WebProxy($proxyUri, $true);
$cachedCredentials = new-object system.net.CredentialCache;
$netCredential = new-object system.net.NetworkCredential("<myusername>", "<mypass>");

$cachedCredentials.Add($proxyUri, "Basic", $netCredential);

$wc.Proxy.Credentials = $cachedCredentials.GetCredential($proxyUri, "Basic");

iex ($wc.DownloadString("https://chocolatey.org/install.ps1"));

Die Absicht ist, ein CredentialCache-Objekt zu verwenden, um die Berechtigungsnachweise in den Authentifizierungsmodus "Basic" zu zwingen.

ƬᴇcƬᴇιʜ007
quelle
-1

Sie können dies verwenden. Hat für mich gearbeitet. https://github.com/chocolatey/choco/wiki/Proxy-Settings-for-Chocolatey

Explizite Proxy-Einstellungen

Chocolatey hat explizite Proxy-Unterstützung ab 0.9.9.9.

Sie können einfach 1 oder 3 Einstellungen konfigurieren und Chocolatey verwendet einen Proxy-Server. Proxy ist erforderlich und ist der Standort und Port des Proxy-Servers. proxyUser und proxyPassword sind optional. Die Werte für Benutzer / Kennwort werden nur für Anmeldeinformationen verwendet, wenn beide vorhanden sind.

choco config set proxy <locationandport>
choco config set proxyUser <username>
choco config set proxyPassword <passwordThatGetsEncryptedInFile>

Beispiel

Führen Sie die folgenden Befehle in 0.9.9.9 aus:

choco config set proxy http://localhost:8888
choco config set proxyUser bob
choco config set proxyPassword 123Sup#rSecur3
Felix Aballi
quelle
2
In dieser Antwort wird erläutert, wie Chocolatey für die Verwendung eines Proxys konfiguriert wird. In der Frage wird gefragt, wie Chocolatey hinter einem Proxy installiert wird . Diese Antwort wird danach nützlich sein, aber es ist nicht das, was die Frage gestellt hat.
Anaximander