car*_*ian 42 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();
}
Run Code Online (Sandbox Code Playgroud)
所以这有效,我得到了文件.我在linux服务器上运行此代码,当我运行代码时,JSch会询问我的Kerberos用户名和密码.看起来像:
Kerberos用户名[george]:
george的Kerberos密码:
我只是输入两个问题,然后程序似乎继续没有问题.但是我需要通过cron任务自动执行此代码,所以我宁愿不让它暂停程序来问我这两个问题.有什么我不提供它,所以它不会问这个?我需要做些什么来阻止它问?希望有人有一些想法.谢谢.
car*_*ian 81
以为我会在这里发布一个答案,因为如果其他人最终遇到类似的问题.事实证明,我错过了一段能让一切变得与众不同的代码.我只需要添加
session.setConfig("PreferredAuthentications",
"publickey,keyboard-interactive,password");
Run Code Online (Sandbox Code Playgroud)
之前
session.connect();
Run Code Online (Sandbox Code Playgroud)
现在一切都很完美.
Mar*_*ryl 11
虽然自我接受的答案中的解决方案是正确的,但它没有任何解释.
问题是OP将Kerberos/GSSAPI身份验证设置为首选(JSch默认设置).然而OP似乎并没有真正使用/想要它,因为OP声称不为Kerberos提示指定任何用户名或密码.
解决方案是gssapi-with-mic从首选身份验证方法列表中删除Kerberos/GSSAPI():
session.setConfig(
"PreferredAuthentications",
"publickey,keyboard-interactive,password");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21421 次 |
| 最近记录: |