Teamcity SSH私钥登录失败:私钥无效
我设置了从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)中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
最有可能的是,您提供的私钥格式不是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要读取的特定文件?这为我完成了任务。您应该会得到正确的答案:)