如何使用JSch API发送UNIX ftp命令?

时间:2015-09-23 19:06:49

标签: java unix ftp jsch

我需要发送以下ftp命令

%   ftp test.cs.xxxx.edu  
Connected to test.cs.xxxx.edu.  
220 test FTP server (Version 5.53 ........) ready.  
Name (test.cs.xxxx.edu:yourlogin): yourlogin  
331 Password required for yourlogin.  
Password:  
230 User yourlogin logged in.  
ftp> cd HPSC/exercises  
ftp> get JHFLKDHLFKD.zip 

我尝试按如下方式发送这些命令

JSch jsch = new JSch();       

Session session_1 = jsch.getSession("user1", "host1", 22); 
session_1.setConfig("StrictHostKeyChecking", "no");
session_1.setPassword("pass1"); 
session_1.connect();
System.out.println("The session 1  has been established");

ChannelExec exec = (ChannelExec)session_1.openChannel("exec");

exec.connect(); 
exec.setCommand("ftp test.cs.xxxx.edu"); 
exec.setCommand("user2"); 
exec.setCommand("pass2"); 
exec.setCommand("cd \test\test\test"); 
exec.setCommand("get JHFLKDHLFKD.zip");  

但那没用。我也试过" shell"。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您要发送的命令是ftp进程的命令。这些不是远程shell可以理解的命令。

唯一真正的命令是ftp。其余部分必须输入到已启动的过程到其标准输入。使用setInputStream method提供输入。

无论如何,您应该更好地使用本机FTP客户端,而不是在服务器端启动命令行客户端,正如我之前建议的那样:
How to connect to an FTP server from an existing connection to Unix server?

答案 1 :(得分:0)

您正在尝试使用SFTP客户端库与FTP服务器进行通信。

尽管名称和用途相似,但FTP和SFTP是完全不同的协议。看到 Differences between SFTP and "FTP over SSH"

您需要更改服务器或客户端,以便它们匹配。