0

を使用して単純なプロキシ サーバーを作成しましたnc。ここにワンライナーを示します。

mkfifo queueueue
nc -l 8080 <queueueue | nc http://$JENKINS_HOSTNAME 80 >queueueue

ポート 8080 でリッスンし、Jenkins サーバーへの接続にデータを転送します。Jenkins は VPN の背後にあり、このプロキシを実行しているマシンには VPN アクセスがあります。

curl他のマシン (VPN アクセスなし) で、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 基本認証を使用して、このようなプロキシを介してカールするにはどうすればよいですか?

4

1 に答える 1

1

これには、netcat の代わりに ssh を使用します。

混乱を避けるために、VPN アクセスのあるノードを「サーバー」と呼び、VPN アクセスのないノードを「クライアント」と呼びます。

サーバー側では、ssh サーバーをインストールして実行するだけで済みます (私のテストでは、OpenSSH_5.9p1、OpenSSL 0.9.8r 2011 年 2 月 8 日)。

クライアント側では、次のことを行う必要があります。

1) /etc/hosts ファイルに、ターゲット URL がサーバー上で解決するアドレスを追加します。プロキシ経由で DNS ルックアップを実行するために curl を取得できませんでした。これが必要な理由です。

2) サーバーとクライアント間の ssh キーをセットアップします。これは必須ではありませんが、作業が楽になります。

3) 次の ssh コマンドを実行して、ssh を SOCKS プロキシとして機能させます。

user@host$ ssh -vND 9999 <server>

-v はそこにあるので、sshで何が起こっているかを見ることができます. -N は、sshにリモートコマンドを実行しないように指示します.

4)これで、上記のcurlコマンドを実行できるはずですが、追加します

---socks5 localhost:9999

完全なコマンドは次のようになります。

curl --user $USER:$PASSWORD --socks5 localhost:9999 http://$JENKINS/api/json

curl から ssh を介して DNS リクエストを転送する方法がわかれば、チケットを更新します。

編集:フォーマット、ひどい文法。

于 2013-05-13T23:06:25.270 に答える