有許多可能的原因會導致 SSH 客戶端無法訪問 VM 上的 SSH 服務。 如果已經執行了較常規的 SSH 故障排除步驟,則需要進一步排查連接問題。 本文指導用戶完成詳細的故障排除步驟,以確定 SSH 連接失敗的位置以及解決方法。
采取預備步驟
下圖顯示了與錯誤相關的組件。
以下步驟幫助用戶查明失敗的原因,并得出解決方法或應對措施。
在門戶中檢查 VM 的狀態。 在Azure 門戶中,選擇“虛擬機” > “VM 名稱”。
VM 的狀態窗格應顯示“正在運行” 。 向下滾動以顯示計算、存儲和網絡資源的最近活動。
選擇“設置”檢查終結點、IP 地址、網絡安全組和其他設置。
VM 必須有為 SSH 流量定義的終結點,可以在“終結點”或“網絡安全組”查看 SSH 流量。 將 VM 中使用資源管理器創建的終結點存儲在網絡安全組中。 此外,請驗證對網絡安全組應用的規則,以及子網中是否引用了這些規則。
若要驗證網絡連接,檢查配置的終結點,并了解是否可通過其他協議(如 HTTP 或其他服務)連接到 VM。
在執行這些步驟之后,重新嘗試 SSH 連接。
查找問題的來源
如果計算機上的 SSH 客戶端無法訪問 Azure VM 上的 SSH 服務,則原因可能是以下方面存在問題或配置錯誤:
來源 1:SSH 客戶端計算機
要將你的計算機從失敗原因中排除,請驗證你的計算機是否能夠與其他基于 Linux 的本地計算機建立 SSH 連接。
如果連接失敗,請檢查計算機上是否存在以下問題:
本地防火墻設置阻止了入站或出站 SSH 流量 (TCP 22)
本地安裝的客戶端代理軟件阻止 SSH 連接
本地安裝的網絡監視軟件阻止 SSH 連接
監視流量或允許/禁止特定類型流量的其他類型的安全軟件
如果存在其中一種情況,請暫時禁用相關軟件,并嘗試與本地計算機建立 SSH 連接,以找出計算機上阻止連接的原因。 然后,與網絡管理員合作以更正軟件設置,從而允許 SSH 連接。
如果使用證書身份驗證,請驗證是否具備訪問主目錄中 .ssh 文件夾的以下權限:
Chmod 700 ~/.ssh
Chmod 644 ~/.ssh/*.pub
Chmod 600 ~/.ssh/id_rsa(或存儲私鑰的其他任何文件)
Chmod 644 ~/.ssh/known_hosts(包含已通過 SSH 連接的主機)
來源 2:組織邊緣設備
要將你的組織邊緣設備從失敗原因中排除,請驗證直接連接到 Internet 的計算機是否可以與 Azure VM 建立 SSH 連接。 如果是通過站點到站點 VPN 或 Azure ExpressRoute 連接來訪問 VM,請跳轉到來源 4:網絡安全組。
如果沒有直接連接到 Internet 的計算機,可以在其自己的資源組或云服務中創建新的 Azure VM,并進行使用。 有關詳細信息,請參閱在 Azure 中創建運行 Linux 的虛擬機。 測試完成后,請刪除資源組或 VM 以及云服務。
如果可以創建與直接連接到 Internet 的計算機之間的 SSH 連接,則檢查組織邊緣設備中是否存在以下問題:
內部防火墻阻止了與 Internet 的 SSH 連接
代理服務器阻止了 SSH 連接
邊界網絡中的設備上運行的入侵檢測或網絡監視軟件阻止了 SSH 連接
與網絡管理員合作以更正組織邊緣設備的設置,從而允許與 Internet 建立 SSH 流量連接。
來源 3:云服務終結點和 ACL
Note
此來源僅適用于使用經典部署模型創建的 VM。 對于使用 Resource Manager 創建的 VM,請跳轉到來源 4:網絡安全組。
要將云服務終結點和 ACL 從失敗原因中排除,請驗證同一虛擬網絡中的其他 Azure VM 是否可與 VM 建立 SSH 連接。
如果同一虛擬網絡中沒有其他 VM,可以輕松創建一個 VM。 有關詳細信息,請參閱使用 CLI 在 Azure 上創建 Linux VM。 測試完成后,請刪除多余的 VM。
如果可以與同一虛擬網絡中的某個 VM 建立 SSH 連接,請檢查以下方面:
目標 VM 上 SSH 流量的終結點配置。終結點的專用 TCP 端口應該與 VM 上的 SSH 服務正在偵聽的 TCP 端口匹配。 (默認端口為 22)。 請在 Azure 門戶中選擇“虛擬機” > “VM 名稱” > “設置” > “終結點”來驗證 SSH TCP 端口號。
目標虛擬機上的 SSH 流量終結點的 ACL。ACL 允許指定基于源 IP 地址允許或拒絕的從 Internet 傳入的流量。 錯誤配置的 ACL 可能會阻止 SSH 流量傳入終結點。 檢查 ACL 以確保允許從代理服務器或其他邊緣服務器的公共 IP 地址傳入的流量。 有關詳細信息,請參閱關于網絡訪問控制列表 (ACL)。
若要將終結點從問題原因中排除,請刪除當前終結點,創建另一個終結點,然后指定 SSH 名稱(公共和專用端口號為 TCP 端口 22)。 有關詳細信息,請參閱在 Azure 中的虛擬機上設置終結點。
來源 4:網絡安全組
通過使用網絡安全組,可以對允許的入站和出站流量進行更精細的控制。 可以創建跨 Azure 虛擬網絡中的子網和云服務的規則。 檢查網絡安全組規則,確保允許傳入和傳出 Internet 的 SSH 流量。 有關詳細信息,請參閱關于網絡安全組。
來源 5:基于 Linux 的 Azure 虛擬機
最后一個可能出現問題的來源是 Azure 虛擬機本身。
如果尚未這樣做,請遵循如何為基于 Linux 的虛擬機重置密碼或 SSH中的說明。
嘗試從計算機重新建立連接。 如果仍然失敗,則可能存在以下問題:
SSH 服務未在目標虛擬機上運行。
未在 TCP 端口 22 上偵聽 SSH 服務。 如果要測試,可在本地計算機上安裝一個 telnet 客戶端,并運行“telnetcloudServiceName.chinacloudapp.cn 22”。 此步驟確定虛擬機是否允許與 SSH 終結點進行入站和出站通信。
目標虛擬機上的本地防火墻具有阻止入站或出站 SSH 流量的規則。
Azure 虛擬機上運行的入侵檢測或網絡監視軟件阻止了 SSH 連接。
其他資源
有關對應用程序訪問進行故障排除的詳細信息,請參閱對在 Azure 虛擬機上運行的應用程序的訪問進行故障排除
立即訪問http://market.azure.cn