我正在构建一个SFTP类,负责列出远程目录的文件。我正在使用JSch库来这样做。我已经设置了一个用户,可以手动将SSH SSH到远程服务器。但是,当JSch尝试连接时,它将响应



我注意到的一件事是:当我手动SSH到服务器上时,我看到它正在使用“PAM身份验证”。我想念什么?

Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
Session session = jSch.getSession(username, destination, port);
session.setPassword(password);
session.setConfig(config);
session.connect();

最佳答案

如果在服务器端使用PAM身份验证,则可能需要在客户端实现键盘交互式身份验证。
请参阅What's the difference between “password” and “keyboard-interactive”?问题以了解PAM和键盘交互式身份验证之间的关系。

有关键盘交互式身份验证实现示例,请参见official UserAuthKI example
基本上,您需要实现 UIKeyboardInteractive interface(以及 UserInfo interface),并使用 Session.setUserInfo 将实现与 session 相关联。
如果身份验证仅提示输入单个“密码”,请实现 UIKeyboardInteractive.promptKeyboardInteractive method以返回带有密码的单个元素数组。

强制性警告:请勿使用StrictHostKeyChecking=no盲目接受所有主机密钥。那是一个安全漏洞。您失去了对MITM attacks的保护。有关正确(且安全)的方法,请参见:How to resolve Java UnknownHostKey, while using JSch SFTP library?

关于java - JSch PAM身份验证- “Auth fail”-凭据正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42983732/

10-11 22:52
查看更多