我有以下代码适用于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
答案 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
,因为它没有setCommand
或exec
方法
答案 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
包含发送和接收文件,获取文件列表等功能。您不必访问频道的输入或输出流。