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