从FTP转换为SFTP

时间:2013-10-03 12:15:02

标签: java

我有以下代码适用于FTP。如何使其适用于SFTP

((ChannelExec) channel).setCommand(cmd);
channel.setXForwarding(true);
channel.setInputStream(System.in);
InputStream in=channel.getInputStream();
channel.connect();
return in;

我知道我需要使用ChannelSftp而不是Channel类,但是我在setcommand行中遇到了类型转换错误。 无法将ChannelSftp类型转换为ChannelExec

2 个答案:

答案 0 :(得分:1)

首先要了解的是SFTP与FTP或FTP / s不同。 SFTP使用SSH,而FTP / s使用SSL。

话虽如此,JSCH提供了一种非常直接的方式来使用SFTP,包括设置X转发。看一下examples以及来自mabbas的linked question

根据您的评论,您似乎确实需要调用/执行远程shell,请尝试以下操作以查看它是否能满足您的需求:

//connect to the remote shell
Channel channel=session.openChannel("shell");
((ChannelShell)channel).setAgentForwarding(true);
channel.setInputStream(System.in); //Send commands here
channel.setOutputStream(System.out); //output responses here      
channel.connect();

您将无法使用ChannelSftp,因为它没有setCommandexec方法

答案 1 :(得分:0)

如果你正在使用JSCH,他们有several example programs来说明如何使用这个库。 The SFTP client example说明了如何打开SFTP会话。

Session session=jsch.getSession(user, host, port);
...
session.connect();

Channel channel=session.openChannel("sftp");
channel.connect();
ChannelSftp c=(ChannelSftp)channel;

这就是你要做的一切。 ChannelSftp包含发送和接收文件,获取文件列表等功能。您不必访问频道的输入或输出流。