Spring Boot 如何将首选身份验证方法设置为DefaultSftpSessionFactory会话的密码?

3vpjnl9f  于 2023-06-05  发布在  Spring
关注(0)|答案(1)|浏览(188)

正在寻找将首选身份验证方法设置为密码的方法。Spring Integration 6.1.0与Sping Boot 3.1.0
在以前的版本中,我们可以这样做-

@Bean
Properties configProperties(){
    Properties config = new Properties();
    config.setProperty("PreferredAuthentications", "password");
    return config;
}

@Bean
SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory(){
    System.out.println("Creating Session");
    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
    factory.setHost("someSFTPServer");
    factory.setUser("user");
    factory.setPassword("SomePassword");
    factory.setPort(22);
    factory.setAllowUnknownKeys(true);
    **factory.setSessionConfig(configProperties());**
    return new CachingSessionFactory<ChannelSftp.LsEntry>(factory);
}

但是在6.1.0中setSessionConfig()不可用。
有没有人能给予一些关于如何处理这种情况的指导?

快速背景

我正在尝试使用用户名和密码连接到SFTP主机,但连接失败。查看日志,它似乎尝试使用method=keyboard-interactive长时间,最终主机在2分钟后关闭连接。所以,我想如果我可以在一开始就使用method=password,连接可能会成功建立。
我能够使用Filezilla/Cyberduck使用相同的凭据连接到相同的主机,没有任何问题。

kgsdhlau

kgsdhlau1#

新版本的Spring Integration使用Apache MINA项目通过SSH客户端连接到SFTP。
查看其各自的选项,该选项超出了Spring Integration范围:

@Override
public void setUserAuthFactories(List<UserAuthFactory> userAuthFactories) {

在这里,您可以只选择UserAuthPasswordFactory供您考虑。
请参见相应的ctor以注入自定义SshClient

/**
 * Instantiate based on the provided {@link SshClient}, e.g. some extension for HTTP/SOCKS.
 * @param sshClient the {@link SshClient} instance.
 * @param isSharedSession true if the session is to be shared.
 */
public DefaultSftpSessionFactory(SshClient sshClient, boolean isSharedSession) {

相关问题