问题描述
小弟最近遇到一个头疼万分的问题,修改一个程序,具体功能是先从本地连接到服务器A,然后再从A连接到B,然后再投入命令执行,比如ls。原先都是telnet连接,现在按照要求改成都是ssh2连接,先连接A,使用的是jsch-0.1.39.jar,/***sshconnect*@paramuser*@paramhost*@parampwd*@paramcommand*/publicvoidconnectSshByJsch(Stringuser,Stringhost,Stringpwd,Stringcommand)throwsException{jsch=newJSch();//user&hostsession=jsch.getSession(user,host);//passwordsession.setPassword(pwd);session.setUserInfo(MyUserInfo);java.util.Propertiesconfig=newjava.util.Properties();config.put("StrictHostKeyChecking","no");session.setConfig(config);session.connect();channel=session.openChannel("shell");channel.connect();//Getinputandoutputstreamreferencesin=channel.getInputStream();//out=newPrintStream(channel.getOutputStream());}
然后在A上投入命令sshusername@hostB接着password这个时候出现类似控制台的界面。然后由用户输入命令比如ls问题出来了,A与B都可以成功连接上,然后等待操作者输入命令,这时报错连接失败,在cmd命令下sshA再sshB却不会有这问题。最奇怪的是连接成功后,在内部投入命令却可以实施,我曾经试过20次“ll”都没断开ireader=newInputStreamReader(in);intintChar=ireader.read();//这里结果intChar=-1,表明连接已经丢失
但是telnet时候却没有任何问题。。。。是什么原因呢?inputStream问题?还是jsch的session.connect();channel.connect()问题望各位高手解答。
解决方案
解决方案二:
这个没见过耶。。。问个问题你这个是连数据库还是连什么?没太懂你的意思!数据库好像用工具配置好就行了
解决方案三:
帮顶
解决方案四:
引用楼主lunchstrike的帖子:
小弟最近遇到一个头疼万分的问题,修改一个程序,具体功能是先从本地连接到服务器A,然后再从A连接到B,然后再投入命令执行,比如ls。原先都是telnet连接,现在按照要求改成都是ssh2连接,先连接A,使用的是jsch-0.1.39.jar,Javacode/***sshconnect*@paramuser*@paramhost*@parampwd*@paramcommand*/publicvoidconnectSshByJsch(Stringuse…
具体功能是先从本地连接到服务器A,然后再从A连接到B,然后再投入命令执行?这个为什么要这样呢,可以简化,为什么还要再次连接到B,然后投入命令执行呢
解决方案五:
帮顶下!
解决方案六:
帮顶
解决方案七:
引用3楼yinyuan1987的回复:
引用楼主lunchstrike的帖子:小弟最近遇到一个头疼万分的问题,修改一个程序,具体功能是先从本地连接到服务器A,然后再从A连接到B,然后再投入命令执行,比如ls。原先都是telnet连接,现在按照要求改成都是ssh2连接,先连接A,使用的是jsch-0.1.39.jar,Javacode/***sshconnect*@paramuser*@paramhost*@parampwd*@paramcommand*/public…
很多用户环境不允许直连。
解决方案八:
楼主,这种问题,仅通过你的描述要找到原因可能比较复杂。如果你怀疑所使用的包有问题,你可以换一下:http://www.trilead.com/Download/Trilead_SSH_for_Java/我过去几个项目都用这个,挺好用的。
解决方案九:
今天仔细研究了一下,发现是jsch的session.java的run方法里的这段代码try{channel.write(foo,start[0],length[0]);Stringt=newString(foo,start[0],length[0]);}catch(Exceptione){try{channel.disconnect();//这里调用了disconnect方法//抛出的Exception是PipedInputStream的checkStateForReceive()方法的//if(readSide!=null&&!readSide.isAlive()){//thrownewIOException("Readenddead");}catch(Exceptionee){}break;}
对于IOException("Readenddead");有什么好的解决方法么,向各位求教
解决方案十:
补充说明:out=newPrintStream(channel.getOutputStream());
write方法里out.println(value);out.flush();//这里会走到8楼的代码里
解决方案十一:
帮顶
解决方案十二:
学习~~~~~
解决方案十三:
学习了!
解决方案十四:
ireader=newInputStreamReader(in);in这个参数能确定不是空的吗
解决方案十五:
看看,帮顶
解决方案:
逛逛
解决方案:
学习,帮顶
解决方案:
想学习串口,路过关注