2

背景:

我正在尝试在 Ubuntu 16.04 上运行 Jepsen ( https://github.com/jepsen-io/jepsen )。我创建了 6 个虚拟机(在我的 Windows 10 电脑上)并将主机名替换为 n1、n2、.... n6。所有虚拟机的用户名和密码都相同。

现在,我可以从任何 VM 直接 ssh 到任何其他 VM。(例如,从 n6 开始,我可以只执行这个命令“ssh n1”,它可以正常工作)。我正在尝试从节点 6(主机名 n6)运行节点 jepsen 工具,以便它可以在节点 n1、n2、n3、n4 和 n5 中创建数据库。

到目前为止,我还没有对 jepsen 代码进行任何更改。我已经使用“lein install”命令编译它,现在尝试运行它。

问题:

为了简单地运行测试,我按照 jepsen 网页中提供的说明(“cd aerospike”;“lein test”)但它给了我以下错误:

user@Ubuntu6:~/Desktop/jepsen_cassandra/aerospike$ lein test

lein test aerospike.core-test
jepsen.generator$concat$reify__7285@577dac16>

lein test :only aerospike.core-test/counter

ERROR in (counter) (Session.java:781)
Uncaught exception, not in assertion.
expected: nil
actual: com.jcraft.jsch.JSchException: reject HostKey: n1 at com.jcraft.jsch.Session.checkHost (Session.java:781)
com.jcraft.jsch.Session.connect (Session.java:342)
com.jcraft.jsch.Session.connect (Session.java:183)
clj_ssh.ssh$eval6796$fn__6803.invoke (ssh.clj:118)
clj_ssh.ssh.protocols$eval6722$fn__6745$G__6713__6754.invoke (protocols.clj:4)
clj_ssh.ssh$connect.invoke (ssh.clj:401)
jepsen.control$session.invoke (control.clj:197)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.AFn.applyTo (AFn.java:144)
clojure.core$apply.invoke (core.clj:624)
clojure.core$with_bindings_STAR_.doInvoke (core.clj:1862)
clojure.lang.RestFn.applyTo (RestFn.java:142)
clojure.core$apply.invoke (core.clj:628)
clojure.core$bound_fn_STAR_$fn__4140.doInvoke (core.clj:1884)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invoke (core.clj:624)
jepsen.core$fcatch$wrapper__8355.doInvoke (core.clj:55)
clojure.lang.RestFn.invoke (RestFn.java:408)
clojure.core$pmap$fn__6328$fn__6329.invoke (core.clj:6466)
clojure.core$binding_conveyor_fn$fn__4145.invoke (core.clj:1910)
clojure.lang.AFn.call (AFn.java:18)
java.util.concurrent.FutureTask.run (FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617)
java.lang.Thread.run (Thread.java:748)
jepsen.generator$concat$reify__7285@254210b1>

lein test :only aerospike.core-test/cas-register

ERROR in (cas-register) (Session.java:781)
Uncaught exception, not in assertion.
expected: nil
actual: com.jcraft.jsch.JSchException: reject HostKey: n1
at com.jcraft.jsch.Session.checkHost (Session.java:781)
com.jcraft.jsch.Session.connect (Session.java:342)
com.jcraft.jsch.Session.connect (Session.java:183)
clj_ssh.ssh$eval6796$fn__6803.invoke (ssh.clj:118)
clj_ssh.ssh.protocols$eval6722$fn__6745$G__6713__6754.invoke (protocols.clj:4)
clj_ssh.ssh$connect.invoke (ssh.clj:401)
jepsen.control$session.invoke (control.clj:197)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.AFn.applyTo (AFn.java:144)
clojure.core$apply.invoke (core.clj:624)
clojure.core$with_bindings_STAR_.doInvoke (core.clj:1862)
clojure.lang.RestFn.applyTo (RestFn.java:142)
clojure.core$apply.invoke (core.clj:628)
clojure.core$bound_fn_STAR_$fn__4140.doInvoke (core.clj:1884)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invoke (core.clj:624)
jepsen.core$fcatch$wrapper__8355.doInvoke (core.clj:55)
clojure.lang.RestFn.invoke (RestFn.java:408)
clojure.core$pmap$fn__6328$fn__6329.invoke (core.clj:6466)
clojure.core$binding_conveyor_fn$fn__4145.invoke (core.clj:1910)
clojure.lang.AFn.call (AFn.java:18)
java.util.concurrent.FutureTask.run (FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617)
java.lang.Thread.run (Thread.java:748)

Ran 2 tests containing 2 assertions.
0 failures, 2 errors.
Tests failed.

首先,我尝试按原样运行代码。但后来我在(https://github.com/jepsen-io/jepsen/blob/master/jepsen/src/jepsen的第 21 行和第 22 行添加了 5 个虚拟机的用户名和密码(这是 ssh 所必需的) /control.clj )。但它并没有解决问题。

我将非常感谢任何解决此问题的解决方案/指南。

4

1 回答 1

1

这条线

actual: com.jcraft.jsch.JSchException: reject HostKey: n1 at com.jcraft.jsch.Session.checkHost

表示发起 ssh 连接的系统不愿意信任它所连接的计算机的身份。因此,密码/密钥不允许您进入并不是问题,相反,启动连接的系统不确定它连接到的系统的身份。

最常见的原因是您过去使用相同的 IP 或主机名连接到一个系统,该 IP 或主机名已被该系统替换。SSH 保证如果不同的计算机响应相同的名称,它将触发警报并且不连接,而不是冒中间人攻击的风险。当系统确实被替换时,这会导致误报。

尝试从这个系统 ssh 到目标主机并确保它工作。如果没有,请尝试删除该系统的 IP(~/.ssh/known_hosts如果它在那里)。还要考虑~/.ssh/config文件中的任何内容是否会影响此主机,例如要求它具有特定的主机密钥


因为这似乎不是主机密钥冲突,所以接下来要检查的是主机使用的是哪种主机密钥。Jsch 是它自己的 ssh 实现,支持与 openSSH 不同的一组密钥。您可以通过运行确定系统的主机密钥类型

ssh -vvv hostname

...
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256

然后谷歌搜索 jsch 和主机密钥算法,看看是否有任何未解决的问题。

于 2017-06-28T23:14:46.153 回答