ssh - 杰普森 : SSH issue

标签 ssh clojure jepsen

背景:
我正在尝试在 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/control.clj) 的第 21 行和第 22 行添加了 5 个虚拟机的用户名和密码( ssh 所需的)。但它并没有解决问题。
我将非常感谢任何解决此问题的解决方案/指南。

最佳答案

这条线

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

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

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

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

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

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

然后谷歌搜索 jsch 和主机 key 算法,看看是否有任何 Unresolved 问题。

关于ssh - 杰普森 : SSH issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44813439/

相关文章:

performance - Datomic中的查询结果分页

clojure - 如何更新原子中的试剂向量

testing - 无法为 elasticsearch 或 rabbitmq 运行 jepsen 测试

c++ - 使用 libssh2 将字符串写入远程文件

php - 在 CentOS 上为 Apache 用户创建 SSH key

shell - WHM/cPanel : Manage Wheel Group Users and SSK Keys access

linux - git push 和 git clone 有效但 mvn release :branch 无效

emacs - 如何评估 Emacs init.el 文件中的某些内容?