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

Gau*_*wal 9 networking proxy windows-subsystem-for-linux

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

Sim*_*ler 8

用于 NTLM 身份验证的 cntlm 代理

我假设您的代理需要基于NTLM 的用户身份验证,这不适用于$HTTP_PROXY. 这需要一个支持 NTLM 的代理:例如cntlm

安装cntlm代理

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

安装包

$ sudo dpkg -i cntlm_0.92.3-1ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

配置cntlm代理

cntlm代理需要适当NTLM代理配置/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
Run Code Online (Sandbox Code Playgroud)

这是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:
Run Code Online (Sandbox Code Playgroud)

如果身份验证成功,请使用-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
Run Code Online (Sandbox Code Playgroud)

添加三个散列PassLMPassNTPassNTLMv2cntlm配置文件/etc/cntlm.conf。然后通过systemd以下方式激活代理:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

配置代理

现在,当这个描述可以配置代理服务器,但使用:

$ sudo systemctl restart cntlm
Run Code Online (Sandbox Code Playgroud)

  • 我在 WSL 上使用 Ubuntu。在执行 `cntlm -M https://www.google.com` 命令之前,您可能需要先执行 `sudo chmod 644 /etc/cntlm.conf`。并使用 `sudo service cntlm start` 来运行 cntlm 服务。 (2认同)

小智 -1

从你的 bash shell 中:

export http_proxy=http://[username]:[password]@[proxy-webaddress]:[port]
Run Code Online (Sandbox Code Playgroud)

并且可能

export https_proxy=https://[username]:[password]@[proxy-webaddress]:[port]
Run Code Online (Sandbox Code Playgroud)

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

export http_proxy=http://gomer:Pea\$1rzz@bluecoat.acme.com:8080
export https_proxy=https://gomer:Pea\$1rzz@bluecoat.acme.com:8080

echo $http_proxy
echo $https_proxy 
Run Code Online (Sandbox Code Playgroud)

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

sudo bash
Run Code Online (Sandbox Code Playgroud)

在设置代理之前。