Ganymed-ssh2在openssh4.3時出現SSH_OPEN_ADMINISTRATIVELY_PROHIBITED錯誤


jar包版本:Ganymed-ssh2-build210

openSsh版本:4.3

部分代碼如下

                Session sess = null;
		StringBuffer normal = new StringBuffer();
		StringBuffer error = new StringBuffer();
		try {
			if (!isAlive()) connect();
			sess = this.openSession(conn);
			sess.execCommand(cmd);// 執行命令

			InputStream out = new StreamGobbler(sess.getStdout());// 正常輸出
			InputStream err = new StreamGobbler(sess.getStderr());// 異常輸出
			BufferedReader outStr = new BufferedReader(new InputStreamReader(out));
			BufferedReader errStr = new BufferedReader(new InputStreamReader(err));
			String line = "";
			while ((line = outStr.readLine()) != null) {
				normal.append(line + "\n");
			}
			while ((line = errStr.readLine()) != null) {
				logger.error(line);
				error.append(line + "\n");
			}

		} catch (Exception e) {
			logger.error(e.toString(), e);
		} finally {
			this.closeSession(sess);
		}

在finally中對session進行關閉,可是實際情況是在openssh4.3的版本下,session並沒有正常關閉(可能是在低版本的openssh才有的bug,5.3以上版本都可以正常關閉),並且在執行10次命令之后,就會報異常: java.io.IOException: Could not open channel (The server refused to open the channel (SSH_OPEN_ADMINISTRATIVELY_PROHIBITED, 'open failed'))

網上資料找了很久才找到答案,地址:http://www.ganymed.ethz.ch/ssh2/faq.html
由於openssh4.3的max_sessions默認是10,而且采用了硬編碼,要解決該問題,有3種方案:
1、修改openssh4.3的源代碼,重新編譯
2、將並發的session數控制在10以內 (由於session在openssh4.3版本不能正常關閉,所以這種方案不可行)
3、將session分發到多個connection連接 (推薦使用)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM