java - 通过 Java 的 SFTP 连接要求奇怪的身份验证

标签 java sftp kerberos jsch

所以我在写一个小程序,需要通过SFTP连接到远程服务器,拉下一个文件,然后处理这个文件。我通过这里的一些答案遇到了 JSch,它看起来非常适合这项任务。到目前为止,易于使用并且我已经开始工作了,我想修复一件小事。我正在使用以下代码连接并将文件拉下来:

    JSch jsch = new JSch();
    Session session = null;
    try {
        session = jsch.getSession("username", "127.0.0.1", 22);
        session.setConfig("StrictHostKeyChecking", "no");
        session.setPassword("password");
        session.connect();

        Channel channel = session.openChannel("sftp");
        channel.connect();
        ChannelSftp sftpChannel = (ChannelSftp) channel;
        sftpChannel.cd(REMOTE_FTP_DIR);
        sftpChannel.lcd(INCOMING_DIR);
        sftpChannel.get(TMP_FILE, TMP_FILE);
        sftpChannel.exit();
        session.disconnect();
    } catch (JSchException e) {
        e.printStackTrace();
    } catch (SftpException e) {
        e.printStackTrace();
    }

所以这有效,我得到了文件。我在 linux 服务器上运行此代码,当我运行代码时,JSch 询问我的 Kerberos 用户名和密码。看起来像:

Kerberos 用户名 [george]:

乔治的 Kerberos 密码:

对于这两个问题,我都按回车键,然后程序似乎继续运行,没有任何问题。但是,我需要通过 cron 任务自动执行此代码,因此我不想让它暂停程序来问我这两个问题。有什么我没有提供的东西,所以它不会问这个吗?我需要做些什么来阻止它询问?希望有人有一些想法。谢谢。

最佳答案

以为我会在这里发布答案,因为以防万一其他人最终遇到类似的问题。结果我遗漏了一段让一切变得不同的代码。我只需要添加

session.setConfig("PreferredAuthentications", 
                  "publickey,keyboard-interactive,password");


session.connect();

现在一切正常。

关于java - 通过 Java 的 SFTP 连接要求奇怪的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43871345/

相关文章:

bash - 为多个命令使用用户/密码*一次*进行身份验证? ( session 多路复用)

logging - apache Camel ftp 不会记录错误的密码

python - paramiko:打开和返回 sftp 连接的方法

java - 如何将 kafkacat 与消息中心一起使用

java - 使应用程序成为已知服务,以对应用程序进行 Kerberize 化

Java:不能在 switch 语句中使用通用枚举

java - Android:使叠加图像可点击

java - Maven 配置文件在运行 jdk 时激活,而不是在工具链 jdk 上激活

hadoop - 了解如何使用 Kerberos 的 Hadoop 客户端 API

java - 显示 SQL 错误信息