我在 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
将三个哈希值和添加PassLM
到PassNT
配置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
在设置代理之前。