我使用nc
创建了一个简单的代理服务器,这里是一行代码:
mkfifo queueueue
nc -l 8080 <queueueue | nc http://$JENKINS_HOSTNAME 80 >queueueue
它侦听端口8080,然后将数据转发到与Jenkins服务器的连接。 Jenkins是VPN的后面,我运行此代理的机器具有VPN访问权限。
在我的另一台机器上(没有VPN访问),我想curl
Jenkins服务器,这是通过代理发起请求的命令:
http_proxy=10.1.10.10:8080 curl --user $JENKINS_USERNAME:$JENKINS_PASSWORD http://$JENKINS_HOSTNAME/api/json
客户端和代理机器都在同一个网络上,我可以在它们之间ping和ssh,而且,我知道客户端正在连接到代理服务器,我认为当客户端尝试连接时出现故障验证,这是我尝试卷曲时的输出:
$ http_proxy=10.1.10.10:8080 curl --user $JENKINS_USERNAME:$JENKINS_PASSWORD http://$JENKINS_HOSTNAME/api/json
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="<some other url>">here</a>.</p>
<hr>
<address>Apache Server at $JENKINS_HOSTNAME Port 80</address>
</body></html>
如何通过HTTP基本身份验证来完成这样的代理?
答案 0 :(得分:1)
我会使用ssh而不是netcat。
只是为了避免混淆,我将把具有VPN访问权限的节点称为“服务器”,将没有VPN访问权限的节点称为“客户端”。
在服务器端,您只需安装并运行ssh服务器(在我的测试中,我有OpenSSH_5.9p1,OpenSSL 0.9.8r 2011年2月8日)。
在客户端,您需要执行以下操作:
1)在/ etc / hosts文件中添加目标URL在服务器上解析的地址。我无法通过代理运行DNS查找,这就是为什么这是必要的。
2)在服务器和客户端之间设置ssh密钥。虽然这不是必要的,但它会让生活更轻松。
3)运行以下ssh命令让ssh充当SOCKS代理:
user@host$ ssh -vND 9999 <server>
-v在那里你可以看到ssh发生了什么, -N告诉ssh不执行远程命令 - 这对于简单的端口转发很有用 -D此选项实际上是将您的本地请求转发给服务器
4)现在你应该可以运行上面的curl命令了,但是加入
---socks5 localhost:9999
您的完整命令将如下所示:
curl --user $USER:$PASSWORD --socks5 localhost:9999 http://$JENKINS/api/json
如果我能弄清楚如何通过ssh从curl转发DNS请求,我将更新故障单。
编辑:格式化,可怕的语法。