com.jcraft.jsch.JSchException: Algorithm negotiation fail解決

1.背景:

某機構(gòu)升級了ssh版本,對應(yīng)造成sftp連接異常,異常信息:com.jcraft.jsch.JSchException: Algorithm negotiation fail
原jsch版本:jsch-0.1.50.jar
需升級版本:jsch-0.1.53.jar

報錯說明引用:https://www.cnblogs.com/exmyth/p/14779241.html
小插曲:對應(yīng)我維護的項目是一個老的項目,歷經(jīng)幾任研發(fā),生產(chǎn)只有一個jar包在運行,沒有文檔,也無代碼,一旦有問題,那可真是要命,因為是對外的項目,承接外部機構(gòu),陸續(xù)出現(xiàn)了一些,更換http證書、rsa秘鑰的,好在可以直接解壓jar去修改配置文件,現(xiàn)在是更換依賴版本那可真是頭疼,只能試,原因是有些jar包版本升級有些包路徑、方法可能會有更新;這種情況,無解,沒有好的辦法;好在對應(yīng)反編譯中import路徑對應(yīng)無更新,對應(yīng)方法五更改,所以可以替換,下面是替換過程,請參考;

2.解決方案;

2.1 機構(gòu)方對應(yīng)/etc/sshd_config 加入支持的低版本jsch-0.1.50.jar支持的算法,請參考對應(yīng)引用;

2.2 客戶端解決方案:(盡量讓對方解決,問題是因為對方升級ssh造成的,對方解決不了的情況下,我們在介入解決)

#先備份原jar包
cp bull-prepose-file-1.1.0.jar ../bak/
#解壓jar包
jar -xvf bull-prepose-file-1.1.0.jar 

3.2 解壓后:多了三個文件夾 BOOT-INF,META-INF,org

image.png

3.3 將高版本的jsch-0.1.53.jar 放入 BOOT-INF/lib/目錄,并刪除原版本;

3.4 重新打包;

#重新打包
jar -cfM0 bull-prepose-file-1.1.0.jar ./BOOT-INF/ ./META-INF/ ./org/
image.png

3.5 重新啟動項目:

image.png

福利:對應(yīng)啟動腳本分享:

#!/bin/sh
## java env
## API_NAME : 包名
API_NAME=bull-prepose-file
JAR_NAME=`ls $API_NAME*.jar`
#PID  代表是PID文件
PID=$API_NAME\.pid

#使用說明,用來提示輸入?yún)?shù)
usage() {
    echo "Usage: sh 執(zhí)行腳本.sh [start|stop|restart|status]"
    exit 1
}

#檢查程序是否在運行
is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#啟動方法
start(){
  is_exist
  if [ $? -eq "0" ]; then 
    echo ">>> ${JAR_NAME} is already running PID=${pid} <<<" 
  else 
    nohup java -server -Xmx1024M -Xms1024M -Xmn1024M  -XX:MaxMetaspaceSize=216M -XX:MetaspaceSize=216M -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly  -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/appuser/logs/dump/bull-prepose-file/ -Xloggc:/app/appuser/logs/dump/bull-prepose-file/gc.log -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=22232 -Dlog4j2.formatMsgNoLookups=true  -jar  $JAR_NAME >/dev/null 2>&1 &
    echo $! > $PID
    echo ">>> start $JAR_NAME successed PID=$! <<<" 
   fi
  }

#停止方法
stop(){
  #is_exist
  pidf=$(cat $PID)
  #echo "$pidf"  
  echo ">>> api PID = $pidf begin kill $pidf <<<"
  kill $pidf
  rm -rf $PID
  sleep 2
  is_exist
  if [ $? -eq "0" ]; then 
    echo ">>> api 2 PID = $pid begin kill -9 $pid  <<<"
    kill -9  $pid
    sleep 2
    echo ">>> $JAR_NAME process stopped <<<"  
  else
    echo ">>> ${JAR_NAME} is not running <<<"
  fi  
}

#輸出運行狀態(tài)
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
  else
    echo ">>> ${JAR_NAME} is not running <<<"
  fi
}

#重啟
restart(){
  stop
  start
}

#根據(jù)輸入?yún)?shù),選擇執(zhí)行對應(yīng)方法,不輸入則執(zhí)行使用說明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac
exit 0

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容