gpt4 book ai didi

java - JSch:ByteArrayInputStream:如何检查最终结果

转载 作者:行者123 更新时间:2023-12-01 11:22:03 25 4
gpt4 key购买 nike

我将使用 Jsch ssh 到另一台服务器
并检查路径是否存在

但是我发现baos.toString()
将在终端上打印出所有结果:

test -d /root/bin/python || echo python not found
test -d /root/bin/java || echo java not found
test -d Desktop || echo java not found
[root@s1 ~]# test -d /root/bin/python || echo python not found
[root@s1 ~]# test -d /root/bin/java || echo java not found

所以它总是返回 false :

if (baos.toString().contains("not found")){
return false;
}

代码:

    String command = null;           
command = String.format("test -d %s || echo python not found\n"
+ "test -d %s || echo java not found\n",python,java);
try{
JSch jsch = new JSch();
jsch.addIdentity("/Users/.ssh/id_rsa");

Session session = jsch.getSession("root", IP, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.connect(10*1000);
Channel channel = session.openChannel("shell");
InputStream is = new ByteArrayInputStream(command.getBytes());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
channel.setInputStream(is);
channel.setOutputStream(baos);
channel.connect(15 * 1000);
Thread.sleep(3*1000);
channel.disconnect();
session.disconnect();
logger.debug(baos.toString());
if (baos.toString().contains("not found")){
return false;
}
}catch (DataAccessException e) {
e.printStackTrace();
return false;
}
return true;

请帮助我

最佳答案

显然,Jsch 回显输入的方式与真实 ssh session 的方式大致相同。您可以通过更改回显的字符串来解决此问题。

例如,而不是

echo java not found

使用

echo not found java
为什么?因为这样“未找到”一词将成为该行的第一个,而不是回显的输入行。所以你现在可以稍微改变你的匹配:

 if (baos.toString().contains("\nnot found")){
return false;
}

请注意 \n 字符。如果“未找到”出现在输出中行的开头(换行符之后),则将找到它并返回 false。如果它没有出现在行首,则不会被找到。

您可能想查看 jcabi-ssh library它封装了 jsch,并且更容易使用。

关于java - JSch:ByteArrayInputStream:如何检查最终结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116388/

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