如何在 Windows 10 上的 Ubuntu WSL 上配置带有身份验证的 HTTP 代理?

如何在 Windows 10 上的 Ubuntu WSL 上配置带有身份验证的 HTTP 代理?

我在 Windows 10 上使用 Ubuntu WSL。如何配置带有身份验证的 HTTP 代理?

答案1

用于 NTLM 身份验证的 cntlm 代理

我假设你的代理需要基于 NTLM 的用户身份验证,这将无法与 中指定的凭据一起使用$HTTP_PROXY。为此需要一个支持 NTLM 的代理:例如控制论

安装cntlm代理

默认安装代理的方法是使用sudo apt-get install cntlm,但如果没有任何代理,这显然会失败。您需要手动下载包cntlm_0.92.3-1ubuntu2_amd64.deb并将其复制到您的 WSL 实例中。

使用以下命令安装该软件包

$ sudo dpkg -i cntlm_0.92.3-1ubuntu2_amd64.deb

配置 cntlm 代理

代理cntlm需要在以下位置进行正确的 NTLM-Proxy 配置/etc/cntlm.conf

# /etc/cntlm.con
Domain      Domain
Username    username
Proxy       1.2.3.4:5678
NoProxy     localhost, 127.0.0.*, 10.*, 192.168.*
Listen      3128

这是所需的最低配置。使用以下命令cntlm进行测试和验证:cntlm

$ cntlm -M http://www.google.com
cntlm: Starting cntlm version 0.92.3 for LITTLE endian

cntlm: Proxy listening on 127.0.0.1:3128

cntlm: Workstation name used: hostname

Password:

如果身份验证成功,则使用开关生成身份验证的哈希值-H

$ cntlm -H                   
cntlm: Starting cntlm version 0.92.3 for LITTLE endian

cntlm: Proxy listening on 127.0.0.1:3128

cntlm: Workstation name used: somehost

cntlm: Using following NTLM hashes: NTLMv2(1) NT(0) LM(0)

Password: 
PassLM          123456789ABCDEF123456789ABCDEF12
PassNT          123456789ABCDEF123456789ABCDEF12
PassNTLMv2      123456789ABCDEF123456789ABCDEF12    # Only for user 'username', domain 'Domain'
cntlm: Terminating with 0 active threads

将三个哈希值和添加PassLMPassNT配置PassNTLMv2文件中cntlm/etc/cntlm.conf然后通过以下方式激活代理systemd

$ sudo systemctl restart cntlm

现在代理应该在本地主机的端口上监听3128

配置代理

现在您可以按照本文所述配置代理邮政但使用:

$ export http_proxy=http://localhost:3128/
$ export https_proxy=http://localhost:3128/

答案2

从你的 bash shell:

export http_proxy=http://[username]:[password]@[proxy-webaddress]:[port]

并且可能

export https_proxy=https://[username]:[password]@[proxy-webaddress]:[port]

用户名和密码通常是 Windows 域凭据。如果密码包含任何特殊字符,您可能需要使用反斜杠转义这些特殊字符,以保护它们免受 shell 攻击。例如,如果您的 Windows 帐户是“gomer”,密码是“Pea$1rzz”,并且您的代理服务器是端口 8080 上的 bluecoat.acme.com,那么您会说

export http_proxy=http://gomer:Pea\[email protected]:8080
export https_proxy=https://gomer:Pea\[email protected]:8080

echo $http_proxy
echo $https_proxy 

应该会显示正确的凭据。您需要为每个 shell 执行此操作。因此,如果您想使用 apt 进行一些工作,打开 root shell 可能会更方便

sudo bash

在设置代理之前。

相关内容