SSH 守护进程 (NIO2) 不再启动

SSH Daemon (NIO2) is not starting anymore

我在 jetty 版本 9.2.11 下有两个 VM 运行 gitblit。两者都在 ubuntu 服务器 14.04.

中使用 java 8(最新更新 "1.8.0_77"

我注意到的唯一区别是内核版本

其中之一是

2.6.32-042stab111.12 #1 SMP Thu Sep 17 11:38:20 MSK 2015 x86_64 x86_64 x86_64 GNU/Linux (lets call it server 1)

另一个是

2.6.32-042stab113.21 #1 SMP Wed Mar 23 11:05:25 MSK 2016 x86_64 x86_64 x86_64 GNU/Linux (lets call it server 2)

在服务器 1 上,一切正常。

但是在服务器 2 上,gitblit 的上下文没有启动和运行。

日志中的最后一条记录是:

2016-04-12 22:22:53 [INFO ] Federation passphrase is blank! This server can not be PULLED from.
2016-04-12 22:22:53 [INFO ] Fanout PubSub service is disabled.
2016-04-12 22:22:53 [INFO ] Git Daemon is listening on 0.0.0.0:9419

在那之后,jetty 的服务失败了,上下文不可用。该应用程序永远保持状态“正在启动”。

我尝试重新安装 ssh 服务器和客户端,但没有成功。

有人可以帮我吗?

此致

几天后,我 post 我找到了正确答案。

我按照以下步骤检测问题的根本原因:

  1. 我已经下载了gitblit's version I'm using. In this case, version 1.7.1 available here的源代码。
  2. 对于源代码,我添加了一些快速日志(使用 sysout),仅用于检查应用程序何时冻结。我注意到问题出在 Apache MINA sshd.
  3. 的代码中
  4. 我也下载了Apache MINA sshd的源码来调试。在这种情况下,我无法添加 sysout,然后我选择在服务器上的码头 运行 中进行远程调试,如 此处.
  5. 所述

当然有点慢,但我注意到当 sshd 的代码在 class SecurityUtils.BouncyCastleRandom

中调用 SecureRandom.generateSeed(8)
public BouncyCastleRandom() {
    ValidateUtils.checkTrue(isBouncyCastleRegistered(), "BouncyCastle not registered");
    this.random = new VMPCRandomGenerator();
    byte[] seed = new SecureRandom().generateSeed(8);
    this.random.addSeedMaterial(seed);
}

系统曾经完全冻结。

在互联网上搜索了很长时间后,我找到了这个 link/blog https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/,当我输入命令 cat /proc/sys/kernel/random/entropy_avail 时,结果总是得到 0(零)。

我知道我的 Linux 是一个 VPS 运行 在 openvz 下托管在 host1plus。基于此,我要求 VPS 提供者检查我的 VPS 结果总是为零的原因。

技术支持的回答是:

We have enabled the random device for your VPS. Please check if it works works for you and if the issue is solved.

在那次更新之后,我的 gitblit 恢复到 运行 状态。