javaapachesshd和JSCH
我想要模拟ssh服务器来传输文件。为此,我需要使用ApacheMina SSHD。对于转入系统,请使用JSch。使用私钥
JSch客户端代码
JSch jSch = new JSch();
jSch.addIdentity(privateKeyPath, passPhrase);
Session session = jSch.getSession(usernamePlans, remoteHost);
session.setHost(remoteHostPort);
config.setProperty("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setUserInfo(new StorageUserInfo(passPhrase));
session.connect();
apachemina SSHD代码
sshd = SshServer.setUpDefaultServer();
sshd.setPort(22999);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(privateKeyPath));
sshd.setPasswordAuthenticator(new PasswordAuthenticator() {
public boolean authenticate(String username, String password, ServerSession session) {
// TODO Auto-generated method stub
return true;
}
});
CommandFactory myCommandFactory = new CommandFactory() {
public Command createCommand(String command) {
System.out.println("Command: " + command);
return null;
}
};
sshd.setCommandFactory(new ScpCommandFactory(myCommandFactory));
List<NamedFactory<Command>> namedFactoryList = new ArrayList<>();
namedFactoryList.add(new SftpSubsystem.Factory());
sshd.setSubsystemFactories(namedFactoryList);
sshd.start();
有人能帮我连接JSch和ApacheMina SSHD以传输文件吗
堆栈跟踪
com.jcraft.jsch.JSchException: java.net.SocketException: Invalid argument or cannot assign requested address
Caused by: java.net.SocketException: Invalid argument or cannot assign requested address
# 1 楼答案
设置端口时不应调用setHost()。正如文件中明确提到的那样
相反,您应该在调用getSession()时提供端口。如下所示