所以我在写一个小程序,需要通过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/