gpt4 book ai didi

java - jsch session.connect() 问题

转载 作者:行者123 更新时间:2023-12-03 16:14:25 25 4
gpt4 key购买 nike

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

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 的路径是我保存 key 和主机文件的完整 unix 路径,我已将其移动到包含启动此过程的脚本的目录。我对 sftp 还是有点陌生​​,我的公钥是否必须在同一个目录中,即使我没有将它添加到 Jsch 连接中?有什么方法可以获取有关我失败的更多信息吗?

最佳答案

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

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

关于java - jsch session.connect() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10637586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com