web-dev-qa-db-ja.com

NTLMで保護されたサイトに対してwgetを使用する

ローカルイントラネットサイトをミラーリングしようとして、「wget」を使用して以前の質問を見つけました。匿名のサイトではうまく機能しますが、ユーザー名\パスワードを期待しているサイト(統合Windows認証を使用したIIS)に対しては使用できませんでした。

これが私が渡すものです:

wget -c --http-user = 'domain\user' --http-password = pwd http:// local/site -dv

これがデバッグ出力です(明らかにダミー値に置き換えたことに注意してください):

-verbose(verbose)を1に設定
 Windows上のWget1.11.4によって作成されたDEBUG出力-MSVC。
 
-2009-07-1409 :39:04-- http:// local/site 
ホスト `local 'は一般的な基本的なチャレンジを発行していません。
ローカルの解決...秒0.00、xxxx 
キャッシングローカル=> xxxx 
ローカルに接続中| xxxx |:80 ...秒0.00、接続済み。
ソケット1896を作成しました。
 0x003e32b0を解放しています(新しい参照カウント1)。 。] [。 * 
ホスト:ローカル
接続:Keep-Alive 
 
 ---リクエスト終了--- 
 HTTPリクエストが送信され、レスポンスを待機しています。 。
 ---応答開始--- 
 HTTP/1.1401アクセス拒否
サーバー:Microsoft-IIS/5.1 
日付:2009年7月14日火曜日13 :39:04 GMT 
 WWW-認証:ネゴシエート
 WWW-認証:NTLM 
コンテンツの長さ:4431 
コンテンツタイプ:text/html 
 
 ---応答終了--- 
 401アクセスデンied 
 Closed fd 1896 
不明な認証スキーム。
認証に失敗しました。
 
18
Joey V.

NTLM認証はwget1.11で壊れており、代わりに1.10を使用してください。

9
billg

Curlは、実際には、NTLM認証されたWebサーバーからコンテンツをフェッチするためのより優れたツールです。以下を使用して、提案されたwgetコマンドラインと同等の関数を取得できます。

curl --anyauth --user username:password http://someserver/site
8
user3182674

NTLM Authorization Proxy Server を使用してこれらのタイプの問題を回避できることへの言及を見てきました。

2
Sanjay Sheth

私は解決策を見つけました。
これは基本認証IIS7の回避策です。

認証が成功すると、次のhttpヘッダーを送信します。

'Authorization: < type > < credentials >'.

したがって、ブラウザーで認証を行い、ブラウザーからこのヘッダーパラメーターをコピーするか(firebugアドオン)、以下を生成することができます。

$ echo -en 'username:password' | base64
dXNlcm5hbWU6cGFzc3dvcmQK
$ echo 'dXNlcm5hbWU6cGFzc3dvcmQK' | base64 -d
username:password

例:

$ wget --header="Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQK" http://example.com/
1
Valeriy

使用する --auth-no-challengeオプション(wget 1.11 +)(現在は安全でないと見なされています)

0
heli