2012-05-17 45 views
3

我是Jsch的新手,我尝试通过sftp连接到第三方。我可以通过SSH连接,所以我知道我有正确的用户,主机,端口和私钥文件,但是当我尝试通过Jsch进行连接时,我收到了“Auth failed”异常消息,这几乎但不完全有用。这里是我的代码,我从例子拼凑在线:jsch session.connect()问题

String pvtkey = "{unixpath}/id_dsa"; 
ChannelSftp sftp = null; 
JSch jsch = new JSch(); 
Session session = null; 



    try{ 
     jsch.setKnownHosts("{unixpath}/known_hosts"); 
     jsch.addIdentity(pvtkey); 
     session = jsch.getSession(user, connectionURL, 22); 
     Properties config = new Properties(); 
     config.put("StrictHostKeyChecking", "no"); 
     session.setConfig(config); 
     session.connect(); 
        ...some other code that never gets called 
      }catch(JSchException e){ 
       log.info(e.getMessage()); 
       log.error(e.getCause()); 
      } 

我加了一些日志,所以我知道故障发生的事情为session.connect()。我抓住了用户和connectionURL并确认他们正在被正确传入。 pvtkey和known_hosts的路径是完整的unix路径,我保存密钥和主机文件,我已将其移至保存脚本的目录,以启动此过程。我对sftp还是有点新意,即使我没有将它添加到Jsch连接中,我的公钥是否也必须位于同一个目录中?有什么方法可以获得有关我失败的更多信息吗?

感谢

回答

0

是的,如果你使用公钥认证,JSch期待在同一个目录中的公钥文件(及同名的增加.pub)为你作为一个传递的私钥文件参数为addIdentity()。或者,您可以使用the method variant which takes both file names as parameters,或将它们作为字节数组传递。

原因是,在SSH公钥认证协议中,客户端首先向服务器发送一个可用公钥的列表,然后由服务器选择一个合适的公钥 - 然后只需要私钥(和将被解密,如果需要的话)。 尽管它可以从私有密钥计算公钥(取决于算法和密钥表示),但JSch本身并不这样做,因此您必须提供两个密钥。

0

,因为你正在使用

config.put("StrictHostKeyChecking", "no"); 

你不需要任何keyfiles.It禁用checking.Can告诉你什么呢日志已执行program.so后,我们可以帮你的hostkey。