如何在java中使用Jsch切换到root用户执行命令?

时间:2017-07-18 10:37:00

标签: java ssh jsch

我正在尝试通过使用私钥建立的ssh连接执行一组命令。为此我在java中使用了JSCh和Session类。

以下是代码:

java.util.Properties config = new java.util.Properties();

         String privateKeyPath = conn.getsshArg().getKeyPath();

        config.put("StrictHostKeyChecking", "no");
        JSch jsch = new JSch();

        jsch.addIdentity(privateKeyPath); //

        Session session = jsch.getSession(conn.getsshArg().getUsername(), conn.getVmIpaddress(), 22);
        session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password"); //

        System.out.println("User:" + conn.getsshArg().getUsername() + "Password" + conn.getsshArg().getPassword()
                + "IP:" + conn.getVmIpaddress() + " Port:" + 22);
        session.setPassword(conn.getsshArg().getPassword());
        System.out.println("Command to be fired:" + conn.getsshArg().getCommand());
        session.setConfig(config);
        //session.setTimeout(150);
        session.connect();
        if (session.isConnected()) {
            // LogManager.getLogger().info("VNFLCM: Ssh on the VNF
            // successfull");
            System.out.println("SSH successful");

        } else {
            System.out.println("SSH Connection Failure ");
            return ret;
        }

        Channel channel = session.openChannel("exec");
        String command = conn.getsshArg().getCommand().replace("&curlStart;", "{");
        command = command.replaceAll("&curlEnd;", "}");
        command = command.replaceAll("&jsonQuot;", "\"");
        ((ChannelExec) channel).setCommand(command);
        //channel.setInputStream(null);
        ((ChannelExec) channel).setErrStream(System.err);

        InputStream in = channel.getInputStream();
        channel.connect();

        byte[] tmp = new byte[1024];
        String line = "";

        while(true){
            while(in.available()>0){
                int i=in.read(tmp, 0, 1024);
                if(i<0)break;
                //LogManager.getLogger().debug(new String(tmp, 0, i));
                line=new String(tmp, 0, i);
                System.out.print(line);

            }
            if(channel.isClosed()){
                //LogManager.getLogger().debug("exit-status: "+channel.getExitStatus());
                System.out.println("exit-status: "+channel.getExitStatus());
                break;
            }
            ret = true;
            try{Thread.sleep(5000);}catch(Exception ee){}
        }

        channel.disconnect();
        session.disconnect();
    }

    catch (Exception e) {
        e.printStackTrace();
    }

我尝试使用root用户登录我的节点,但是使用fedora而不是root提示ssh。

我尝试了链接中提供的解决方案:Java JSch changing user on remote machine and execute command,但是使用了su -c&#34;命令&#34;提示输入密码。在这里,我的实例没有任何密码。

所有命令都只需要使用root用户执行。

请注意:在这里,我正在尝试使用私钥ssh。

如果有人能帮助我,我将不胜感激。

0 个答案:

没有答案