Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSch为Java生成的密钥对提供无效私钥错误_Java_Groovy_Ssh_Public Key Encryption_Jsch - Fatal编程技术网

JSch为Java生成的密钥对提供无效私钥错误

JSch为Java生成的密钥对提供无效私钥错误,java,groovy,ssh,public-key-encryption,jsch,Java,Groovy,Ssh,Public Key Encryption,Jsch,我正在使用Java的KeyPairGenerator生成一个密钥对,用于JGit。但是,当试图使用生成的私钥时,JSch(JGit的底层SSH实现)总是给我“invalid privatekey”错误 以下是堆栈跟踪: 捕获的org.eclipse.jgit.api.errors.TransportException:ssh://git@bitbucket.hostname/~wlaw/bitbucket\u upgrade\u test\u repo.git:无效的私钥:[B@4650a407

我正在使用Java的
KeyPairGenerator
生成一个密钥对,用于JGit。但是,当试图使用生成的私钥时,JSch(JGit的底层SSH实现)总是给我“invalid privatekey”错误

以下是堆栈跟踪:

捕获的
org.eclipse.jgit.api.errors.TransportException:ssh://git@bitbucket.hostname/~wlaw/bitbucket\u upgrade\u test\u repo.git:无效的私钥:[B@4650a407
org.eclipse.jgit.api.errors.TransportException:ssh://git@bitbucket.hostname/~wlaw/bitbucket\u upgrade\u test\u repo.git:无效的私钥:[B@4650a407
位于org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:254)
位于org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:306)
位于org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:200)
位于org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:1)
在java_util_concurrent_可调用$call.call(未知源)
at Test.run(Test.groovy:95)
原因:org.eclipse.jgit.errors.TransportException:ssh://git@bitbucket.hostname/~wlaw/bitbucket\u upgrade\u test\u repo.git:无效的私钥:[B@4650a407
位于org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:183)
位于org.eclipse.jgit.transport.sshttransport.getSession(sshttransport.java:140)
位于org.eclipse.jgit.transport.TransportGitsh$SshFetchConnection。(transportGitsh.java:280)
位于org.eclipse.jgit.transport.transportGitsh.openFetch(transportGitsh.java:170)
位于org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:137)
位于org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:123)
位于org.eclipse.jgit.transport.transport.fetch(transport.java:1271)
位于org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:243)
…还有5个
原因:com.jcraft.jsch.JSchException:无效的私钥:[B@4650a407
位于com.jcraft.jsch.KeyPair.load(KeyPair.java:948)
位于com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:46)
位于com.jcraft.jsch.jsch.addIdentity(jsch.java:442)
在测试$1.createDefaultJSch时(Test.groovy:82)
位于org.eclipse.jgit.transport.JschConfigSessionFactory.getJSch(JschConfigSessionFactory.java:335)
位于org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:293)
位于org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:200)
位于org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:130)
…还有12个
这是我的密码:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA")
keyGen.initialize(4096)
KeyPair pair = keyGen.generateKeyPair()

def pub = pair.public as RSAPublicKey
def priv = pair.private as RSAPrivateCrtKey

Base64.Encoder encoder = Base64.getEncoder();
def publicKeyText = "ssh-rsa " + encoder.encodeToString(keyBlob(pub.publicExponent, pub.modulus))

def id = bitbucket.post {
    request.uri.path = "/rest/ssh/1.0/keys"
    request.uri.query = [user: bitbucketUsername]
    request.body = new JsonBuilder([text: publicKeyText]).toPrettyString()
    response.success { FromServer fs, Object responseBody ->
        responseBody.id
    }
    response.failure { FromServer fs, Object responseBody ->
        println fs.statusCode
        println fs.message
        println fs.headers
        println responseBody
        null
    }
}

def privateKeyText = "-----BEGIN RSA PRIVATE KEY-----\n" +
    encoder.encodeToString(priv.getEncoded()) +
    "\n-----END RSA PRIVATE KEY-----\n"

new File("priv").text = privateKeyText
new File("pub").text = publicKeyText

SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() {
    @Override
    protected void configure(OpenSshConfig.Host hc, com.jcraft.jsch.Session session) {}

    @Override
    protected JSch createDefaultJSch(FS fs) throws JSchException {
        JSch defaultJSch = super.createDefaultJSch(fs)
        defaultJSch.addIdentity("test", privateKeyText.bytes, publicKeyText.bytes, null)
    }
};

CloneCommand cloneCommand = Git.cloneRepository()
cloneCommand.setURI("ssh://git@$bitbucketHostPort/$project/${repo}.git")
cloneCommand.setTransportConfigCallback(new TransportConfigCallback() {
    @Override
    void configure(Transport transport) {
        SshTransport sshTransport = (SshTransport) transport
        sshTransport.setSshSessionFactory(sshSessionFactory)
    }
})
cloneCommand.call()
我在JSch源代码中进行了一些调试,发现该库在com.jcraft.JSch.KeyPairRSA.java的第228行获得ArrayIndexOutOfBoundsException

是我在格式化JSch的密钥时出错了吗?还是这可能是Java实现的密钥对中的错误,或者可能是JSch实现的解析错误

下面是由我的代码生成的示例密钥对:

【代码>ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrsrsa a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a美赞臣4.一个非政府组织(B6)一个非政府组织(B6)一个非政府组织(6)一个非政府组织(6)一个非政府组织(6)一个非政府组织(6)GGGG点+非政府GG点+非政府(8)非政府组织(8)非政府组织(8)一个非政府组织(6)非政府组织(6个非政府组织(6个非政府研究)的非非政府组织(7个非政府组织)的非政府军(7个非政府军)非政府军(7个非政府军)非政府(非政府组织)非非政府的非政府组织(8个非政府组织(非政府军)非政府组织)非政府的非政府组织(非政府的非政府组织)非政府组织(非政府组织)非政府组织(非政府的非政府的非政府组织(非政府组织)非政府的非政府组织)非政府的非政府的非政府的非政府的非政府的非政府组织(非政府的非政府(非政府6AVSZ2RJLFCVQTYOS0U/+sUWHXNQ2DAW4PSGLHKNB3NDHSJZK7W==
----开始RSA私钥-----
我的研究成果是一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于一个关于关于关于Vla0djplq2.在2个月的研究中,他们发现了一种新的研究方法:一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZUUJM6AVSZ2RJLFCVQTYO2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2)2 BAPO+FM6Fx4dTeU99zc2.在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在香港,或者在中国,在中国,在中国,在中国,在中国,或者或者或者或者在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,在中国,Ofsvq9ZxQsATQAk1y83vPbTUNc+XJ8X/Jv(2)这是一个网站,它是一个网站,一个网站,一个网站,一个网站,一个网站,一个网站,一个政府,一个政府部门,一个政府,一个网站,一个网站,一个政府部门,一个网站,一个网站,一个网站,一个网站,一个网站,一个网站,一个网站,一个网站,一个网站,一个,一个政府,一个政府,一个,一个政府,一个学校,一个政府,一个学校,一个政府,一个学校,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个部门,一个政府,一个政府,一个政府,一个政府,一个部门,一个政府,一个政府,一个政府,一个政府,一个政府,一个政府,一个,一个,gp9bycr/+sHkM9mXQeT/3tjrBdXppRjy2.研究者们提出了一种新的研究方法——一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究者们提出了一种新的研究方法,一种新的研究者们提出了一种新的研究方法,一种新的研究方法,一种新的研究,一种新的研究方法,一种新的研究者们提出了一种新的一种新的研究,一种新的研究者们提出了一种新的新的研究方法,一种新的研究方法,一种新的研究者们的研究了一种新的新的研究者们的研究者们的研究了一种新的研究。他们的研究者们的研究了一种新的研究者们的研究了一种新的研究成果,他们的研究了一种新的研究方法,他们的研究了一种新的研究成果,他们的研究RG+o3La3DzA7qEMQ6Lpy3abjyaaWOIz1Z/N3GQGWRQGEZPIZPNV04E5WS9X2ZAOIBAH0IAMWJRRUIC1SV4PVMUWWVHPYSDKR7MTY