Jsch执行Shell脚本 发送回车,in.available()=0

public SshTest(String host, String user, String passwd) throws Exception {

    jsch = new JSch();
    session = jsch.getSession(user, host, 22);
    session.setPassword(passwd);
    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.setConfig("userauth.gssapi-with-mic", "no");
    session.setConfig("GSSAPIAuthentication", "no");
    session.connect(15000);
    channel = (ChannelShell) session.openChannel("shell");   
    ((ChannelShell)channel).setXForwarding(false);  
    ((ChannelShell)channel).setPty(false);          
    channel.setInputStream(null);
    channel.connect(15000);
    System.out.println("ssh通道创建成功");
}
public byte[] readEcho(String cmd) throws Exception {
    System.out.println("cmd:" + cmd);
    final PrintStream pstream = new PrintStream(channel.getOutputStream(), true);
    InputStream in = channel.getInputStream();
    byte[] data = new byte[] {};
    byte[] buf=new byte[1024];
    pstream.println("\r\n");         //发送空格
    pstream.flush();
    Thread.currentThread().sleep(1000l);
      while(true){
          int count = 0;
        while((count=in.available())>0){ //卡在这里 in.available()一直都是0,
          int len=in.read(buf, 0, 1024);
          if(len<0)break;
          System.out.print(new String(buf, 0, len));
           if (data.length == 0) {
                data = Arrays.copyOf(buf, len);
            } else {
                int tlen = len + data.length;
                byte[] tmp = new byte[tlen];
                System.arraycopy(data, 0, tmp, 0, data.length);
                System.arraycopy(buf, 0, tmp, data.length, len);
                data = tmp;
            }
        }
        if(channel.isClosed()){
          if(in.available()>0) continue;
          System.out.println("exit-status: "+channel.getExitStatus());
          break;
        }
        try{Thread.sleep(count==0?1000:100);}catch(Exception ee){}
      }
      in.close();
      pstream.close();
      channel.disconnect();
      session.disconnect();
    return data;
}

1个回答

增加其为0时,break应该就可以了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用Jsch执行Shell命令
最近在写一个监控方面的项目,总结一下Jsch的特性 Jsch是JAVA的SSH客户端,使用的目的是执行远程服务器上的命令。 关于Session的使用,创建连接后这个session是一直可用的,所以不需要关闭。由Session中open的Channel在使用后应该关闭。 测试了exec的方式,具体参考jsch自带example中的Exec.java。 有两个问题: 1、无法执行多条命令,每...
java jsch执行远程命令
[code=&quot;java&quot;] /* * SSHManager * * @author cabbott * @version 1.0 */ package jsch; import com.jcraft.jsch.*; import java.io.IOException; import java.io.InputStream; import ja...
关于in.available()的疑问
InputStream in = rs.getBinaryStream(2); //获取二进制输入流rn out.print(in.available());rnrn此处rs.getBinaryStream(2)是数据库中图片存储的字段,可不知为什么in.available()显示却为零(数据库中此字段确定不为空),请大家帮忙看看,谢谢!
向上位机发送回车
小车程序加入了向上位机发送回车功能,能发距离和字符。
sendmessage 发送回车的问题
用 sendmesage向richedit发送回车键,但是在richedit上显示的是换行。rn[code=C/C++] SendMessage(hwd2, WM_KEYDOWN,VK_RETURN, NULL );rn SendMessage(hwd2, WM_KEYUP, VK_RETURN, NULL); [/code]rn而自己在richedit上按下回车 是把eichedit的内容发送出去,请问是什么原因
发送回车消息
我们这有个类似qq的及时通讯程序,是公司内网办公用的,每次启动后在电脑右下脚,想通过其他软件(dotnet c#做的)通过发送消息自动关闭它,rn不能通过杀进程的方式关闭,因为这样强行关闭后,右下脚还会有图标存在,而且由于不是正常的退出,服务器会拒绝用户再次登陆。rn我在软件里面发送了一个关闭窗体的消息,rnrn这时及时通讯程序,提示“是否退出"rn我想接着发送一个回车消息,来关闭它,但是程序运行到提示”是否退出“时,不运行,只有点击"是”或“否”程序才能运行。rn我该如何作才能实现连续发送两个消息来关闭这个程序呢?实在不行,就只有更改及时通讯程序,在退出时不用提示。这时只要发送一个关闭消息就可以正常退出了 rn大家帮帮忙想想办法,谢谢!rn这是窗口退出的rnParenthWnd = FindWindow("TChatClientForm","xxx交流平台");rnSendMessage(ParenthWnd,WM_CLOSE, IntPtr.Zero,"");rn...下面想实现发送消息关闭掉弹出的“是否”对话框.rnrnrn
shell脚本示例0
首先明确几个shell脚本变量: a. $0 代表shell 脚本名称 b. $1-n   代表传入的参数 从第一个到第n个 c. $@     代表所有参数列表 d. $*       代表所有参数列表 e. $#      代表传入参数的个数 下面学习一段代码: echo -n “Please input a username” read username # 从 /et
JSch中执行command的两种方式
准备目标登录主机信息: public class DestHost { private String host = &quot;&quot;; private String username = &quot;&quot;; private String password = &quot;&quot;; private int port = 22; private int timeout = 60 * 60 * 1000; public ...
使用JSCH连接Linux服务器(1)-执行linux命令
在java中可以使用jsch连接远程Linux服务器,并在服务器上执行传送命令,同时该jar包也可以使用ftp在服务器上上传下载文件,本节讲述如何通过该jar包传送linux命令并且执行: [code=&quot;java&quot;]package com.aliyun.utility.jsch; import java.io.InputStream; import java.util.Propertie...
利用JSch远程登录linux服务器执行指令
最近导师项目,需要搞一个web server,需要在浏览器端控制底层虚拟机部署应用。于是有两个想法。 一、虚拟机的镜像已经部署好所有的应用,这个项目下,用户需要的应用是固定的,就那么几种,所以可以考虑直接镜像上直接安装好所有的应用。当然这个方法有点蠢,太不灵活了。 二、通过编写java程序,通过ssh远程登录到虚拟机来执行命令。于是在网上找到了Jsch。下面是网上转载的简单例子:import j
jsch 执行shell启动tomcat失效,求助~
本人菜鸟程序媛一只~rn正在做一个自动化部署平台,其中包括停启tomcat,利用的就是jsch的ChannelExec执行shell脚本,但是执行就是就报:rn[color=#FF0000]Neither the JAVA_HOME nor the JRE_HOME environment variable is definedrnAt least one of these environment variable is needed to run this program[/color]。但是通过putty命令行执行就没有任何问题,可以正常启动~求帮助[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/5.gif][/img]
Java使用jsch和expect4j执行Linux命令
1.背景 最近项目上需要远程链接至Linxu服务器执行语句,所以自己研究了下,找到了几个开源框架,并且稍微封装了一个Util类,供大家参考。 2.准备工作 Pom文件引入依赖 ​&lt;dependency&gt; &lt;groupId&gt;com.jcraft&lt;/groupId&gt; &lt;artifactId&gt;...
JSch远程执行脚本启动tomcat报错
    之前项目当中有一个远程执行脚本的功能,突然这几天测试说不好用了,用远程脚本启动tomcat启动不起来但是直接在环境上跑是可以的,我看了一下发现是脚本有问题,在远程执行脚本的时候报了一个这样的错:/usr/local/tomcat/apache-tomcat-8.5.15/bin:/usr/local/tomcat/apache-tomcat-8.5.15/bin:+/usr/local/s...
angular 回车事件(回车发送,回车加ctrl 换行)
$scope.inputKeyUp = function (event) { var keycode = window.event?event.keyCode:event.which; console.log(keycode,"keycode"); if(event.ctrlKey && event.keyCode==13) {
textbox 回车执行事件
在textbox回车执行服务器端的事件
JSch简介以及jsch实现文件上传下载
一、JSch 简介 JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器。 二、java利用jcraft实现文件上传与下载 第一步:这里使用maven管理项目,所以需要引入maven支持,添加maven依赖<!-
jsch教程
有很多基于SSH协议的客户端,例如:PuTTY、OpenSSH、Xshell 4等,可以远程连接几乎所有UNIX平台。 同时,可以通过Linux命令行ssh uername@host连接到某主机。有时候我们需要通过web界面执行相应的脚本,这是后可以 通过jsch框架来实现
php执行shell脚本的问题
脚本命令:/home/center/wuchuan/web/get_user_bandwidth.sh 13669426412 rn直接在系统上是可以显示结果rn但是在php使用shell_exec没有结果返回,使用exec执行状态返回1rn求解啊rnrn脚本是用tcl写的,使用了数据库查询rn/home/center% /home/center/wuchuan/web/get_user_bandwidth.sh 13669426412 rn2M@0
android模拟器执行shell脚本
shell脚本内容如下:rn #/system/bin/ rnmount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /systemrncat /data/mydata/Manager.apk >/system/app/Manager.apkrnrn执行第一条命令时,报错没有目录rn第二条命令,可以执行,但是只是将Manager.apk复制到/system/app下,并没有安装在模拟器上。rn我在adb shell命令行模式下,一次执行了上两条语句都没有问题,而且Manager.apk可作为系统程序安装。rn求高人指点!!!
java执行shell脚本报错
在web项目中调用的一个验证域名和ip的shell脚本,rnrnshell是rn[code=Assembly]for x in `seq 1 50`;do echo $x;nslookup " + name + "-www$x.cdnmgmt.tudou.com|grep Address|grep -v '#53'; done[/code]rnrn错误如下:rnCannot run program "/bin/sh": java.io.IOException: error=12, Cannot allocate memoryrnrn代码如下:rn[code=Java]rnpublic Map runShell(String shStr, String name) throws Exception rn Map hiMap = new HashMap();rn Process process;rn process = Runtime.getRuntime().exec(new String[] "/bin/sh", "-c", shStr , null, null);rn InputStreamReader ir = new InputStreamReader(process.getInputStream());rn LineNumberReader input = new LineNumberReader(ir);rn String line;rn process.waitFor();rn String num = "";rn while ((line = input.readLine()) != null) rn hiMap.put(name + "-www" + num, line.substring(9, line.length()));rn num = line;rn rn return hiMap;rn [/code]rnrn网上查到说是java的bug,升级到1.7就可以了。整个环境都要变,这个不太可能。有没有别的办法?rnrn
shell脚本每隔几秒执行
whiletrue do cmd(shell 命令) sleep x(x为秒数) done
linux 如何执行shell脚本
   很多跨平台软件一般都会有.sh的脚本,例如tomcat就有.bat和.sh两个脚本命令,windows下只要双击.bat命令就可以了,在linux下需要进入到.sh脚本的目录,然后输入./demo.sh就运行了该脚本。...
shell脚本的执行方法
shell脚本有两种执行方法,这两种执行方法又分为全路径下执行和当前路径下执行,   shell脚本在企业使用非常频繁,要想找到一份好的互联网企业或者软件行业工作,shell基础知识是必不可少的,这首先需要我们如何写出第一个hello world,以及去运行改程序工具/原料linux虚拟机CRT或者其它连接linux服务器的软件方法/步骤使用CRT软件登录到linux虚拟机,使用pwd命令查看当前...
获取shell脚本执行的绝对路径
脚本当中可能需要获取当前脚本执行的一个绝对路径,脚本当中的获取方式如下work_path=$(cd `dirname $0`; pwd)work_path即为脚本执行的绝对路径
怎样自动执行shell脚本?
怎样用户一登录系统就执行shell脚本或定时执行shell脚本?(Solaris 操作系统)
shell脚本无法执行的问题
在windows上新建了一个a.sh的文件,并写好了shell脚本,然后利用Mobaxterm将该文件上传到服务器。在执行脚本的过程中,提出错误,反复检查是不是shell脚本写错了,后面有检查是否存在逻辑错误,均无果。 最后在linux服务器上新建了一个a2.sh脚本,并把a.sh脚本的内容原封不动的拷贝到a2.sh,脚本正常执行。 原因:由于在windows下用的是notepad++工具编写...
执行shell脚本的四种方法
./test.sh: #!/bin/bash echo "http://c.biancheng.net/shell/" 赋予脚本可执行权限: $ cd demo #切换到 test.sh 所在的目录 $ chmod +x ./test.sh #使脚本具有执行权限 $ ./test.sh #执行脚本 使用 . : $ . ./test.sh http://c...
shell脚本:简单的执行跟踪
如果我们想要知道我们的程序正在做什么,我们可以把执行跟踪(execution tracing)的功能打开。这会使得shell显示被执行到的命令,并在前面加上“+”:一个加号后面跟着一个空格 sh -x finduser 就是打开执行跟踪功能 后面 + 的就是被跟踪的命令 后面是实际输出我们也可以在脚本里面输入命令set -x命令将执行跟踪的功能打开,然后再用set +x命令关闭它,这
Linux执行Shell脚本问题
在Windows系统上编写了Shell脚本,运行的时候出现问题: root@orangepione:/mnt/nfs_server/orangePi# ./backup.sh bash: ./backup.sh: /bin/bash^M: bad interpreter: No such file or directory 从错误的意思上貌似是:/bin/bash执行的时候遇到了^M字符,这
Android执行shell脚本出错
在学习脚本过程中遇到这个问题: 我在Ubuntu上执行脚本: #!/bin/bash for ((i=0; i do echo $i done 然后执行: $sh loop.sh 可以得到正常的输出结果。 现在将该脚本push到手机中,当然要做修改如下: #!/system/bin/bash for ((i=0; i do echo $i done
shell脚本执行方式
shell脚本执行方式
安卓shell脚本执行报错。
连接上安卓电视,abd shell进入shell模式。rn1、在命令行中输入如下命令,几条语句都可以正常执行,输出结果到mem.log中:rnecho "time PID Vss Rss Pss Uss cmdline">>mem.logrnvar=`date +%H:%M:%S`rnecho -n $var >>mem.logrnprocrank |grep mango >>mem.logrnrn2、将上述命令写成test.sh文件:rn#!/system/bin/shrnecho "time PID Vss Rss Pss Uss cmdline">>mem.logrnvar=`date +%H:%M:%S`rnecho -n $var >>mem.logrnprocrank |grep mango >>mem.logrnrn3、+执行权限,然后用/system/bin/sh test.sh执行脚本。rn结果只有procrank |grep mango >>mem.log语句正常执行了。rn其他语句报错《: Invalid argumentcreate mem.log》rn求大神指点下如何解决?
shell脚本的定义与执行
GTK+是当下流行的图形界面库之一,使用GTK+可以方便地构造出应用程序界面。<br />n学完本章能掌握什么:<br /><span> </span>GTK+是图形界面库,能帮助我们简洁方便地绘制窗口和里面的输入框、按钮等等,同时,GTK+可以配合界面设计器Glade,换句话说,做界面不用敲冗长的代码,界面可以轻易画出来。<br /><br />
回车 执行button点击
功能说明:当我们注册或者执行搜索时,输入内容后,不用单击按钮来执行按钮单击事件,而直接通过回车来执行按钮单击事件。只要在text框中onkeydown事件中加入执行按钮的onclick事件就OK了 代码如下: [code=&quot;javascript&quot;] 验证码 function check(){ if(event.keyCode...
回车执行单击问题
在textBox中按回车执行一BUTTON 单击命令rn写如下代码怎么不执行?rn rnrnrn454rn
回车执行Tab功能
我在程序中写有10个JTextField控件,现在我想通过按下回车键,实现光标直接跳转到下一个控件的功能(就和按下Tab的功能一样),但是在java的KeyPress事件响应中不知道应该如何实现,我将我的一部分程序发上来,希望高人能够给我一个代码的说明.我希望有人能够拿走这80分rnrnrnimport java.awt.event.KeyEvent;rnimport java.awt.event.KeyListener;rnimport javax.swing.JPanel;rnimport javax.swing.JTextField;rnrnpublic class keyevent extends JPanel implements KeyListener rnrn JTextField b[]=new JTextField[10];rn keyevent()rn rn for(int i=0;i<=9;i++)rn rn b[i]=new JTextField(""+i);rn b[i].addKeyListener(this);rn add(b[i]);rn rn rn rn public void keyPressed(KeyEvent e)rn public void keyTyped(KeyEvent e)rn public void keyReleased(KeyEvent e)rn
22 shell脚本执行方式
1、echo 命令 1.1、普通输出:echo "you are  niubi" 1.2、将特殊符号当字符串处理就用单引号:echo 'you are \n niubi!!!' 1.3、-e可以转移反斜线:echo   -e "you are \n牛逼"  1.4、echo输出颜色:echo -e "\e[1;31m   abcd \e[0m"    //这样就输出abcd为红色的了,‘a
notepad++执行shell脚本设置
1、下载mingw,解压到无空格路径 2、打开Notepad,选择  运行->运行  cmd /k D:\dev_tool\linux\MinGW\msys\1.0\bin\bash.exe "$(CURRENT_DIRECTORY)\$(NAME_PART).sh" & PAUSE & EXIT 将其中路径换成自己的路径 3、保存,设置快捷键,运行 注意:$(NAME_PA
关于php执行shell脚本
未完,待续……
nodejs在Windows下执行shell脚本
Windows自动执行shell脚本
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池