Azure 云服务角色上的启动任务不是 运行
Startup Task not running on Azure Cloud Service role
我在尝试以 Azure 角色设置启动任务时遇到困难。
最终目标是禁用 RC4 密码以及其他 SSL 配置。在我的 (VS2012Express) 项目中(解决方案在 SO 中的另一个答案后部分实现,导致我 https://gist.github.com/sidshetye/29d6d48dfa0c2f5488a4 )我创建了一个 Startup.cmd 文件,如下所示:
# Execute powershell command to disable RC4 and imporve SSL security settings
ECHO Batch started >> "StartupLog.txt" 2>&1
PowerShell -ExecutionPolicy Unrestricted .\HardenSSL.ps1 >> log- HardenSSL.txt 2>&1
EXIT /B 0
HardenSSL.ps1 是之前 link 的 PowerShell 脚本。 .cmd 和 .ps1 脚本都放在应用程序根目录中,标记为 "Content",属性设置为 "CopyLocal=Always".
在我的服务定义中,我这样写:
<Startup>
<Task commandLine="Startup.cmd" executionContext="elevated" taskType="background"></Task>
</Startup>
现在,当我将应用程序部署到 Azure 时,"nothing" 发生了。我将角色实例配置为允许远程桌面连接到机器。我验证了发布的脚本,没有日志文件,RC4 仍然启用。我尝试手动 运行 .cmd 和机器 运行s 脚本完成,禁用 RC4 并重新启动。所以脚本实际上是 "correct".
问题是启动时脚本没有启动。我可能是错的,但我没有看到任何相关的 Windows 事件。实际上,服务器现在保留了所有配置,但我必须确保脚本得到执行,以防我必须发布到新的 instances/cloud 服务。
我也试过:
1.将脚本放在子目录中
2. 创建其他 2 "simpler" .cmd,它只创建一个带有 "script started" 的日志文件,以排除与调用 PowerShell 脚本的 .cmd 相关的问题。
None 个脚本已执行。
希望我说得足够清楚,如有任何帮助,我们将不胜感激。
提前谢谢你,
阿尔贝托
更新 1
阅读各种讨论后,我错过了一件非常重要的事情:脚本文件实际上发布在 2 个不同的地方,一个在 /bin 文件夹中。
例如:我将我的脚本放在项目的 /StartupScripts 文件夹中,当我通过远程桌面连接到 Azure 服务器时,我在 "approot/StartupScripts" 和 "approot/bin/StartupScripts" 中找到了脚本。
实际执行的脚本是放在 "bin" 文件夹中的脚本。真正的问题是我在 .cmd 中可能有路径问题,因为我现在发现执行日志有错误。
现在我将尝试更改它并在 SO 上更新这里的问题。
好的。
最后确实是我的Startup.cmd文件中的路径有问题:.\HardenSSL.ps1 如果启动任务指向子文件夹,则无法找到。
解决方案是将 Startup.cmd 和 HardenSSL.ps1 文件放在应用程序根目录中,在调用 PowerShell 脚本时删除“.\”部分,一切正常。
无论如何,我想建议任何人选择我在堆栈交换中找到的其他解决方案:
https://security.stackexchange.com/a/79957
它 link 是一个 NuGet 包,它与我在原始 post 中的 link 到 github 上找到的脚本做同样的事情,只是 "better";主要是:
- 更好地配置密码套件,支持 SSLLabs 上所有参考浏览器的 ForwardSecrecy
- 在 windows XP 上保留对 Internet Explorer 8 的 SSL 支持(不幸的是,这对我们来说仍然是必需的)
阿尔贝托。
我在尝试以 Azure 角色设置启动任务时遇到困难。 最终目标是禁用 RC4 密码以及其他 SSL 配置。在我的 (VS2012Express) 项目中(解决方案在 SO 中的另一个答案后部分实现,导致我 https://gist.github.com/sidshetye/29d6d48dfa0c2f5488a4 )我创建了一个 Startup.cmd 文件,如下所示:
# Execute powershell command to disable RC4 and imporve SSL security settings
ECHO Batch started >> "StartupLog.txt" 2>&1
PowerShell -ExecutionPolicy Unrestricted .\HardenSSL.ps1 >> log- HardenSSL.txt 2>&1
EXIT /B 0
HardenSSL.ps1 是之前 link 的 PowerShell 脚本。 .cmd 和 .ps1 脚本都放在应用程序根目录中,标记为 "Content",属性设置为 "CopyLocal=Always".
在我的服务定义中,我这样写:
<Startup>
<Task commandLine="Startup.cmd" executionContext="elevated" taskType="background"></Task>
</Startup>
现在,当我将应用程序部署到 Azure 时,"nothing" 发生了。我将角色实例配置为允许远程桌面连接到机器。我验证了发布的脚本,没有日志文件,RC4 仍然启用。我尝试手动 运行 .cmd 和机器 运行s 脚本完成,禁用 RC4 并重新启动。所以脚本实际上是 "correct".
问题是启动时脚本没有启动。我可能是错的,但我没有看到任何相关的 Windows 事件。实际上,服务器现在保留了所有配置,但我必须确保脚本得到执行,以防我必须发布到新的 instances/cloud 服务。
我也试过: 1.将脚本放在子目录中 2. 创建其他 2 "simpler" .cmd,它只创建一个带有 "script started" 的日志文件,以排除与调用 PowerShell 脚本的 .cmd 相关的问题。 None 个脚本已执行。
希望我说得足够清楚,如有任何帮助,我们将不胜感激。
提前谢谢你,
阿尔贝托
更新 1
阅读各种讨论后,我错过了一件非常重要的事情:脚本文件实际上发布在 2 个不同的地方,一个在 /bin 文件夹中。
例如:我将我的脚本放在项目的 /StartupScripts 文件夹中,当我通过远程桌面连接到 Azure 服务器时,我在 "approot/StartupScripts" 和 "approot/bin/StartupScripts" 中找到了脚本。
实际执行的脚本是放在 "bin" 文件夹中的脚本。真正的问题是我在 .cmd 中可能有路径问题,因为我现在发现执行日志有错误。
现在我将尝试更改它并在 SO 上更新这里的问题。
好的。
最后确实是我的Startup.cmd文件中的路径有问题:.\HardenSSL.ps1 如果启动任务指向子文件夹,则无法找到。
解决方案是将 Startup.cmd 和 HardenSSL.ps1 文件放在应用程序根目录中,在调用 PowerShell 脚本时删除“.\”部分,一切正常。
无论如何,我想建议任何人选择我在堆栈交换中找到的其他解决方案: https://security.stackexchange.com/a/79957
它 link 是一个 NuGet 包,它与我在原始 post 中的 link 到 github 上找到的脚本做同样的事情,只是 "better";主要是:
- 更好地配置密码套件,支持 SSLLabs 上所有参考浏览器的 ForwardSecrecy
- 在 windows XP 上保留对 Internet Explorer 8 的 SSL 支持(不幸的是,这对我们来说仍然是必需的)
阿尔贝托。