首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jsch session.connect()问题

jsch session.connect()问题
EN

Stack Overflow用户
提问于 2012-05-17 22:24:05
回答 3查看 9.5K关注 0票数 3

我是Jsch的新手,我正在尝试通过sftp连接到第三方。我可以通过ssh连接,所以我知道我有正确的用户、主机、端口和私钥文件,但是当我尝试通过Jsch连接时,我得到了异常消息"Auth failed",这几乎是有帮助的,但不是很有帮助。以下是我从在线示例中拼凑而成的代码:

代码语言:javascript
复制
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连接中?有什么方法可以获得关于我失败的更多信息吗?

EN

Stack Overflow用户

发布于 2012-06-10 02:34:18

是的,如果您使用公钥身份验证,JSch期望公钥文件与您作为参数传递给addIdentity()的私钥文件位于相同的目录中(名称相同,但添加了.pub)。或者,您可以使用the method variant which takes both file names as parameters,或者将它们作为字节数组传递。

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

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10637586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档