通过Java SFTP连接请求怪异认证(SFTP connection through Java a

2019-06-25 04:28发布

所以我写了一个小程序,需要通过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用户名字[乔治]:

Kerberos口令乔治:

我刚打了两个问题进入,然后程序似乎继续,没有任何问题。 不过,我需要这个代码通过cron任务实现自动化,所以我宁愿不让它暂停程序来问我这两个问题。 有什么事我不提供它,这样就不会问这个? 这是我需要做什么来阻止它要求? 希望有人有一些想法。 谢谢。

Answer 1:

想我会在这里发布一个答案,因为如果任何人最终运行到类似的问题。 原来我缺了一块的代码,使所有的差异。 我只是需要加入

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

之前

session.connect();

而现在一切都完美的作品。



Answer 2:

而在自我接受的答案解决方案是正确的,它没有任何解释。

的问题是,OP具有一个Kerberos / GSSAPI认证设置为优选的(该JSch默认值)。 然而,OP似乎并不实际使用/想它,因为OP声称不指定任何Kerberos的用户名或密码提示。

解决的办法是去除在Kerberos / GSSAPI( gssapi-with-mic从优选的认证方法的列表):

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


文章来源: SFTP connection through Java asking for weird authentication