看到這個報錯,是不是覺得很嘲諷,down了 還 666呢,搞心態吧。也不知道誰定義的這個報錯。
先說下報錯的背景,開發環境中。我們有個調度系統,並且允許其他系統的使用。調度平臺主要功能 定時執行一些,設定好的任務、命令行作業。
大數據平臺,反饋出一個調度系統執行作業時,一直報錯 session is down 666,導致作業一直執行失敗,嚴重影響了他們的開發,需要我協助解決。
主要原因,調度系統 使用 ssh 遠程服務器,連接失敗。
1.登錄調度服務器,使用 ssh命令遠程大數據服務器 。
ssh 用戶名(大數據服務器用戶名)@idp(大數據服務器用戶名)
密碼*****
結果是可以連接的,排除兩服務器 之間沒有開通 ssh訪問關係可能。
2.查看 被遠程的服務器(大數據服務器)系統設置,命令爲
cat /etc/ssh/sshd_config
查看服務器配置項 PasswordAuthentication 居然設置的是 no 不允許密碼 登錄。這就簡單了,改下配置就可以了。但是這個步驟需要用 root權限。本次也是 因爲被遠程的服務器這個設置的爲no,導致連接失敗的,改爲 yes後,訪問正常。
3.jar加載順序
造成這種報錯,還有一種可能,也是最難排查的一種,就是java程序中 jar包加載順序。因爲生產上我遇到過這種問題,本文中就一塊說了,佔用篇幅較長。
我們程序中使用連接 服務器的方式是 ,使用ssh 連接,建立會話,然後 執行 shell 命令或執行腳本。建立ssh 鏈接使用的工具包爲 jsch-0.1.51.jar sshcore2.0.2.jar ,這兩個jar包 。在本地部署運行時正常,遠程服務器,執行 shell命令都沒問題。但是部署到was服務器後,就會出現報錯 session is down 666。
這個是由於 was服務器的類加載順序造成的,需要調整類的加載策略。調整方式 爲
服務器 -> 服務器類型 -> websphere -> application ->servaer ->server1(我的是1)
選擇類裝入策略 :單個
類裝入方式 :類已裝入並且先使用本地類裝入器(父類最後)
再將 選擇類裝入策略改爲 :多個
確定,保存至主配置。
到這裏基本問題基本已得到解決。如果還沒有解決,那就只能用最後一種方式,手動調整jar包加載順序。調整jar包位置。將 jsch-0.1.51.jar 由WEB-INFO lib 路徑下 複製到 WEB-INFO class 路徑下,然後重啓was服務器,這樣 就會先加載 jsch-0.1.51.jar,再加載 sshcore2.0.2.jar 就不會出現這兩個類 加載順序的問題。