gpt4 book ai didi

java - 当我在java中运行sshpass命令时找不到它

转载 作者:行者123 更新时间:2023-11-30 01:49:44 30 4
gpt4 key购买 nike

我正在尝试运行一个命令来从远程地址内的文件中读取字符串(并且我确定该文件在那里),当我在 bash 上运行该命令时该命令有效,但在以下情况下它不起作用我在我的 java 代码中运行它。

    Runtime rt = Runtime.getRuntime();
String[] command;
String line;

try {
command = new String[] {"sh", "-c", "\"sshpass " + "-p " + password + " ssh " + user + "@" + ip + " 'cat " + file.getAbsolutePath() + "'\"" };

Process mountProcess = rt.exec(command);

mountProcess.waitFor();

bufferedReader = new BufferedReader(new InputStreamReader(mountProcess.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
user_list.put(user, line);
}
bufferedReader.close();

bufferedReader = new BufferedReader(new InputStreamReader(mountProcess.getErrorStream()));
while ((line = bufferedReader.readLine()) != null) {
LOGGER.debug("Stderr: " + line);
}
bufferedReader.close();
} catch ...

没有行添加到我的 user_list(因此 getInputStream 中的行为空),并且我从代码中的记录器收到以下错误:

Stderr: sh: 1: sshpass: not found

如果我在 bash 上使用完全相同的命令,它就会工作并打印我需要的字符串。

sshpass -p password ssh remote@192.168.1.10 'cat /home/ID/ID'

谁知道为什么会发生这种情况?谢谢!

最佳答案

我建议您不需要使用 sh 来包装您的命令。尝试一下

command = new String[] {"sshpass", "-p", password, "ssh", user + "@" + ip, "cat " + file.getAbsolutePath() };
<小时/>

如果您需要使用 sh,请从命令字符串中删除转义的双引号:您将它们作为文字字符发送:

command = new String[] {
"sh",
"-c",
String.format("sshpass -p %s ssh %s@%s 'cat %s'", password, user, ip, file.getAbsolutionPath())
};

如果您仍然收到“找不到命令”的消息,那么您需要指定 sshpass 的完整路径,或者确保其目录位于您的 PATH 中.

关于java - 当我在java中运行sshpass命令时找不到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483047/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com