Iis

通過 jenkins 和服務帳戶進行 msdeploy:已連接但“無法授權”?

  • September 14, 2015

背景/目標

運動元件:

  • 我有一個服務帳戶,我們稱之為MyDomain\svcMyService
  • 我有一個遠端伺服器,我們稱之為MyDomain\MyServer
  • 我有一個 Jenkins 伺服器,我們稱之為MyDomain\MyJenkins.

在 Jenkins 中,我有一個部署任務。它抓取一些工件,然後呼叫msdeploy以將它們推送到 MyServer。

此部署步驟失敗,我想弄清楚原因。

我正在使用的 MSDeploy 命令

該命令由 Jenkins 自動生成,最終結果如下(省略敏感數據):

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:iisApp="E:\Jenkins\jobs\NotARealJobName\workspace" -dest:iisApp="MyWebSite/MyWebApp",ComputerName="https://MyServer:8172/MsDeploy.axd",UserName=MyDomain\svcMyService,Password="NotARealPassword" -allowUntrusted 

錯誤

我從 msdeploy 輸出看到的錯誤消息是:

錯誤程式碼:ERROR_USER_UNAUTHORIZED 更多資訊:使用 Web 管理服務連接到遠端電腦(“MyServer”),但無法授權。確保您使用正確的使用者名和密碼,您要連接的站點存在,並且憑據代表有權訪問該站點的使用者。了解更多資訊:http: //go.microsoft.com/fwlink/ ?LinkId=221672#ERROR_USER_UNAUTHORIZED 。

錯誤:遠端伺服器返回錯誤:(401)未經授權。

我對我必須做什麼的理解

這可能是一個不完整或不正確的列表。請告訴我這是否是問題所在。

我想我必須:

  • 在 IIS 上安裝 WebDeploy(在這種情況下是最新的 3.6)。

  • 在 IIS 中啟用管理服務。

  • 創建一個以MyDomain\svcMyService.

  • 是的,部署的同一個使用者名也在執行它。不是最好的,我知道。此刻不在我的手中。

  • 為我的 IIS Web 應用程序創建目錄。

  • 授予對此目錄的權限。

    • 完全權限svcMyService
    • 完全權限WDeployAdmin
    • 完全權限NetworkService(因為這就是 WMSvc 的執行方式)
  • 使用適當的埠創建網站

    • 網站應該在服務賬戶的應用程序池下執行
    • 該網站應使用該svcMyService帳戶連接到該文件夾。
  • 在網站下創建一個 Web 應用程序。

    • 該網站應使用該svcMyService帳戶連接到該文件夾。
    • svcMyService帳戶添加為站點和應用程序級別的部署管理器。
  • 確保本地WDeployConfigWriterWDeployAdmin帳戶未過期,並且其密碼無法更改。

  • 如果您更改了這些本地帳戶的密碼,請確保 IIS 管理委派正在使用帳戶並為每個委派更新這些憑據WDeployConfigWriterWDeployAdmin

到目前為止的故障排除

我會在嘗試排除故障時更新此列表。

檢查 WMSvc IIS 日誌 - 看起來我的使用者沒有發布權限

  • 日誌範例如下:

#Fields: 日期時間 s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status 時間- 拍攝於 2015-09-14 17:10:06

$$ Server IP $$頭 /MsDeploy.axd - 8172 -$$ Jenkins IP $$- - 401 2 5 15

我看到所有狀態都是 401.2,win32 程式碼為 5。

根據此故障排除連結,“如果使用者已通過身份驗證,但沒有發布所需的權限,則日誌條目將如下所示”(401 2 5)。

引用的文章

我在 2011 年的這個舊論壇文章上找到了答案——看起來真的很模糊。

在該論壇文章中找到的解決方案是:

  • 打開系統資料庫
  • 打開路徑HKEY_LOCAL_MACHINE\Software\Microsoft\WebManagement\Server
  • 添加一個名為的 DWORD WindowsAuthenticationEnabled,其值為1
  • 重新啟動 WMsvc 和 IIS

執行這些步驟後,它似乎第一次對我有用。

引用自:https://serverfault.com/questions/722230