如何在java中通过SFTP传输文件?我想要SFTP客户端的示例代码.我想在我的应用程序中嵌入SFTP服务器,客户端应该能够将文件发送到我的应用程序.
PS:这是SFTP客户端的要求.而这个问题并不是其他两个问题的重复.
我在解决如何使用Apache Mina时遇到了一些麻烦.他们的文档对于我无能为力的大脑来说有点不足.我在Java SFTP服务器库中看到了有用的起始代码 ?
我无法弄清楚的是如何使用它.我想设置一个单元测试来检查我的sftp代码,使用Mina作为一种模拟服务器,即能够编写单元测试,如:
@Before
public void beforeTestSetup() {
sshd = SshServer.setUpDefaultServer();
sshd.setPort(22);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));
List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
userAuthFactories.add(new UserAuthNone.Factory());
sshd.setUserAuthFactories(userAuthFactories);
sshd.setPublickeyAuthenticator(new PublickeyAuthenticator());
sshd.setCommandFactory(new ScpCommandFactory());
List<NamedFactory<Command>> namedFactoryList = new ArrayList<NamedFactory<Command>>();
namedFactoryList.add(new SftpSubsystem.Factory());
sshd.setSubsystemFactories(namedFactoryList);
try {
sshd.start();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testGetFile() {
}
Run Code Online (Sandbox Code Playgroud)
问题是要投入什么testGetFile().
我一直在浏览测试代码,想知道上面是否需要更多配置来指定根目录,用户名和身份验证密钥文件名.然后我需要使用客户端或我自己的SFTP api代码从中获取和提取文件?
我确信这是一个很好的API,没有太多的指导,有人可以帮忙吗?
我正在使用此示例,取自Java SFTP Server Library?:
public void setupSftpServer(){
SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPort(22);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));
List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
userAuthFactories.add(new UserAuthNone.Factory());
sshd.setUserAuthFactories(userAuthFactories);
sshd.setCommandFactory(new ScpCommandFactory());
List<NamedFactory<Command>> namedFactoryList = new ArrayList<NamedFactory<Command>>();
namedFactoryList.add(new SftpSubsystem.Factory());
sshd.setSubsystemFactories(namedFactoryList);
try {
sshd.start();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但我需要为SFTP服务器设置用户登录和pw.我怎样才能做到这一点?谢谢
我有一些代码,我需要编写一个测试,连接到供应商的SFTP服务器并将文件放在那里.现在测试是连接到他们的实际服务器,但我宁愿不这样做.理想情况下,我想在MockFtpServer中使用假的,内存中的服务器.我尝试使用那个,它在那里得到一部分,但在发出实际命令时死亡,因为它不识别它们.
有问题的代码是Mule ESB中的流程设置.
我希望使用Apache MINA在Java中设置SFTP服务器.
它似乎开始正常,但当我尝试使用OpenSSH客户端连接到它时,我得到:
$ ssh localhost -p 2222
Unable to negotiate with ::1: no matching host key type found. Their offer: ssh-dss
$ ssh -V
OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015
Run Code Online (Sandbox Code Playgroud)
Java应用程序日志:
! java.lang.IllegalStateException: Unable to negotiate key exchange for server host key algorithms (client: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsa / server: ssh-dss)
! at org.apache.sshd.common.session.AbstractSession.negotiate(AbstractSession.java:1279) ~[sshd-core-1.0.0.jar:1.0.0]
Run Code Online (Sandbox Code Playgroud)
我的Maven依赖项是:
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-sftp</artifactId>
<version>0.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
<version>1.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的应用启动代码看起来像(从/sf/answers/628216081/复制)
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.SshServer;
import org.apache.sshd.server.auth.UserAuth;
import org.apache.sshd.server.auth.UserAuthNoneFactory;
import org.apache.sshd.server.command.ScpCommandFactory;
import …Run Code Online (Sandbox Code Playgroud)