【问题标题】:I am getting error while executing sh file by using java code.. sudo: no tty present and no askpass program specified使用 java 代码执行 sh 文件时出现错误.. sudo: no tty present and no askpass program specified
【发布时间】:2017-09-22 08:05:59
【问题描述】:

使用 java 代码执行 sh 文件时出现错误。从终端,它工作正常

sudo:不存在 tty,也没有指定 askpass 程序

我的代码:-

package com.test;

import java.io.IOException;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;

public class TestScript {

        int iExitValue;
        String sCommandString;

        public void runScript(String command){
            sCommandString = command;
            CommandLine oCmdLine = CommandLine.parse(sCommandString);
            DefaultExecutor oDefaultExecutor = new DefaultExecutor();
            oDefaultExecutor.setExitValue(0);
            try {
                iExitValue = oDefaultExecutor.execute(oCmdLine);
            } catch (ExecuteException e) {
                System.err.println("Execution failed.");
                e.printStackTrace();
            } catch (IOException e) {
                System.err.println("permission denied.");
                e.printStackTrace();
            }
        }

        public static void main(String args[]){
            TestScript testScript = new TestScript();
            testScript.runScript("sh /home/FTP-SCP-Project/shellscript.sh");
        }
    }

sh 文件:-

sudo scp -i /home/FTP-SCP-Project/src/lib/demo.pem -r /home/FTP-SCP-Project/test-output3 user@xx.xxx.xx.xxx:/var/www/html/projects/demo_reports/reporttest112

我也尝试了所有其他 java 代码,但是当我给他们所有权限时,他们给出了错误,比如 chmod 777 或 755 或 600

    String Pemfilepath="/home/shubham/Experiment_zone/FTP-SCP-Project/src/lib/cuelogic.pem";
    String targetFolder = "/home/shubham/Experiment_zone/FTP-SCP-Project/test-output3";
    String[] command = { "sudo scp -i "+Pemfilepath+" -r "+targetFolder+" "+"ubuntu@54.152.13.148:/var/www/html/projects/kumo_reports/reporttest1"};   
//    String command = "ls";
    System.out.println(command[0]);
    Process process = Runtime.getRuntime().exec(new String[] { "sudo ", "scp ", "-i " ,Pemfilepath," ", "-r"," ",targetFolder," ","user@xx.xxx.xx.xxx:/var/www/html/projects/demo_reports/reporttest1" });                 
    BufferedReader reader = new BufferedReader(new InputStreamReader(         
        process.getInputStream()));                                          
    String s;                                                                
    while ((s = reader.readLine()) != null) {                                
      System.out.println("Script output: " + s);                             
    }  

但他们也给出了如下错误:-

线程“主”java.io.IOException 中的异常:无法运行程序 “sudo”:错误=2,没有这样的文件或目录 java.lang.ProcessBuilder.start(ProcessBuilder.java:1047) 在 java.lang.Runtime.exec(Runtime.java:617) 在 java.lang.Runtime.exec(Runtime.java:485) 在 com.test.shelllocallaunch.main(shelllocallaunch.java:14) 原因: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(本机方法)在 java.lang.UNIXProcess.(UNIXProcess.java:187) 在 java.lang.ProcessImpl.start(ProcessImpl.java:130) 在 java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) ... 3 更多

我观察到,如果命令像 ls 一样小,一切都很好,但我上面的命令在终端正常工作时没有执行。 如果我遗漏了什么,请帮忙

【问题讨论】:

标签: java shell sh


【解决方案1】:

"echo "+pass+" | "+"sudo -S为我工作

我的完整代码如下所示:-

String pass = "\"Yourpassword\"";
                out.println("echo "+pass+" | "+"sudo -S scp -i "+Pemfilepath+" -r "+targetFolder+" "+"user@xx.xxx.xx.xxx:/var/www/html/projects/demoproject");

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 2018-07-10
    • 2015-07-10
    • 2019-09-08
    • 1970-01-01
    • 2016-02-08
    • 2021-08-28
    • 1970-01-01
    相关资源
    最近更新 更多