Teamcity SSH私钥登录失败:私钥无效

Teamcity SSH私钥登录失败:私钥无效,ssh,teamcity,jsch,teamcity-8.0,Ssh,Teamcity,Jsch,Teamcity 8.0,我设置了从Windows代理连接到Linux的SSH登录,但TeamCity给出了以下错误 [新生成问题]com.jcraft.jsch.JSchException:无效的privatekey:[B@5543cd SSH Secure Shell生成的密钥对连接到服务器没有问题 类似的问题是,但这不是我的编程问题,而是teamcity内部的例外 请注意,我的问题不是GitHub VCS连接问题。只是我的Windows TeamCity代理与CentOS Linux服务器之间的问题 完整stack

我设置了从Windows代理连接到Linux的SSH登录,但TeamCity给出了以下错误

[新生成问题]com.jcraft.jsch.JSchException:无效的privatekey:[B@5543cd

SSH Secure Shell生成的密钥对连接到服务器没有问题

类似的问题是,但这不是我的编程问题,而是teamcity内部的例外

请注意,我的问题不是GitHub VCS连接问题。只是我的Windows TeamCity代理与CentOS Linux服务器之间的问题

完整stacktrace如下所示

[步骤6/8]com.jcraft.jsch.JSchException:无效的私钥:[B@5543cd在com.jcraft.jsch.KeyPair.load(KeyPair.java:702)在com.jcraft.jsch.KeyPair.load(KeyPair.java:542)在com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)在com.jcraft.jsch.jsch.addIdentity(jsch.java:389)在com.jcraft.jsch.jsch.jsch.addIdentity(jsch:349)上位于jetbrains.buildServer.deployer.agent.ssh.SSHSessionProvider.initSessionKeyFile(SSHSessionProvider.java:110)位于jetbrains.buildServer.deployer.agent.agent.ssh.SSHSessionProvider.ssh.ssh.SSHExecRunner.createBuildProcess(SSHSexRunner.java:26)位于jetbrains.buildServer.agent.impl.runner.CallRunnerService.doCreateBuildProcess(CallRunnerService.java:71),位于jetbrains.buildServer.agent.impl.runner.CallRunnerService.createBuildProcess(CallRunnerService.java:47),位于jetbrains.buildServer.agent.impl.buildStages.runnerStages.start.CallRunnerStage.doBuildStage(CallRunnerStage.java:47)位于jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor$1.callStage(RunnerStagesExecutor.java:25)位于jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor$1.callStage(RunnerStagesExecutor.java:18)位于jetbrains.buildServer.agent.impl.BuildStagesExecutor.callRunStage(StagesExecutor.java:78)位于jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.doStages(StagesExecutor.java:37)位于jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor.doStages(RunnerStagesExecutor.java:18)位于jetbrains.buildServer.agent.impl.buildStages.startStages.steps.RunnerContextExecutor.callRunnerStages(RunnerContextExecutor.java:43)位于jetbrains.buildServer.agent.impl.buildStages.startStages.steps.StepExecutor.processNextStep(StepExecutor.java:25),位于jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.ExecuterRunnerStep(ForEachBuildRunnerStage.java:138)位于jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.runStep(ForEachBuildRunnerStage.java:123)位于jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.ExecuteBuilderRunnerStage(ForEachBuildRunnerStage.java:83)位于jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.doBuildStage(ForEachBuildRunnerStage.java:44)位于jetbrains.buildServer.agent.impl.buildStages.BuildStagesExecutor$1.callStage(BuildStagesExecutor.java:31)位于jetbrains.buildServer.impl.BuildStagesExecutor$1.callStage在jetbrains.buildServer.agent.impl.buildStages.StageExecutor.callRunStage(StageExecutor.java:78)在jetbrains.buildServer.agent.impl.buildStages.StageExecutor.doStages(StageExecutor.java:37)在jetbrains.buildServer.agent.impl.buildStages.buildStages.BuildStageExecutor.doStages(BuildStageExecutor.java:24)在jetbrains.buildServer.agent.impl.BuildRunAction.doStages(BuildRunAction.java:70)在jetbrains.buildServer.agent.impl.BuildRunAction.RunBuildRunAction(BuildRunAction.java:50)在jetbrains.buildServer.agent.impl.BuildAgentImpl.RunAction.RunBuildBuildRunAction(BuildRunAction.java:50)在jetbrains.BuildAgentServer.agent.impl.BuildAgentImpl.java:50上在jetbrains.buildServer.agent.impl.BuildAgentImpl$1.run(BuildAgentImpl.java:236)和java.lang.Thread.run(Thread.java:744)中


最有可能的是,您提供的私钥格式不是JSCH所期望的格式(即OpenSSH)

这里提供了类似的问题和答案:

对于来这里搜索Teamcity上“无效私钥”解决方案的所有人,解决方案是使用以下命令生成密钥:

ssh-keygen -t rsa -m PEM

文档中指出了这一点

在花了相当长的时间在这上面,运行正确的命令,并得到相同的无效privatekey错误后,我查找了JSch在查找什么?最终我找到了这段代码,它帮助我创建了它想要的密钥,并且我能够连接:

try {
        com.jcraft.jsch.KeyPair pair = com.jcraft.jsch.KeyPair.genKeyPair(new 
        JSch(), com.jcraft.jsch.KeyPair.RSA);
        ByteArrayOutputStream publicKeyOut = new ByteArrayOutputStream();
        ByteArrayOutputStream privateKeyOut = new ByteArrayOutputStream();
        pair.writePublicKey(publicKeyOut, "kamranbhatti");
        pair.writePrivateKey(privateKeyOut);
        String publicKey = new String(publicKeyOut.toByteArray());
        String privateKey = new String(privateKeyOut.toByteArray());
        System.out.println(publicKey);
        System.out.println(privateKey);

    } catch (Exception e) { 

          } 

我已将私钥复制到服务器,并且能够连接。

您能否编辑您的问题,具体描述您是如何生成此密钥的,以及您为密钥设置了Teamcity要读取的特定文件?这为我完成了任务。您应该会得到正确的答案:)