我正在连接到远程服务器 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 转义码 https://en.wikipedia.org/wiki/ANSI_escape_code通常由终端客户端解释以漂亮的[颜色]打印输出。
如果服务器配置正确,则只有在使用交互式终端时才能获得这些信息。换句话说,如果您请求伪终端 https://en.wikipedia.org/wiki/Pseudoterminal对于会话(如果您要自动化会话,则不应该这样做)。
如果您使用“shell”通道,JSch 会自动请求伪终端,因为它应该用于实现交互式终端。
如果您自动执行远程命令,则最好使用“exec”通道,如下所示JSch Exec.java example http://www.jcraft.com/jsch/examples/Exec.java.html.
或者,您可以通过调用来阻止 JSch 请求伪终端setPty https://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/ChannelShell.html#setPty-boolean-。但我不建议使用“shell”通道。不过,如果您需要,无论出于何种原因,您都应该致电setPty(false)
无论如何,因为这将防止许多其他类似的麻烦。我实际上已经向你推荐了你之前的问题 https://stackoverflow.com/q/52644221/850848.
其他人注意:虽然我明白为什么OP使用ls
命令,一般情况下应该使用use用于检索目录列表的 SFTP API https://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/ChannelSftp.html#ls-java.lang.String-,而不是执行ls
并解析其输出。解析ls
输出是一种非常不可靠的方法。
相关问题:
- 从 JSch 中的命令输出中删除 shell 内容(如提示) https://stackoverflow.com/q/40142559/850848
- 有没有一种简单的方法可以消除使用 Python 的 Paramiko 库进行 SSH 并从远程计算机的 CLI 获取输出时出现的垃圾值? https://stackoverflow.com/q/33291631/850848
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)