Cloudera 向导步骤中的 SSH 问题 "Install Agent"

SSH Issue during Cloudera wizard step "Install Agent"

我试图在服务器 A 和 B 上安装 HBase (Ubuntu 18.04)

为此,我使用安装在服务器 A 上的 CDM (CDM 6.3.1~1466458.ubuntu1804) 来处理服务器 A 和 B 上的 HBASE 安装。

但是我在步骤 "Install Agents" 中遇到问题,向导显示以下错误消息 "Exhausted available authentication methods"。

我在 Cloudera 论坛上发现了一些 post 谈到 NOPASSWD 添加到服务器 B 的 sudoers 文件中,但在我的情况下,我已经建立了从服务器 A 到命令行中的服务器 B 和 运行 没有任何密码的 sudo 命令,所以我想我的服务器配置正确。

准确地说,我尝试使用私钥连接我的服务器,我已使用以下命令在服务器 A 中生成一对密钥:

ssh-keygen -t rsa

然后将生成的文件 .ssh/id_rsa.pub 的内容添加到服务器 B 的 .ssh/authorized_keys 文件中。重试后我得到相同的结果。

我在日志文件中发现了这个跟踪:

2020-01-02 09:48:39,559 WARN NodeConfiguratorThread-22-0:com.cloudera.server.cmf.node.NodeConfigurator: Could not authenticate to SERVER_B net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication methods at net.schmizz.sshj.SSHClient.auth(SSHClient.java:232) at net.schmizz.sshj.SSHClient.auth(SSHClient.java:208) at com.cloudera.server.cmf.node.NodeConfigurator.connect(NodeConfigurator.java:416) at com.cloudera.server.cmf.node.NodeConfigurator.configure(NodeConfigurator.java:1028) at com.cloudera.server.cmf.node.NodeConfigurator.run(NodeConfigurator.java:1106) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

Caused by: net.schmizz.sshj.userauth.UserAuthException: Problem getting public key from PKCS8KeyFile{resource=[PrivateKeyStringResource]} at net.schmizz.sshj.userauth.method.KeyedAuthMethod.putPubKey(KeyedAuthMethod.java:46) at net.schmizz.sshj.userauth.method.AuthPublickey.buildReq(AuthPublickey.java:62) at net.schmizz.sshj.userauth.method.AuthPublickey.buildReq(AuthPublickey.java:81) at net.schmizz.sshj.userauth.method.AbstractAuthMethod.request(AbstractAuthMethod.java:63) at net.schmizz.sshj.userauth.UserAuthImpl.authenticate(UserAuthImpl.java:68) at net.schmizz.sshj.SSHClient.auth(SSHClient.java:226) ... 9 more

Caused by: java.io.IOException: unrecognised object: OPENSSH PRIVATE KEY at org.bouncycastle.openssl.PEMParser.readObject(Unknown Source) at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.readKeyPair(PKCS8KeyFile.java:132) at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.getPublic(PKCS8KeyFile.java:78) at net.schmizz.sshj.userauth.method.KeyedAuthMethod.putPubKey(KeyedAuthMethod.java:44)

... 14 more

有没有人可以帮助我?

我遇到了完全相同的问题,结果 ssh-keygen 使用 BEGIN OPENSSH PRIVATE KEY 创建了私钥文件,Cloudera 使用的 Java 库不知道如何解析。您可以将 openssl 与如下命令一起使用:

openssl genrsa -out mykey.pem 1024

ssh-keygen 不同,后者不会为您提供所需的 public 密钥,并且内置的 openssl 命令可以从私钥中获取 public 密钥' 采用 Cloudera 接受的格式。对于 that,你 可以 使用 ssh-keygen 像这样:

ssh-keygen -y -f mykey.pem > mykey.pub

所以我找到了问题的根源。我需要将服务器 A 的公钥添加到服务器 B,但我还需要从服务器 B 到服务器 A。仅此而已