开发者社区> 问答> 正文

java ssh登录windows执行命令报错?报错

@Holiday_ 你好,想跟你请教个问题:

远程服务器是windows,我也正确安装开启了ssh服务,我本地用客户端putty可以连接上,但是我本地用java也可以创建session,但是下面执行一个命令就会报错session.execCommand("cmd.exe /c \"ipconfig\"");

java.io.IOException: The execute request failed.
    at ch.ethz.ssh2.channel.ChannelManager.requestExecCommand(ChannelManager.java:703)
    at ch.ethz.ssh2.Session.execCommand(Session.java:249)
    at com.tekview.apex.nms.nbu.TestRemoteConnect.main(TestRemoteConnect.java:32)
Caused by: java.io.IOException: This SSH2 channel is not open (The connection is being shutdown)
    at ch.ethz.ssh2.channel.ChannelManager.waitForChannelSuccessOrFailure(ChannelManager.java:174)
    at ch.ethz.ssh2.channel.ChannelManager.requestExecCommand(ChannelManager.java:699)
    ... 2 more

展开
收起
爱吃鱼的程序员 2020-06-10 09:56:39 1380 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你好!在windows系统的远程服务器中,SSH服务我采用的密码认证的方式,使用密码连接后,我打开会话执行了 session.execCommand("ipconfig");然后得到了输出结果。


    回复 @freedom2011:可以给你的,但是我感觉你应该不是代码的问题,是不是你设置的认证方式的问题?你可以先设置成密码认证方式来测试是否可以,成功之后你在尝试秘钥的方式。我用了session.execCommand("ipconfig");还是报错可以把你的样例给我吗?我也使用了这个 session.execCommand("ipconfig");也是一样的错误 publicvoidconn()
      {
        StringhostName="192.168.100.***";
        intport=22;
        StringuserName="Administrator";
        StringpassWord="highgo";
        Connectionconn=null;
        Sessionsess=null;
        try
        {
          conn=newConnection(hostName,port);
          conn.connect();
          conn.authenticateWithPassword(userName,passWord);
          logger.info("登录成功啦");
          if(conn!=null)
          {      
            sess=conn.openSession();
            logger.info(sess.toString());
            Stringcommand="ipconfig";
            sess.execCommand(command);
            logger.info("executecmd="+command);
            InputStreamstdout=newStreamGobbler(sess.getStdout());
            BufferedReaderbr=newBufferedReader(newInputStreamReader(stdout));
            while(true)
            {
              Stringline=br.readLine();
              if(line==null)
              {
                break;
              }
              logger.info(line);
            }
            IntegerexecResult=sess.getExitStatus();
            logger.info(execResult);
            logger.info(execResult==null?"执行结果:Null":(execResult.intValue()==0?"执行结果:成功":"执行结果:失败"));
          }
        }catch(IOExceptione)
        {
          logger.error(e);
          e.printStackTrace();
        }finally
        {
          if(sess!=null)
          {
            sess.close();
          }
          if(conn!=null)
          {
            conn.close();
          }
        }
      }

    Stringhostname="192.168.0.80";
      intport=22;
      Stringusername="Administrator";
      Stringpassword="nihao";
      //指明连接主机的IP地址
      Connectionconn=newConnection(hostname,port);
      Sessionssh=null;
      try{
       //连接到主机
       conn.connect();
       //使用用户名和密码校验
       booleanisconn=conn.authenticateWithPassword(username,password);
       if(!isconn){
        System.out.println("用户名称或者是密码不正确");
       }else{
        System.out.println("OK");
        ssh=conn.openSession();
        ssh.execCommand("ipconfig");
        //将Terminal屏幕上的文字全部打印出来
        InputStreamis=newStreamGobbler(ssh.getStdout());
        BufferedReaderbrs=newBufferedReader(newInputStreamReader(is));
        while(true){
         Stringline=brs.readLine();
         if(line==null){
          break;
         }
         System.out.println(line);
        }
       }
      }catch(Throwablee){
       e.printStackTrace();
      }finally{
       ssh.close();
       conn.close();
      }

    基本和你一样,但是还是报错

    freessh安装的环境是64位windows,客户端工具xshell都连不上

    换成32位windows,安装freessh,是可以运行以上代码的网友们,该问题已解决!以上代码没问题,只要配好ssh服务即可。你好,我也遇到了同样的问题,请问如何解决的,多谢
    2020-06-10 09:56:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何通过 Serverless 提高 Java 微服务治理效 立即下载
TAKING WINDOWS 10 KERNEL 立即下载
ECS运维指南之Windows系统诊断 立即下载