19
19
20
20
package org.ossreviewtoolkit.downloader.vcs
21
21
22
- import com.jcraft.jsch.JSch
23
- import com.jcraft.jsch.agentproxy.AgentProxyException
24
- import com.jcraft.jsch.agentproxy.RemoteIdentityRepository
25
- import com.jcraft.jsch.agentproxy.connector.SSHAgentConnector
26
- import com.jcraft.jsch.agentproxy.usocket.JNAUSocketFactory
27
-
28
22
import com.vdurmont.semver4j.Requirement
29
23
30
24
import java.io.File
31
25
import java.io.IOException
32
26
import java.net.Authenticator
27
+ import java.net.InetSocketAddress
28
+ import java.security.PublicKey
33
29
import java.util.regex.Pattern
34
30
35
31
import org.apache.logging.log4j.kotlin.Logging
@@ -45,7 +41,10 @@ import org.eclipse.jgit.transport.CredentialsProvider
45
41
import org.eclipse.jgit.transport.SshSessionFactory
46
42
import org.eclipse.jgit.transport.TagOpt
47
43
import org.eclipse.jgit.transport.URIish
48
- import org.eclipse.jgit.transport.ssh.jsch.JschConfigSessionFactory
44
+ import org.eclipse.jgit.transport.sshd.DefaultProxyDataFactory
45
+ import org.eclipse.jgit.transport.sshd.JGitKeyCache
46
+ import org.eclipse.jgit.transport.sshd.ServerKeyDatabase
47
+ import org.eclipse.jgit.transport.sshd.SshdSessionFactory
49
48
50
49
import org.ossreviewtoolkit.downloader.VersionControlSystem
51
50
import org.ossreviewtoolkit.downloader.WorkingTree
@@ -73,30 +72,25 @@ class Git : VersionControlSystem(), CommandLineTool {
73
72
// discrepancies in the way .netrc files are interpreted between JGit's and ORT's implementation.
74
73
CredentialsProvider .setDefault(AuthenticatorCredentialsProvider )
75
74
76
- val sessionFactory = object : JschConfigSessionFactory () {
77
- override fun configureJSch (jsch : JSch ) {
78
- // Accept unknown hosts.
79
- JSch .setConfig(" StrictHostKeyChecking" , " no" )
80
-
81
- // Limit to "publickey" to avoid "keyboard-interactive" prompts.
82
- JSch .setConfig(" PreferredAuthentications" , " publickey" )
83
-
84
- try {
85
- // By default, JGit configures JSch to use identity files (named "identity", "id_rsa" or
86
- // "id_dsa") from the current user's ".ssh" directory only, also see
87
- // https://www.codeaffine.com/2014/12/09/jgit-authentication/. Additionally configure JSch to
88
- // connect to an SSH-Agent if available.
89
- if (SSHAgentConnector .isConnectorAvailable()) {
90
- val socketFactory = JNAUSocketFactory ()
91
- val connector = SSHAgentConnector (socketFactory)
92
- jsch.identityRepository = RemoteIdentityRepository (connector)
93
- }
94
- } catch (e: AgentProxyException ) {
95
- e.showStackTrace()
96
-
97
- logger.error { " Could not create SSH Agent connector: ${e.collectMessages()} " }
98
- }
99
- }
75
+ // Create a dummy key database that accepts any key from any (unknown) host.
76
+ val dummyKeyDatabase = object : ServerKeyDatabase {
77
+ override fun lookup (
78
+ connectAddress : String ,
79
+ remoteAddress : InetSocketAddress ,
80
+ config : ServerKeyDatabase .Configuration
81
+ ) = emptyList<PublicKey >()
82
+
83
+ override fun accept (
84
+ connectAddress : String ,
85
+ remoteAddress : InetSocketAddress ,
86
+ serverKey : PublicKey ,
87
+ config : ServerKeyDatabase .Configuration ,
88
+ provider : CredentialsProvider ?
89
+ ) = true
90
+ }
91
+
92
+ val sessionFactory = object : SshdSessionFactory (JGitKeyCache (), DefaultProxyDataFactory ()) {
93
+ override fun getServerKeyDatabase (homeDir : File , sshDir : File ) = dummyKeyDatabase
100
94
}
101
95
102
96
SshSessionFactory .setInstance(sessionFactory)
0 commit comments