我們有一個負載均衡的環境,Jenkins會自動部署提交。由於我們使用SignalR來工作,我們必須在服務器場中的所有服務器中擁有相同的機器密鑰。我們可以通過手動進入IIS管理器並生成將包含在web.config文件中的密鑰來完成。但由於我們正在使用Jenkins進行自動部署,我們需要這也是自動的。我試圖通過命令行找到一種方法,但找不到任何資源。有沒有一種方法可以生成機器密鑰並將其添加到web.config中,以便所有進程都將自動進行?IIS通過命令行爲Jenkins生成機器密鑰
1
A
回答
1
您可以使用powershell通過命令行生成機器密鑰。微軟提供這些代碼,並可以在這裏(https://support.microsoft.com/en-ca/help/2915218/resolving-view-state-message-authentication-code-mac-errors#bookmark-appendixa)找到
function Generate-MachineKey {
[CmdletBinding()]
param (
[ValidateSet("AES", "DES", "3DES")]
[string]$decryptionAlgorithm = 'AES',
[ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
[string]$validationAlgorithm = 'HMACSHA256'
)
process {
function BinaryToHex {
[CmdLetBinding()]
param($bytes)
process {
$builder = new-object System.Text.StringBuilder
foreach ($b in $bytes) {
$builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
}
$builder
}
}
switch ($decryptionAlgorithm) {
"AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
"DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
"3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
}
$decryptionObject.GenerateKey()
$decryptionKey = BinaryToHex($decryptionObject.Key)
$decryptionObject.Dispose()
switch ($validationAlgorithm) {
"MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
"SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
"HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
"HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
"HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
}
$validationKey = BinaryToHex($validationObject.Key)
$validationObject.Dispose()
[string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
"<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
$decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
$validationAlgorithm.ToUpperInvariant(), $validationKey)
}
}
這將返回機器密鑰爲字符串。然後你可以通過PowerShell將它應用到web.config文件中。下面的代碼要麼添加或更換
function ApplyMachineKeyToWebConfigs($machineKey)
{
$webConfig = (Get-Content $webConfigPath) -as [Xml]
if($webConfig.configuration["system.web"].machineKey)
{
$webConfig.configuration["system.web"].ReplaceChild($webConfig.ImportNode($machineKey.machineKey, $true), $webConfig.configuration["system.web"].machineKey)
}
else
{
$webConfig.configuration["system.web"].AppendChild($webConfig.ImportNode($machineKey.machineKey, $true))
}
$webConfig.save($webConfigPath)
}
哪裏$webConfigPath
是路徑服務器上的Web配置文件。 您需要在服務器上生成機器密鑰,以便我們可以通過jenkins上的CI遠程運行這些密鑰。如果您創建一個PowerShell腳本結合的功能(稱爲GenerateMachineKey.ps1
):在web.config路徑傳遞
[xml]$machineKey = Generate-MachineKey
ApplyMachineKeyToWebConfigs $machineKey
你再像這樣運行:
Invoke-Command -ComputerName <ipAddress or computer name> -FilePath GenerateMachineKey.ps1 -ArgumentList c:\DeployedApps\YourWebsite\Web.config -credential $Credentials
您需要設置憑據來調用可以用下面的命令來實現命令:
$Username = 'admin'
$Password = 'password'
$SecurePass = ConvertTo-SecureString -AsPlainText $Password -Force
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $SecurePass
現在可以完全自動通過詹金斯或使用這些鮑威任何其他CI平臺設置你的IIS機器密鑰rshell腳本
相關問題
- 1. 通過Jenkins運行命令?
- 2. 使用KeyTool命令生成密鑰庫
- 3. 通過命令行將密鑰庫密碼傳遞給Cordova Android
- 4. 通過命令行只(生成文件)
- 5. 通過命令行只(生成文件)
- 6. 隨機密鑰生成
- 7. 密鑰工具證書生成appeats在命令行中掛
- 8. 使用電源生成機器密鑰殼牌 - 無法識別的命令
- 9. 通過命令指定電子郵件地址在Windows上生成SSH密鑰
- 10. 對稱加密密鑰通過行爲
- 11. 如何通過命令行參數導入RSA密鑰?
- 12. 通過EMAIL在Jenkins觸發器生成
- 13. AS3 Php密鑰生成器
- 14. C RSA密鑰生成器
- 15. Rails無法通過Windows中的命令行查找生成器
- 16. 使用隨機生成的密鑰進行加密和解密?
- 17. 爲ConfigurationProperty密鑰生成ID?
- 18. 密鑰生成
- 19. 生成密鑰
- 20. opencover報告生成器通過命令提示符運行,但不通過ccnet.config
- 21. 生成命令行
- 22. 如何藉助密鑰生成令牌?
- 23. 通過rsh命令密碼?
- 24. 如何從Windows命令提示符生成公鑰密碼
- 25. 如何從node.js生成ssh命令時傳遞密鑰文件?
- 26. KeyPairGenerator沒有生成隨機密鑰
- 27. iOS生成RSA非隨機密鑰對?
- 28. Ruby OpenSSL AES生成隨機密鑰
- 29. 通過命令行從運行unittest.TestCase生成單個測試
- 30. 通過密鑰