在jgit中配置known_hosts

2024-03-23

使用 jgit 和 gitolite 进行源代码控制,我有一个应用程序,可以根据命令生成某些代码,并且我们希望将其提交给源代码控制。目标是快速拉动,提交新代码,然后推送它。

我有以下方法:

private void commitToGitRepository(String updateComment, Config config)
      throws IOException, NoFilepatternException, GitAPIException
{
   if(git == null)
   {
      git = Git.open(new File(config.getDpuCheckoutDir()));
   }
   PullCommand pull = git.pull();
   pull.call();
}

此方法失败于pull.call()方法调用,但以下情况除外:

com.jcraft.jsch.JSchException: UnknownHostKey: www.somehost.com. RSA key fingerprint is 9d:92:a9:c5:5d:cb:5f:dc:57:ff:38:7e:34:31:fe:75
at com.jcraft.jsch.Session.checkHost(Session.java:748)
at com.jcraft.jsch.Session.connect(Session.java:319)
at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:116)
at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:121)
at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:248)
at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1104)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128)
at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:245)
at net.intellidata.dpu.controller.schema.EntityMappingController.commitToGitRepository(EntityMappingController.java:149)
... (truncated where it meets my code)

我读这篇文章的方式,似乎没有找到我的known_hosts 文件user_home/.git。但是,我已经搜索了一个小时,但没有找到配置 JGit 来告诉 JSch 在哪里查找known_hosts 文件的方法。

建议?我知道原点条目存在于我的known_hosts 文件中


这个答案 https://stackoverflow.com/a/14024709/6309提到:

jsch.setKnownHosts("C:\\Users\\aUsername\\known_hosts");

但是你正在使用jgit,并且not jsch(Java 安全 shell) http://www.jcraft.com/jsch/直接,让我们看看:

C:\Users\VonC\prog\git>git clone https://github.com/eclipse/jgit
Cloning into 'jgit'...
remote: Counting objects: 37854, done.
remote: Compressing objects: 100% (7743/7743), done.
remote: Total 37854 (delta 22009), reused 34367 (delta 18831)
Receiving objects: 100% (37854/37854), 6.73 MiB | 1.37 MiB/s, done.
Resolving deltas: 100% (22009/22009), done.

C:\Users\VonC\prog\git>cd jgit

C:\Users\VonC\prog\git\jgit>grep -nrHI "setKnownHosts" *
org.eclipse.jgit/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java:262:                              sch.setKnownHosts(in);

找到了!

这来自JschConfigSessionFactory.java#knownHosts() https://github.com/eclipse/jgit/blob/master/org.eclipse.jgit/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java#L258,看起来像:

new File(new File(home, ".ssh"), "known_hosts");
# with:
home = fs.userHome();

userHome是基于System.getProperty("用户.home") https://github.com/eclipse/jgit/blob/master/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java#L242-L251.

所以确保你的java会话有一个user.home defined https://stackoverflow.com/questions/1503284/java-system-getpropertyuser-home-returns,并且你有一个%USERPROFILE%/.ssh/known_hosts文件在那里。

(user.home应该由java设置为%USERPROFILE%对于 Windows,也就是说,如果您使用的是 Windows:在某些情况下,这并不总是有效 https://stackoverflow.com/questions/2134338/java-user-home-is-being-set-to-userprofile-and-not-being-resolved).


现在如果你do have a %USERPROFILE%/.ssh/known_hosts,那么,作为这里提到 http://fileit.in/p/549

只需通过 SSH 连接到客户端(使用命令行ssh工具),这会将条目添加到您的~/.ssh/known_hosts file.


在这种情况下,斯托姆·霍克 https://stackoverflow.com/users/1036285/stormehawke中提到评论 https://stackoverflow.com/questions/15843399/configuring-known-hosts-in-jgit/15849893#comment22614468_15849893:

因为我正在运行这个Tomcat 作为 Windows 服务,Jsch(以及扩展名 JGit)不是在我的用户文件夹中查找,而是在SYSTEM帐户的主文件夹为了.ssh folder.
在这种情况下,我继续复制.ssh文件夹放入SYSTEMhome 文件夹,因为 Tomcat 仅在我的计算机上运行用于开发和测试目的(可能不是最好的安全策略,但在这种情况下风险很小)。

From 这个问题 https://serverfault.com/q/9325/783, this one https://serverfault.com/q/112927/783,该目录为本地系统帐户 http://msdn.microsoft.com/en-us/library/ms684190%28VS.85%29.aspx应该:

C:\Documents and Settings\Default User
# or Wind7 / 2008
C:\Windows\System32\Config\systemprofile

OP提到:

根据这个电话:

 System.out.println(System.getProperty("user.home")); 

默认值SYSTEMWindows 7(可能还有任何其他基于 NT 的 Windows 系统)的主目录很简单C:\.
(所以并不理想,但为了快速修复,它是有效的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在jgit中配置known_hosts 的相关文章

随机推荐

  • 动态 Linq GroupBy 选择无法正常工作

    请指导 我可以使用动态分组依据 但是在选择非聚合字段时 出现以下错误 类型 IGrouping 2 中不存在属性或字段 名称 var result311 IQueryable gle1 temptable Where a gt a IsAl
  • 如何从播放应用程序中的 play.mvc.Result 对象中提取结果内容?

    实际上我正在从一个播放应用程序重定向到另一个播放应用程序 最后我收到作为 Result 对象的响应 下面是两个应用程序中的操作 我正在从 application1 重定向到 application2 应用程序 2 将返回我需要提取的 JSO
  • 为什么在android中的输入流之后要关闭OutputStream

    我正在以这种方式从 android 连续调用我的 servlet 两次 FIRST CONNECTION URL url new URL http 172 16 32 160 8080 xyz check availability Http
  • 安排 Google Cloud Dataflow 作业的最简单方法

    我只需要每天运行一个数据流管道 但在我看来 像 App Engine Cron Service 这样需要构建整个 Web 应用程序的建议解决方案似乎有点太多了 我正在考虑仅从 Compute Engine Linux 虚拟机中的 cron
  • 使用 C++ 中的标准流的灵活记录器类

    我想创建一个灵活的记录器类 我希望它能够将数据输出到文件或标准输出 另外 我想使用流 该类应该类似于 class Logger private std ostream m out or ofstream iostream i don t k
  • 在此 dnvm.ps1 命令中哪些参数显示未定义?结果部署到 Azure 网站失败

    我一直在 Linux 上开发一个新的 ASP NET 5 MVC 6 网站 我正在将 Git 与 Azure 结合使用 并且已经能够成功将其推送到 SCM 然而 由于一些未定义的参数 我的部署失败了 希望有人能告诉我终端输出中显示的命令中未
  • 如何使用 pythonnet 在 python 侦听器中订阅 .NET 事件?

    我正在尝试创建一个事件侦听器来订阅tick使用 Python 的外汇交易应用程序的 价格 事件 原始应用程序是一个本机 32 位 Windows 应用程序 名为元交易者4 这没有任何 API 所以mtapi https github com
  • 返回修改后的类和使用 type() 之间的区别

    我想这更像是一个 python 问题 而不是 django 问题 但我无法在其他地方复制这种行为 所以我将使用无法按预期工作的确切代码 当我发现这个工厂函数片段时 我正在 django 中处理一些动态表单 def get employee
  • GitHub Copilot - 请登录 github 并重试

    对于 Intellij 插件 GitHub Copilot 显示错误please login to github and try again 我已经完成了以下操作 使用我的 GitHub 用户和密码对 GitHub Copilot 进行了身
  • Swift UITableViewCell 对齐

    我正在尝试显示如下页面 页面标题 左对齐 区域名称 中心对齐 该地区的人 详细标签中带有电子邮件的副标题 但是 如果我选择副标题作为单元格样式 则所有内容都将左对齐 并且我无法在代码中更改它们 然后 如果我选择自定义作为样式 则详细文本标签
  • 当尝试在 R 中运行 kNN 时,我收到由 coercionNAs 引入的错误 NAs?

    我正在尝试在数据集上运行 kNN 但我不断收到一些 NA 错误 我已经用尽了堆栈溢出试图找到这个问题的解决方案 我在任何地方都找不到任何有用的东西 这是我正在使用的数据集 https www kaggle com tsiaras uk ro
  • java.util.Vector - 替代品

    以前 当长度未知时 我一直认为 Vector 适合用于非描述性对象 据我所知 我认为它也是线程安全的 什么会改变这一点Vector不应再使用 有什么替代方案 你应该使用ArrayList代替Vector Vector使用内部同步 但这对于实
  • Android - 如何拦截“安装应用程序”意图

    好吧 所以不完全确定这是可能的 但尝试编写一个应用程序 以便我可以在执行以下任何活动之前运行一些代码 1 从网络下载 APK 并启动安装程序 2 在android市场上按下安装按钮 是否有可能拦截并提示这些事件 或者谷歌已经将这些东西锁定得
  • 如何在 css URL 中使用相对/绝对路径?

    我有一个生产和开发服务器 问题是目录结构 发展 http dev com subdir images image jpg http dev com subdir resources css style css 生产 http live co
  • 通过进程 ID 将 KeyEvent 发送到目标窗口

    我需要创建一个关键事件 cmd r 用于刷新浏览器窗口 并传递我尝试定位的窗口的进程 ID 比方说 let customEvent NSEvent keyEvent with NSEvent EventType keyUp location
  • 表达式集子集化

    我有一个ExpressionSet我想要子集的对象 例如 gt str ESet Formal class ExpressionSet package Biobase assayData phenoData STATUS num 1 210
  • 在python中将JSON存储到数据库中

    我定期从 API 获取一些数据 并希望将 JSON 数据存储到数据库中以便稍后访问和使用 从 API 中 我每次都会获取此样本中的数据 data cursor null files nodes u code u BOPhmYQg5Vm u
  • CLLocation距离位置(在Swift中?)

    有人可以帮我将以下 Objective C 语句转换为 Swift 吗 CLLocationDistance distance fromLocation distanceFromLocation toLocation 我知道做到这一点一定很
  • 标准库类型的赋值运算符的 ref 限定符

    我想知道 标准类型的赋值运算符没有左值引用限定是否有原因 他们都不是 因此 我们可以这样写 std string 42 std string s hello std string world oops std vector
  • 在jgit中配置known_hosts

    使用 jgit 和 gitolite 进行源代码控制 我有一个应用程序 可以根据命令生成某些代码 并且我们希望将其提交给源代码控制 目标是快速拉动 提交新代码 然后推送它 我有以下方法 private void commitToGitRep