Elasticsearch [6.8] 使用 PowerShell 创建快照的 REST 无法对用户进行身份验证

Elasticsearch [6.8] REST with PowerShell create snapshot failed to authenticate user

我正在创建 PS 脚本来自动创建所选索引的快照。这是我的代码:

# Input variables
$elastic_host = "localhost:9200";
$repo_name = "daily_backup";
$username = "elastic";
$password = "elastic";
$indices = "kibana_sample_*,test";

# Create repo if not exists
$url_put_repo = "http://$elastic_host/_snapshot/$repo_name";
$body_put_repo = @{
  "type" = "fs";
  "settings" = @{
    "location" = "$($repo_name)_location";
    "compress" = $True;
    "chunk_size" = "100MB";
  }
} | ConvertTo-Json;
Write-Host (Invoke-ElasticSearch $url_put_repo $username $password $body_put_repo);

# Create snapshot
$time_stamp = Get-Date -Format "yyyyMMddHHmmss";
$url_put_snapshot = "http://$elastic_host/_snapshot/$repo_name/$($time_stamp)?wait_for_completion=true";
$body_put_snapshot = @{
  "indices" = $indices;
  "ignore_unavailable" = $True;
  "include_global_state" = $False;
} | ConvertTo-Json;
Write-Host (Invoke-ElasticSearch $url_put_snapshot $username $password, $body_put_snapshot);

function Invoke-ElasticSearch([string]$url, [string]$user, [string]$pass, [string]$body) {
 
  $credPair = "$($user):$($pass)";
  $encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair));
  $headers = @{ 
    "Authorization" = "Basic $encodedCredentials";
    "Content-Type" = "application/json";
  };
  $responseData = Invoke-WebRequest -Uri $url -Method Put -Headers $headers -Body $body -UseBasicParsing -Verbose;
   
  return $responseData;
}

问题是第一部分正在运行“如果不存在则创建回购”,第二部分“创建快照”失败:

Invoke-WebRequest : {"error":{"root_cause":[{"type":"security_exception","reason":"failed to authenticate user [elastic]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=
\"UTF-8\""}}],"type":"security_exception","reason":"failed to authenticate user [elastic]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

当我在没有主体的情况下调用 Invoke-ElasticSearch 时,它没有失败:

Invoke-ElasticSearch $url_put_snapshot $username $password, $body_put_snapshot

我在 Kibana Dev Tools 中尝试了这个 JSON,它正在运行 - 我不知道问题出在哪里。有什么想法吗?

当然是错字了...

之前:

Invoke-ElasticSearch $url_put_snapshot $username $password, $body_put_snapshot

之后:

Invoke-ElasticSearch $url_put_snapshot $username $password $body_put_snapshot