0

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

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

我知道我需要使用 ChannelSftp 而不是 Channel 类,但是在 set 命令行中出现类型转换错误。无法将类型 ChannelSftp 转换为 ChannelExec

4

2 回答 2

1

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

话虽如此,JSCH 提供了一种非常直接的方式来使用 SFTP,包括设置 X 转发。查看示例以及来自 mabbas的链接问题。

根据您的评论,您似乎确实希望调用/执行远程外壳程序,请尝试以下操作以查看它是否会满足您的需求:

//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,因为它没有setCommandorexec方法

于 2013-10-03T12:27:54.260 回答
0

如果您使用 JSCH,他们有几个示例程序来说明如何使用该库。SFTP 客户端示例说明了如何打开 SFTP 会话。

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

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

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

于 2013-10-03T14:04:02.863 回答