

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 疑難排解
<a name="discovery-tool-troubleshooting"></a>

## 驗證探索工具與 vCenter 的連線
<a name="discovery-tool-vcenter-connectivity"></a>

當您遇到 VMware 模組組態錯誤時，請依照下列步驟驗證連線：

**存取 探索工具 VM**
+ 登入探索工具 VM，在 vCenter 中開啟遠端主控台
  + 使用者名稱： 探索
  + 密碼：密碼

**測試 vCenter 連線能力**

1. 測試 vCenter API 存取：

   ```
   curl -v --insecure -u <username>:<password> https://<vcenter-ip-or-hostname>:443/mob
   ```

1. 預期的成功輸出：

   ```
   [ec2-user@discoverytool ~]$ curl -v --insecure -u <user>:<password> https://vcsa/mob > tmp.txt
     % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                    Dload  Upload   Total   Spent    Left  Speed
     0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 192.168.2.125:443...
   * Connected to vcsa (192.168.2.125) port 443 (#0)
   ...
   </xml>
   * Connection #0 to host vcsa left intact
   ```

**測試 SSL 憑證**

1. 執行此命令：

   ```
   openssl s_client -showcerts -servername <hostname> -connect <hostname>:443
   ```

1. 預期的成功輸出：
   + 應該顯示 vSphere 憑證詳細資訊
   + 驗證連接埠 443 上的 SSL/TLS 連線

   ```
   [ec2-user@discoverytool ~]$ openssl s_client -showcerts -servername vcsa -connect vcsa:443
   CONNECTED(00000003)
   depth=0 CN = vcsa.onpremsim.env, C = US
   verify error:num=20:unable to get local issuer certificate
   verify return:1
   depth=0 CN = vcsa.onpremsim.env, C = US
   verify error:num=21:unable to verify the first certificate
   verify return:1
   ---
   Certificate chain
    0 s:/CN=vcsa.onpremsim.env/C=US
      i:/CN=CA/DC=vsphere/DC=local/C=US/ST=California/O=vcsa.onpremsim.env/OU=VMware Engineering
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   ---
   Server certificate
   subject=/CN=vcsa.onpremsim.env/C=US
   issuer=/CN=CA/DC=vsphere/DC=local/C=US/ST=California/O=vcsa.onpremsim.env/OU=VMware Engineering
   ---
   ```

## WinRM 故障診斷
<a name="discovery-tool-winrm-troubleshooting"></a>

如果您遇到 WinRM 的連線問題，請依照下列步驟測試連線。這些步驟也適用於 Hyper-V 連線問題，因為探索工具使用 WinRM 與 Hyper-V 主機通訊。

使用連接埠 5985 (HTTP) 和 5986 (HTTPS) 測試基本 WinRM 連線。我們需要確保連線可在連接埠 5986 (HTTPS) 上運作

```
# Check WinRM listener configuration
winrm enumerate winrm/config/listener

# Note: Replace <HOST> with the target computer's hostname or IP address. Adjust the username and password as needed. 
# Test WinRM connection on port 5985 (HTTP)
$cred = Get-Credential
Test-WSMan -Computer <HOST> -Authentication Negotiate -Credential $cred -Port 5985

# Test WinRM connection on port 5986 (HTTPS)
Test-WSMan -Computer <HOST> -Authentication Negotiate -Credential $cred -Port 5986
```

如果上述測試失敗，請嘗試建立已停用憑證驗證的 PowerShell 工作階段：

```
$cred = Get-Credential
$so = New-PsSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Enter-PSSession -ComputerName <HOST> -Credential $cred -Port 5985 -SessionOption $so
```

## Kerberos 疑難排解
<a name="discovery-tool-kerberos-troubleshooting"></a>

如果您在從 Windows 伺服器收集資料時遇到 Kerberos 身分驗證失敗，請使用下列各節來診斷和解決常見問題。

### 驗證網路需求
<a name="kerberos-verify-network"></a>

在對 Kerberos 身分驗證進行疑難排解之前，請確認探索工具可以到達所需的網路端點。

**驗證 Kerberos 的網路需求**

1. 驗證網域控制器的 DNS 解析。從探索工具 VM 執行下列命令：

   ```
   nslookup dc01.example.com
   ```

   或者，您可以使用 `dig`：

   ```
   dig dc01.example.com
   ```

   如果 DNS 解析失敗，請確認探索工具 VM 已設定為使用可以解析 Active Directory 網域的 DNS 伺服器。檢查`/etc/resolv.conf`並確認名稱伺服器項目指向您的網域 DNS 伺服器。

1. 驗證連接埠 88 上金鑰分發中心 (KDC) 的連線。執行以下命令：

   ```
   nc -zv dc01.example.com 88
   ```

   預期的輸出結果：

   ```
   Connection to dc01.example.com 88 port [tcp/kerberos] succeeded!
   ```

   如果連線失敗，請確認沒有防火牆規則封鎖從探索工具 VM 到連接埠 88 上網域控制器的流量。

1. 驗證與 WinRM 連接埠上目標 Windows 伺服器的連線。執行下列命令：

   ```
   nc -zv <windows-server> 5985
   nc -zv <windows-server> 5986
   ```

   如果連線失敗，請確認目標伺服器上已啟用 WinRM，且防火牆規則允許連接埠 5985 和 5986 上的傳入流量。

### Kerberos 常見問題
<a name="kerberos-common-issues"></a>

以下是常見的 Kerberos 問題及其解決方案。

**區分大小寫錯誤**

徵狀：您在身分驗證期間收到「在 Kerberos 資料庫中找不到伺服器」錯誤。

當 Kerberos 領域名稱不是大寫時，通常會發生此錯誤。Kerberos 領域必須在您的 `krb5.conf` 檔案中以大寫形式指定。例如，使用 `EXAMPLE.COM` 代替 `example.com`。

**防止帳戶鎖定**

探索工具使用退避機制，以防止帳戶鎖定重複失敗的身分驗證嘗試。如果您的服務帳戶遭到鎖定，您可以停止 ，然後透過位於 的探索工具 Web UI 啟動集合模組，以重設集合程序`https://<discovery-tool-vm-ip>:5000`。

**CLI 的kinit 失敗**

下表列出常見的`kinit`錯誤及其解決方案。


| 錯誤 | 原因 | 解決方案 | 
| --- | --- | --- | 
| 找不到領域適用的 KDC | 無法連線 KDC 主機名稱或 IP 地址，或未在 中設定領域krb5.conf。 | 確認krb5.conf檔案包含正確的 KDC 主機名稱和領域。確認連接埠 88 上 KDC 的 DNS 解析和網路連線能力。 | 
| 預先驗證失敗 | 服務帳戶的密碼不正確。 | 驗證密碼，然後再試一次。如果帳戶遭到鎖定，請先在 Active Directory 中將其解除鎖定，再重試。 | 
| 在 Kerberos 資料庫中找不到用戶端 | 主體名稱與 Active Directory 中的任何帳戶不相符。 | 確認主體名稱完全符合帳戶名稱，包括案例。使用 格式username@REALM搭配大寫的領域。 | 
| 無法解析 KDC 的網路地址 | DNS 無法解析 KDC 主機名稱。 | 在 中驗證 DNS 組態/etc/resolv.conf。確認 DNS 伺服器可以解析 KDC 主機名稱。使用 nslookup或 進行測試dig。 | 

**成功綁定後，集合會失敗**

如果 `kinit`成功，但資料收集仍然失敗，請檢查下列項目：

1. 確認用於集合的主體名稱與期間使用的案例`kinit`完全相符。

1. 確認服務帳戶在目標伺服器上具有必要的許可。

1. 確認目標伺服器上已啟用 WinRM。

1. 確認用於集合的主機名稱符合 Active Directory 中註冊的主機名稱。

**Kerberos 適用於某些伺服器，但不適用於其他伺服器**

如果 Kerberos 身分驗證在某些伺服器上成功，但其他伺服器失敗，請調查下列領域：

如果您的伺服器跨越多個 Active Directory 網域，請為每個網域設定個別的 Kerberos 登入資料。請確定您的 `/etc/krb5.conf` 檔案包含所有領域的項目。每個網域都需要自己的登入資料與正確的`username@REALM`主體。

比較工作伺服器上的 WinRM 組態與故障伺服器。在每個伺服器上執行下列命令：

```
winrm get winrm/config
```

測試與遠端桌面的連線，以隔離問題。探索工具使用 格式`username@DOMAIN`，而遠端桌面則使用 格式 `DOMAIN\username`。

確認服務帳戶是失敗伺服器上本機管理員群組的成員。在目標伺服器上執行下列命令：

```
net localgroup Administrators
```

WMI 需要本機管理員權限才能存取作業系統資訊。SQL Server 集合也需要服務帳戶在目標伺服器上具有本機管理員存取權。

### Kerberos 組態檢查清單
<a name="kerberos-checklist"></a>

在您開始資料收集之前，請使用下列檢查清單來驗證您的 Kerberos 組態。
+ `krb5.conf` 檔案存在於探索工具 VM 上。
+ 在 中，領域名稱為大寫`krb5.conf`。
+ `kinit` 使用服務帳戶執行 會成功，不會發生錯誤。
+ 執行中`klist`顯示有效的未過期票證。
+ 主體名稱完全符合 Active Directory 帳戶名稱。
+ DNS 解析適用於 KDC 主機名稱。
+ 連接埠 88 上 KDC 的網路連線已確認。
+ 連接埠 5985 和 5986 上目標 Windows 伺服器的網路連線已確認。
+ （多網域） 每個 Active Directory 網域都有自己在探索工具中設定的登入資料，並`krb5.conf`包含所有網域的 `[realms]`和 `[domain_realm]`項目。

## Oracle 資料庫疑難排解
<a name="discovery-tool-oracle-troubleshooting"></a>

若要診斷 Oracle 資料庫集合問題，例如資料遺失或錯誤，請檢查下列項目。

**連線遭拒或逾時**

徵狀：Oracle 集合狀態會顯示伺服器的連線錯誤。

若要疑難排解此問題，請檢查下列項目：
+ 確認 Oracle 接聽程式正在目標主機上執行： `lsnrctl status`
+ 驗證從探索工具到連接埠 1521 （或您的自訂連接埠） 上 Oracle 主機的網路連線： `nc -zv <oracle-host> 1521`
+ 確認防火牆規則允許 Oracle 接聽程式連接埠上的傳入連線。
+ 在 Oracle 主機`lsnrctl services`上執行 驗證服務名稱。如果服務名稱不正確，Oracle 接聽程式會拒絕連線。

**身分驗證失敗 (ORA-01017)**

徵狀：集合失敗，使用者名稱或密碼錯誤無效。

若要疑難排解此問題，請檢查下列項目：
+ 確認 Oracle 服務帳戶存在且未鎖定： `SELECT account_status FROM dba_users WHERE username = 'DISCOVERY_USER';`
+ 手動連線以確認密碼是否正確： `sqlplus discovery_user/<password>@<host>:1521/<service_name>`
+ 如果帳戶已鎖定，請將其解除鎖定： `ALTER USER discovery_user ACCOUNT UNLOCK;`

**權限不足 (ORA-01031)**

徵狀：連線成功，但集合會傳回不完整的資料。

若要疑難排解此問題，請檢查下列項目：
+ 確認已授予 SELECT\_CATALOG\_ROLE： `SELECT * FROM dba_role_privs WHERE grantee = 'DISCOVERY_USER';`
+ 如果遺失，請授予必要的角色： `GRANT SELECT_CATALOG_ROLE TO discovery_user;`

**手動登入資料顯示錯誤，但自動連線運作**

當您手動將登入資料鎖定至伺服器時，如果連線失敗，探索工具不會回復。驗證您在登入資料上設定的連接埠和服務名稱是否符合該特定伺服器上的 Oracle 接聽程式。如果伺服器具有非標準連接埠或服務名稱，請相應地更新登入資料組態。

**未偵測 Oracle 的作業系統層級備用**

如果未設定資料庫登入資料，且作業系統層級的後援未偵測到 Oracle：
+ 確認 SSH 或 WinRM 作業系統登入資料已設定並適用於伺服器 （檢查作業系統指標收集狀態）。
+ 對於 Linux 主機，請確認 `/etc/oratab`是否存在或 Oracle 程序監控 (`pmon`) 程序正在執行中。
+ 對於 Windows 主機，請確認 Oracle 登錄項目存在於 下`HKLM\SOFTWARE\Oracle`或`oracle.exe`程序正在執行中。

## SNMP 故障診斷
<a name="discovery-tool-snmp-troubleshooting"></a>

**存取 探索工具 VM**
+ 登入探索工具 VM，在 vCenter 中開啟遠端主控台
  + 使用者名稱： 探索
  + 密碼：密碼

**安裝 SNMP 工具 （如有需要）**
+ `sudo yum install net-snmp-utils -y`

**測試 Linux 伺服器的 SNMP 連線**

1. `snmptable -v 2c -c <COMMUNITY_STRING> <REMOTE_SERVER_IP> .1.3.6.1.2.1.6.13.1`

1. 範例：

   ```
   #SNMPv2c:
   snmptable -v 2c -c public 192.168.1.100 .1.3.6.1.2.1.6.13.1
   
   #SNMPv3 (with authentication):
   snmptable -v 3 -u <username> -a MD5 -A <auth_password> 192.168.1.100 .1.3.6.1.2.1.6.13.1
   
   #SNMPv3 (with privacy):
   snmptable -v 3 -u <username> -a MD5 -A <auth_password> -x DES -X <priv_password> 192.168.1.100 .1.3.6.1.2.1.6.13.1
   ```

## 網路集合錯誤
<a name="discovery-tool-network-collection-errors"></a>

### 讀取密碼需要終端機
<a name="discovery-tool-terminal-required"></a>

**錯誤：**

```
ss command failed on <host>: sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper sudo: a password is required
```

ss 命令正在提示使用者密碼。設定的 ssh 使用者必須位於 sudoers 群組中，並使用 ss/netstat 命令的無密碼 sudo 進行設定。若要設定無密碼 sudo：

1. 建立新的 sudoers 檔案：

   ```
   sudo vi -f /etc/sudoers.d/<username>
   ```

1. 新增該行：

   ```
   <username> ALL=(ALL) NOPASSWD: /usr/sbin/ss, /usr/bin/netstat
   ```

1. 在此變更之後，執行 `sudo ss -tnap`和 `sudo netstat -tnap`應該在不提示密碼的情況下執行

### 網路集合在沒有 sudo 的情況下執行
<a name="discovery-tool-non-sudo-warning"></a>

如果您在**探索的庫存**頁面上看到下列警告：

```
Network collection ran without sudo. Process-level connection data may be missing.
```

此警告表示 SSH 使用者帳戶在目標伺服器上沒有 sudo 存取。如果沒有 sudo，探索工具仍然可以收集網路連線資料，但無法判斷哪個程序擁有每個連線。若要收集完整的程序層級連線資料，請確定 SSH 使用者在目標伺服器上具有 sudo 存取。

## 作業系統指標集合錯誤
<a name="discovery-tool-os-metrics-collection-errors"></a>

### Linux 伺服器缺少伺服器 UUID
<a name="discovery-tool-missing-uuid"></a>

如果探索工具無法收集 Linux 伺服器的伺服器 UUID （顯示為空或遺失），請確認為這些伺服器設定的 SSH 登入資料具有 sudo 權限。此工具使用 `dmidecode` 讀取伺服器 UUID。如果`dmidecode`未安裝 ，工具會回到讀取 `/sys/class/dmi/id/product_uuid`，這也需要 sudo 存取。如果沒有 sudo，則任何方法都無法擷取 UUID。

**解決方案：**確保提供給探索工具的 SSH 使用者帳戶在目標 Linux 伺服器上具有 sudo 存取。

## 已探索庫存中的存取問題
<a name="discovery-tool-access-issues"></a>

如果您在**伺服器集合狀態**中看到訊息，例如缺少登入資料或存取遭拒：

1. 在探索到的伺服器資料表上選取伺服器。

1. 選擇**管理存取憑證** 您可以選擇：

   1. 從選取登入資料下拉式清單**中選取替代登入資料**。

   1. 選取**使用新登入**資料並提供新登入資料。

1. **Save (儲存)**。

探索工具會在您儲存變更後重試連線。

## SSH 金鑰身分驗證疑難排解
<a name="discovery-tool-ssh-key-troubleshooting"></a>

**從 探索工具測試 SSH 金鑰連線**

如果 SSH 金鑰身分驗證失敗，請確認從探索工具到目標伺服器的連線：

1. 登入探索工具 （透過 vSphere 主控台或 SSH 到 Linux 主機）。

1. 使用私有金鑰測試 SSH 連線：

   ```
   ssh -i /path/to/private_key -o StrictHostKeyChecking=no <username>@<target_ip>
   ```

1. 如果連線成功，問題在於金鑰上傳到探索工具的方式。重新上傳金鑰並驗證使用者名稱是否相符。

1. 如果連線失敗，請檢查下表中的錯誤訊息。


| 錯誤訊息 | 原因 | Resolution | 
| --- | --- | --- | 
| Permission denied (publickey) | 公有金鑰不在目標伺服器的 authorized\_keys 檔案中，或使用者名稱錯誤。 | 為正確的使用者\~/.ssh/authorized\_keys將公有金鑰新增至目標伺服器上的 。驗證檔案許可：chmod 700 \~/.ssh && chmod 600 \~/.ssh/authorized\_keys。 | 
| Connection timed out after 20s | 無法從探索工具連線連接埠 22。 | 確認探索工具和目標伺服器之間的連接埠 22 已開啟。檢查防火牆和安全群組。 | 
| Connection refused | SSH 服務未在目標伺服器上執行。 | 啟動 SSH 服務：sudo systemctl start sshd。 | 
| Invalid SSH key for credential '{{name}}' | 不支援金鑰格式、金鑰資料損毀，或密碼短語遺失或不正確。 | 驗證金鑰格式為 RSA、ECDSA 或 Ed25519，採用 PEM、OpenSSH 或 PKCS\#8 格式。如果金鑰已加密，請確定密碼片語正確。 | 

## Linux 安裝程式疑難排解
<a name="discovery-tool-linux-installer-troubleshooting"></a>

**連接埠 5000 已在使用中**

**徵狀：**安裝後，探索工具服務無法啟動。

**解決方案：**使用連接埠 5000 識別和停止程序：

```
sudo ss -tlnp | grep :5000
```

停止衝突的程序，然後重新啟動探索工具：

```
sudo ./AWS-Transform-discovery-tool.sh start
```

## 常見錯誤訊息
<a name="discovery-tool-ui-messages"></a>

此表說明常見的錯誤訊息及其說明：


| 訊息 | Location | 說明 | 
| --- | --- | --- | 
| 已建立密碼 | 建立密碼頁面 | 兩個使用者同時建立密碼時的競賽條件；重新整理 | 
| 匯出失敗 | 庫存頁面 | 重試或傳送日誌 | 
| 隨需集合已在進行中 | 庫存頁面 | 當兩個使用者同時啟動手動集合時的競賽條件；在目前的手動集合完成後再試一次 | 
| Command timed out after 60s | 伺服器集合狀態 | 目標伺服器上的命令未在 60 秒內完成。這可能發生在大量載入的伺服器上。重試集合或調查目標伺服器的負載。 | 
| 一或多個登入資料包含未知 UUIDs | 作業系統存取頁面 | 兩個使用者同時編輯作業系統登入資料的競賽條件；請再試一次 | 
| 無效的密碼 | 登入頁面 | 登入密碼不正確；請聯絡管理員或聯絡 | 
| 您的工作階段已過期。請再次登入。 | 登入頁面 | 工作階段已逾時，需要再次登入 | 
| 發生內部錯誤 | 各種頁面 | 重試或傳送日誌 | 