JSch PAM身份验证 - "身份验证失败" - 凭证是正确的

时间:2017-03-23 18:06:26

标签: java ssh sftp jsch pam

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

响应
  

com.jcraft.jsch.JSchException:Auth fail

我注意到了一件事;当我手动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();

2 个答案:

答案 0 :(得分:2)

如果您在服务器端使用PAM身份验证,则可能需要在客户端实现键盘交互式身份验证。

请参阅What's the difference between “password” and “keyboard-interactive”?问题,了解PAM与键盘交互式身份验证之间的关系。

有关键盘交互式身份验证实现示例,请参阅official UserAuthKI example

基本上,您需要实施UIKeyboardInteractive interface(与UserInfo interface一起)并使用Session.setUserInfo将实施与会话相关联。

如果身份验证仅提示输入单个“密码”,请执行UIKeyboardInteractive.promptKeyboardInteractive method以返回包含密码的单个元素数组。

答案 1 :(得分:0)

下面的代码经过测试并按预期工作。试试以下代码:

/* This is your crud method */
function my_crud()
{
  $crud = new grocery_CRUD();
  ...
  ...
  $crud->callback_column(
           'timestamp',
           array($this,'_callback_convert_to_human_readable')
  );
  ...
  ...

}

/* So this is your callback */
function _callback_convert_to_human_readable($value, $row)
{
     return date("m/d/Y H:i:s", $value);
}

网址:https://github.com/SanjayMadnani/com.sanjay.common.common-utils/blob/master/common-utils/src/main/java/com/sanjay/common/util/FileUtil.java

相关问题