我将使用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;
请帮帮我
答案 0 :(得分:1)
显然,Jsch以与真正的ssh会话相同的方式回应输入。您可以通过更改回显的字符串来解决此问题。
例如,而不是
echo java not found
使用
echo not found java
为什么呢?因为那时单词“not found”将是第一行,而不是回显的输入行。所以你现在可以稍微改变你的比赛:
if (baos.toString().contains("\nnot found")){
return false;
}
请注意\n
字符。如果“未找到”出现在输出中的一行的开头(在换行符之后),则会找到它并返回false
。如果它没有出现在一行的开头,则无法找到它。
您可能希望查看围绕jsch的{{3}},并且更容易使用。
答案 1 :(得分:0)
使用java.io.File
课程。类似下面的功能应该有所帮助:
import java.io.File;
private boolean doesFileExist(String fileName)
{
File f = new File(fileName);
return f.exists();
}
在这种情况下,您的文件名为/root/workspace/file1
或/root/workspace/file2