如何對設定 SSM Agent 以使用代理管理 Amazon EC2 執行個體時發生的問題進行疑難排解?

3 分的閱讀內容
0

當我使用代理搭配 SSM Agent 時,要透過 AWS Systems Manager 管理 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體卻收到錯誤。如何對代理問題進行疑難排解?

簡短描述

您可以使用 Systems Manager 來管理 Amazon EC2 執行個體。但是,如果執行個體位於 Proxy 後方,則必須將 SSM Agent 設定為透過代理與 Amazon 端點進行通訊。如果未正確設定 SSM Agent,您會收到類似以下的錯誤訊息:

Post https://ssm.RegionID.amazonaws.com/: proxyconnect tcp: dial tcp xxx.xxx.xxx.xxx:yyyy: i/o timeout

解決方法

若要對代理問題進行疑難排解,請遵循下列步驟:

驗證 EC2 執行個體能否存取代理伺服器

EC2 Windows 執行個體

您可以使用下列 Windows PowerShell 命令來驗證與代理的連線。在下列範例中,請將 hostname 取代為代理主機名稱,並將 port 取代為代理連接埠。

> Test-NetConnection hostname -port port

預期輸出:

ComputerName     : hostname
RemoteAddress    : xxx.xxx.xxx.xxx
RemotePort       : port
InterfaceAlias   : Ethernet
SourceAddress    : YYY.YYY.YYY.YYY
TcpTestSucceeded : True
PS C:\Windows\system32>

EC2 Linux 執行個體

您可以使用下列 telnet 或 netcat 命令來驗證與代理的連線。在下列範例中,請將 hostname 取代為代理主機名稱,並將 port 取代為代理連接埠。

Telnet

$ telnet hostname port

預期輸出:

Trying xxx.xxx.xxx.xxx...
Connected to hostname.
Escape character is '^]'.

Netcat

$ nc -vz hostname port'

預期輸出:

Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to xxx.xxx.xxx.xxx:YYYY.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

注意: Netcat 不會預先安裝在 Amazon EC2 執行個體上。若要手動安裝 Netcat,請參閱 Nmap 網站上的 Ncat

驗證 EC2 執行個體能否透過代理伺服器連線至 Systems Manager 端點

執行下列命令,確認您的執行個體可透過代理伺服器連線至 Systems Manager 端點。收到 http 錯誤代碼 4xx 表示您可透過代理伺服器連線至端點。

注意: 在下列命令範例中,請將 RegionID 取代為 AWS 區域,將 hostname 取代為代理主機名稱,並將 port 取代為代理連接埠。

EC2 Windows 執行個體

> (invoke-webrequest https://ssm.RegionID.amazonaws.com -DisableKeepAlive -UseBasicParsing -Method head -Proxy http://hostname:port )

預期輸出:

invoke-webrequest : The remote server returned an error: (404) Not Found.

EC2 Linux 執行個體

$  curl -k --proxy http://hostname:port -m 5 -s -o /dev/null -w "%{http_code}" https://ssm.RegionID.amazonaws.com

預期輸出:

404

驗證 SSM Agent 是否設定為使用代理資訊

EC2 Windows 執行個體

您必須檢閱 SSM Agent 日誌以驗證是否套用代理設定,如下列範例中所示。輸入下列命令:

> type C:\ProgramData\Amazon\SSM\Logs\amazon-ssm-agent.log | findstr -i "proxy"

預期輸出:

2021-03-18 19:06:16 INFO Getting IE proxy configuration for current user: The operation completed successfully.
2021-03-18 19:06:16 INFO Getting WinHTTP proxy default configuration: The operation completed successfully.
2021-03-18 19:06:16 INFO Proxy environment variables:
2021-03-18 19:06:16 INFO http_proxy: hostname:port
2021-03-18 19:06:16 INFO https_proxy:
2021-03-18 19:06:16 INFO no_proxy: 169.254.169.254

如需詳細資訊,請參閱設定 SSM Agent 以針對 Windows Server 執行個體使用代理

EC2 Linux 執行個體

首先,請執行下列命令,透過檢查程序環境變數來驗證 SSM Agent 目前是否使用必要的代理變數:

sudo cat /proc/$(pidof amazon-ssm-agent)/environ | xargs -0 -L1 -I{} echo {}

預期輸出:

[root@host123~]# sudo cat /proc/$(pidof amazon-ssm-agent)/environ | xargs -0 -L1 -I{} echo {}
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
http_proxy=http://Hostname:Port
https_proxy=http://Hostname:Port
no_proxy=169.254.169.254

然後,如果輸出不包含代理變數,請遵循以下針對您的執行個體類型的指引,驗證並更新相關檔案。

以 Ubuntu 14.04 等 upstart 為基礎的 EC2 Linux 執行個體

驗證 amazon-ssm-agent.override 檔案是否包含所需的組態。輸入下列命令,確認您的輸出符合範例預期輸出。如需詳細資訊,請參閱設定 SSM Agent 以使用代理 (upstart)

重要: 如果您更新 amazon-ssm-agent.override 檔案,請務必在編輯該檔案之後重新啟動 SSM Agent。

$ cat  /etc/init/amazon-ssm-agent.override

HTTP 代理伺服器的預期輸出:

env http_proxy=http://hostname:port
env https_proxy=http://hostname:port
env no_proxy=169.254.169.254

HTTPS 代理伺服器的預期輸出:

env http_proxy=http://hostname:port
env https_proxy=https://hostname:port
env no_proxy=169.254.169.254

以 Ubuntu 16.04 或更新版本為基礎且使用快照安裝 SSM Agent 的 EC2 Linux 執行個體

輸入下列命令,確認代理資訊符合範例預期輸出。如需詳細資訊,請參閱設定 SSM Agent 以使用代理 (systemd)

重要: 如果您更新 amazon-ssm-agent.override 檔案,請務必在編輯該檔案之後重新啟動 SSM Agent。

$ cat /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/override.conf

HTTP 代理伺服器的預期輸出:

[Service]
Environment="http_proxy=http://hostname:port"
Environment="https_proxy=http://hostname:port"
Environment="no_proxy=169.254.169.254"

HTTPS 代理伺服器的預期輸出:

[Service]
Environment="http_proxy=http://hostname:port"
Environment="https_proxy=https://hostname:port"
Environment="no_proxy=169.254.169.254"

以 Amazon Linux 2 為基礎的 EC2 Linux 執行個體

輸入下列命令,確認代理資訊符合範例預期輸出。如需詳細資訊,請參閱設定 SSM Agent 以使用代理 (systemd)

重要: 如果您更新 amazon-ssm-agent.override 檔案,請務必在編輯該檔案之後重新啟動 SSM Agent。

$ cat /etc/systemd/system/amazon-ssm-agent.service.d/override.conf

HTTP 代理伺服器的預期輸出:

[Service]
Environment="http_proxy=http://hostname:port"
Environment="https_proxy=http://hostname:port"
Environment="no_proxy=169.254.169.254"

HTTPS 代理伺服器的預期輸出:

[Service]
Environment="http_proxy=http://hostname:port"
Environment="https_proxy=https://hostname:port"
Environment="no_proxy=169.254.169.254"

以其他作業系統為基礎的 EC2 Linux 執行個體

輸入下列命令,確認代理資訊符合範例預期輸出。如需詳細資訊,請參閱設定 SSM Agent 以使用代理 (systemd)

重要: 如果您更新 amazon-ssm-agent.override 檔案,請務必在編輯該檔案之後重新啟動 SSM Agent。

$ cat /etc/systemd/system/amazon-ssm-agent.service.d/amazon-ssm-agent.override

HTTP 代理伺服器的預期輸出:

[Service]
Environment="http_proxy=http://hostname:port"
Environment="https_proxy=http://hostname:port"
Environment="no_proxy=169.254.169.254"

HTTPS 代理伺服器的預期輸出:

[Service]
Environment="http_proxy=http://hostname:port"
Environment="https_proxy=https://hostname:port"
Environment="no_proxy=169.254.169.254"

相關資訊

使用 SSM Agent

對 SSM Agent 進行疑難排解

AWS 官方
AWS 官方已更新 3 年前