我正在连接到远程服务器SSH服务器,并尝试获取特定路径中的文件列表,我能够获取该路径中的文件列表,但是它们的格式不可读,可以有人帮忙吗
String host="xxxxx.yyyy.com";
String user="user";
String password="password";
String command1="dzdo su - lucy";
try{
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
Channel channel=session.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);
channel.connect();
ps.println(command1);
ps.println("ls -ltr");
InputStream in=channel.getInputStream();
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
channel.disconnect();
session.disconnect();
System.out.println("DONE");
这是控制台输出
drwxrws---. 2 gleaiid gleai 4096 Jan 21 2016 [0m[01;34mold[0m
-rwxrws---. 1 jhon gleai 100 Jul 20 2017 [30;43mNVISAP_814_Test.txt[0m
-rwxrws---. 1 jhon gleai 134 Jul 20 2017 [30;43mUS_NISC14_4164556_Test.txt[0m
-rwxrws---. 1 jhon gleai 0 Jul 20 2017 [30;43mNVISAP_R00814_Test.trg[0m
这些是ANSI转义码,通常由终端客户端解释以漂亮地[彩色]打印输出。
如果服务器配置正确,则只有在使用交互式终端时才能获得这些信息。换句话说,如果您为会话请求了伪终端(如果要使会话自动化,则不应该这样做)。
如果使用了“ shell”通道,那么JSch会自动请求伪终端,因为该通道应该用于实现交互式终端。
如果自动执行远程命令,则最好使用“ exec”通道,如JSch Exec.java
example所示。
另外,您可以通过调用阻止JSch请求伪终端setPty
。但是我不建议使用“ shell”通道。尽管无论出于何种原因您都需要致电setPty(false)
,但无论如何都应致电,因为这样可以避免许多其他类似的麻烦。实际上,我已经在上一个问题中向您建议了这一点。
其他说明:尽管我了解OP为什么使用ls
命令,但通常来说,应该使用SFTP
API来检索目录列表
,而不是执行ls
和解析其输出。解析ls
输出是一种非常不可靠的方法。
问题内容: 我有以下代码: 试图从阅读器中读取内容已挂起。我该如何解决?我该如何寻找正在发生的事情? 问题答案: 在等待命令完成的同时,必须连续读取输出。否则,如果命令产生足够的输出以填充输出缓冲区,则该命令将挂起,等待缓冲区被消耗,这将永远不会发生。这样您就陷入僵局。 以下示例在监视命令状态的同时连续读取stdout和stderr。它基于官方的JSch 示例 (仅添加了stderr的阅读)。 如
问题内容: 我正在使用JSCH -SSH库在“ shell”通道中执行命令,但找不到找到两种方法的方法: 1)如何查找命令是否在远程unix box上完全执行? 2)如何在String中捕获命令输出,而不是在System.out控制台上打印它? 下面是我的代码片段,可以在system.out上显示shell命令输出 注意:我不想使用“ exec”通道,因为它为每个命令启动一个新进程,并且不记得已导
问题内容: 我正在尝试使用来自Python的SSH从服务器读取文件。我正在使用Paramiko进行连接。我可以连接到服务器并运行类似的命令,然后从服务器获取数据,但是我尝试读取的某些文件的大小约为1 GB或更大。 如何使用Python在服务器上逐行读取文件? 附加信息:通常要做的是运行命令并将结果存储在变量中并加以解决。但是由于这里的文件很大,我正在寻找一种从服务器逐行读取文件的方法。 编辑:我可
问题内容: 我正在尝试通过jSch0.1.49库连接在Unix服务器上运行命令。我浏览了jSch甚至http://sourceforge.net/apps/mediawiki/jsch/index.php?title=Official_examples提供的示例 我能够从服务器读取响应并将其打印到控制台,但循环* 永无止境 * g。我怀疑为什么Channele一旦完成从服务器读取响应就没有关闭。
我正在尝试使用S3中的pyspark读取文件,并出现以下错误-- 我的代码很简单,但我可以使用BOTO3连接,但我需要使用pyspark,因为我正在处理的文件很大,还需要在CSV上进行一些聚合- java版本- python- Pypark/火花- 如果需要更多信息,请告诉我。
我想在Java使用JNA调用Linux mount命令,并从调用结果填充一个装入点列表,但无法理解接口方法的实际返回类型应该是什么。 如果我使用int,那么它将没有任何错误地打印-1。我认为这是某种错误的迹象。 } 我尝试使用基于以下文档的不同返回类型,但没有任何工作。 默认类型映射 我想我的问题是基于错误的签名 我的库有时会导致VM崩溃:仔细检查导致崩溃的方法的签名,以确保所有参数的大小和类型都