如何對設定 SSM Agent 以使用代理管理 Amazon EC2 執行個體時發生的問題進行疑難排解?
當我使用代理搭配 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"
相關資訊
相關內容
- 已提問 5 個月前lg...
- 已提問 5 個月前lg...
- 已提問 1 年前lg...
- 已提問 10 個月前lg...
- 已提問 9 個月前lg...
- AWS 官方已更新 5 個月前
- AWS 官方已更新 3 年前