【问题标题】:SFTP connection failed (Password Less Server)SFTP 连接失败(无密码服务器)
【发布时间】:2017-12-29 14:10:16
【问题描述】:

我已配置无密码 SFTP 服务器。 我想使用带有用户名和密码的 jsch (JAVA) 库来连接它。 我一直在使用以下代码行:-

session.setConfig("PreferredAuthentications", "密码,基于主机,公钥");

JAVA 中的这一行会覆盖 SSH 配置(无密码)的设置吗?

请注意SFTP服务器使用终端命令SFTP连接良好,没有提示密码。

【问题讨论】:

  • 什么是“无密码服务器”?你是什​​么意思? + 向我们展示一个 JSch 日志文件,以及 ssh -v ... 输出(都在同一台机器上运行,连接到同一台服务器)。

标签: java ssh sftp jsch sshd


【解决方案1】:

没有。它不会覆盖服务器 SSH 配置。

这行代码只会告诉 ssh 客户端(即您的代码)在尝试连接到 SFTP 服务器时要尝试哪种类型的身份验证方法。

客户端将尝试服务器也支持的第一种方法,并尝试使用该方法创建连接。

这在this JSch javadoc中有很好的解释

当然,您必须配置您的 SSH 服务器以允许密码验证。为此,您应该在以下位置打开 ssh_config 文件:

/etc/ssh/ssh_config

并取消注释以下行

PasswordAuthentication yes

【讨论】:

    【解决方案2】:

    使用 Jsch 库,您可以实现这一点,如下所述。

    初始化Jsch并从中获取一个com.jcraft.jsch.Session对象,然后在这个Session对象中设置UserInfo

    使用超时值不连接会话,然后打开通道传输文件。

        if(null != session && !session.isConnected()){
                session.connect(10000); 
        }
    
       ChannelSftp sftpChannel = (ChannelSftp) 
       session.openChannel(UIConstants.SFTP);
       sftpChannel.connect();
    

    您需要 ChannelSftp 进行文件传输。

    更多详情请访问 Jsch 库https://epaul.github.io/jsch-documentation/simple.javadoc/com/jcraft/jsch/JSch.html

    【讨论】:

    • 这如何回答这个问题?
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2017-11-09
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多