SSH 無法遠程登錄問題的處理思路

Linux CentOS 軟件 OpenSSL 雲棲社區 2017-04-29

更多深度文章,請關注雲計算頻道:https://yq.aliyun.com/cloud

SSH 無法遠程登錄問題的處理思路

購買雲服務器 ECS(後續簡稱 ECS)Linux 服務器後,首先面臨的就是如何登錄和使用的問題。而由於服務器在雲端,所以日常運維中通常都會基於 SSH 客戶端登錄服務器進行相關操作。今天,我們就從登錄 ECS 的不同方法和使用場景講起,捋清 SSH 無法遠程登錄問題的常見原因與排查思路。

ECS Linux 服務器的登錄方式

SSH 無法遠程登錄問題的處理思路

ECS Linux 不同登錄方式示意圖

如上圖所示,當前 ECS Linux 支持 3 種不同的登錄方式,其操作說明與使用場景如下:

1.管理終端(遠程連接)

  • 使用場景:當出現 ECS 啟動異常、網絡中斷或 SSH 無法正常連接等情況時,可以通過管理終端(遠程連接)功能直接連接服務器。它基於 VNC 技術,相當於在 ECS 上直連了一臺虛擬的顯示器(含鼠標、鍵盤)

  • 操作說明:管理終端的使用方法,可以參閱 產品文檔

2.SSH

  • 使用場景:標準的 Linux 服務器連接方式。您可以通過各種 Linux SSH 客戶端連接、登錄 ECS,進行服務器的運維和管理工作。

  • 操作說明:使用常用 SSH 客戶端連接、登錄 ECS Linux 服務器的操作方法,可以慘閱 產品文檔

3.SSH 密鑰對

  • 使用場景:基於密鑰對的免密碼登錄,降低了密碼洩露的風險,提高了操作的安全性,同時也便於服務器的批量運維。

  • 操作說明:SSH 密鑰對的使用方法,可以參閱 產品文檔

SSH 無法遠程登錄問題的常見原因與處理思路

如前所述,SSH 客戶端是 ECS Linux 服務器的主要的運維途徑。而網絡、服務器配置、SSH 服務配置等多種因素均可能會導致 SSH 連接或登錄過程出現異常。接下來會先介紹影響 SSH 連接或登錄的常見因素,然後說明此類問題的分析處理思路。

SSH 連接登錄相關因素

SSH 無法遠程登錄問題的處理思路

SSH 連接登錄相關因素示意圖

如上圖所示,多種因素均可能會導致客戶端通過 SSH 連接或登錄服務器出現異常,包括但不限於:

  • 客戶端軟件或軟件配置問題

  • 客戶端網絡問題

  • 中間鏈路問題

  • 雲盾、ECS 安全組或系統內 iptables 等安全配置問題

  • Linux 系統 PAM 安全模塊配置問題

  • Linux 系統環境配置問題

  • SSH 服務及參數配置問題

  • SSH 服務關聯的目錄或文件的屬性配置問題

  • SSH 服務密鑰配置問題

SSH 無法遠程登錄問題處理思路

SSH 無法遠程登錄問題的處理思路

SSH 無法遠程登錄問題處理思路示意圖

如果 SSH 無法正常連接或登錄,可以參閱上圖,通過如下步驟逐一進行排查分析:

1. 檢查客戶端軟件配置與網絡配置

通過如下方法做對比分析,以判斷是否是客戶端軟件、軟件配置或客戶端網絡存在異常,導致無法正常 SSH 連接或登錄服務器:

  • 重啟家用路由器,或通過 4G 熱點共享的方式,切換到不同的網絡做對比測試

  • 基於相同賬戶,使用不同的 SSH 客戶端軟件做對比訪問測試

2. 檢查中間網絡

通過如下方法對中間網絡做判斷和對比分析,以判斷是否是中間網絡引發的異常:

  1. ping 服務器 IP ,看是否正常。比如:ping 223.5.5.5

  • ping 丟包或不通時鏈路測試說明

  • 能 ping 通但端口不通時端口可用性探測說明

  • 網絡異常時抓包操作說明

  • 如果正常,則說明客戶端到服務端的中間鏈路是正常的。

  • 如果不正常,則可以參閱如下文檔針對客戶端到服務器之間的網絡做進一步排查分析:

  • telnet <服務器 IP> ,看是否正常。比如: telnet 223.5.5.5 22

    • 正常情況下,如下圖所示,會返回服務端 SSH 軟件版本號信息:

      SSH 無法遠程登錄問題的處理思路

    • 如果不正常,則說明可能是 SSH 服務異常或被雲盾、安全組等攔截所致,則參閱後續步驟繼續排查分析。

    3. 安全配置檢查

    通過如下方法,對 SSH 連接相關安全因素進行排查分析:

    1. 通過 淘寶 IP 地址庫 等網站獲取本地網絡出口公網 IP 後,到雲盾控制檯 查詢相關訪問是否被雲盾攔截。

    2. 檢查服務器歸屬安全組規則,確認對客戶端做了訪問放行。

    3. 檢查服務器內部 iptables 等安全配置,確認對客戶端做了訪問放行。

    4. SSH 服務與監聽狀態檢查

    通過如下方法,檢查 SSH 服務自身運行狀態:

    1. 可以通過 管理終端 進入服務器。

    2. 通過如下指令檢查 SSH 服務運行狀態。如果服務運行正常,則會返回運行狀態及相應進程 PID:

      [root@centos ~]# service sshd statusopenssh-daemon (pid 31350) is running…[root@centos ~]# service sshd restartStopping sshd: [ OK ]Starting sshd: [ OK ]
    3. 通過如下指令檢查 SSH 服務的端口監聽狀態。正常情況下會返回相應端口監聽信息:

      netstat -ano | grep 0.0.0.0:22tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN off (0.00/0/0)
    • 0.0.0.0 表示監聽所有網卡

    • 如果配置僅監聽內網網卡,比如10.126.3.45:22,則只能通過內網進行 SSH 登錄

  • 在系統內通過類似 ssh 127.0.0.1 的方式做對比測試,以判斷 SSH 服務連接是否正常:

  • 用法: ssh -p <SSH 端口號,如果是默認的 22,則無需輸入> 127.0.0.1 比如:

    ssh 127.0.0.1ssh -p 2022 127.0.0.1

    如果上述登錄測試正常,則說明 SSH 服務本身運行與監聽是正常的。則通過後續步驟做進一步排查分析。

    5. SSH 登錄錯誤進一步分析

    如果確認 SSH 服務及外部網絡鏈路正常,則可以通過如下方法,進一步檢查 SSH 登錄具體錯誤信息,然後結合歷史案例做相應分析和處理:

    1. 配置實時查看 SSH 服務端安全日誌:

      通過管理終端進入服務器。通過類似如下指令實時查看 SSH 服務端安全日誌:

      CentOS 服務器:tailf /var/log/secureUbuntu 服務器:tailf /var/log/auth
    2. 開啟客戶端 SSH debug 模式,獲取客戶端詳細登錄日誌:

      如果客戶端是 Linux 環境,則可以通過如下指令,獲取詳細的 SSH 登錄交互日誌:

      ssh -vvv <服務器 IP>

      比如:

      [root@centos~]# ssh -vvv 192.168.0.1OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013debug1: Reading configuration data /etc/ssh/ssh_configdebug1: Applying options for *debug2: ssh_connect: needpriv 0debug1: Connecting to 192.168.0.1 [192.168.0.1] port 22.debug1: connect to address 192.168.0.1 port 22: Connection timed outssh: connect to host 192.168.0.1 port 22: Connection timed out...
    3. 參閱 歷史案例,結合前述步驟獲取的 SSH 客戶端及服務端的日誌進行對比分析和處理。

    附錄:SSH 登錄原理

    可以參閱如下文檔,瞭解 SSH 服務連接登錄的相關原理,以便知其然知其所以然,更好的支撐此類問題的排查分析:

    • 雲服務器 ECS Linux SSH 連接交互過程簡介

    • 雲服務器 ECS Linux SSH 基於密鑰交換的自動登錄原理簡介及配置說明

    相關推薦

    推薦中...