虽然官方文档中提供了较为详细的PowerShell代码块配置SSM Agent使用代理, 不过需要手工进行设置代理的hostname
和port
, 对于已经在Windows Server系统中配置过代理的实例, 我们可以直接通过PowerShell获取当前的系统代理配置, 然后传给SSM Agent对应的注册表键完成设置.
获取Windows系统代理配置
以Windows Server 2022为例, 打开Windows设置(Windows Settings)
- 网络和Internet(Network & Internet)
- 代理(Proxy)
, 检查"手动设置代理(Manual proxy setup)"下方配置的Address
和Port
通过下面的PowerShell可以获取到这个配置信息
Get-ItemProperty -Path "Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | select -expand ProxyServer
输出结果:
127.0.0.1:10809
配置SSM Agent使用代理
有了上面命令获取到的系统代理设置, 我们就可以将它带入官方文档的代码块中进行替换, 实现一步到位修改SSM Agent使用和Windows系统相同的代理设置. 完整的PowerShell代码:
# 获取当前Windows系统的代理配置, 存入变量$sys_proxy
$sys_proxy = Get-ItemProperty -Path "Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | select -expand ProxyServer
# SSM Agent相关注册表位置
$serviceKey = "HKLM:\SYSTEM\CurrentControlSet\Services\AmazonSSMAgent"
# 获取注册表键值
$keyInfo = (Get-Item -Path $serviceKey).GetValue("Environment")
# 使用$sys_proxy来声明参数序列变量
$proxyVariables = @("http_proxy=$sys_proxy", "https_proxy=$sys_proxy", "no_proxy=169.254.169.254")
If($keyInfo -eq $null)
{
# 如果注册表中不存在对应的键, 则创建新的
New-ItemProperty -Path $serviceKey -Name Environment -Value $proxyVariables -PropertyType MultiString -Force
} else {
# 如果注册表中已有对应的键, 直接修改
Set-ItemProperty -Path $serviceKey -Name Environment -Value $proxyVariables
}
# 重启AmazonSSMAgent服务
Restart-Service AmazonSSMAgent
清除SSM Agent代理设置
Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\AmazonSSMAgent -Name Environment
Restart-Service AmazonSSMAgent