Package org.eclipse.jgit.junit.ssh
Class SshTestGitServer
- java.lang.Object
-
- org.eclipse.jgit.junit.ssh.SshTestGitServer
-
public class SshTestGitServer extends java.lang.Object
A simple ssh/sftp git test server based on Apache MINA sshd.Supports only a single repository. Authenticates only the given test user against his given test public key. Supports fetch and push.
- Since:
- 5.2
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
SshTestGitServer.FakeUserAuthGSS
private class
SshTestGitServer.GitReceivePackCommand
private class
SshTestGitServer.GitUploadPackCommand
-
Field Summary
Fields Modifier and Type Field Description private org.apache.sshd.common.util.threads.CloseableExecutorService
executorService
protected java.util.List<java.security.KeyPair>
hostKeys
protected Repository
repository
protected org.apache.sshd.server.SshServer
server
protected java.security.PublicKey
testKey
protected java.lang.String
testUser
-
Constructor Summary
Constructors Constructor Description SshTestGitServer(java.lang.String testUser, java.nio.file.Path testKey, Repository repository, byte[] hostKey)
Creates a ssh git test server.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addHostKey(java.nio.file.Path key, boolean inFront)
Adds an additional host key to the server.void
addHostKey(java.security.KeyPair key, boolean inFront)
Adds an additional host key to the server.protected void
configureAuthentication()
Configures the authentication mechanisms of this test server.protected void
configureShell()
Configures shell access for the test server.protected java.util.List<org.apache.sshd.server.subsystem.SubsystemFactory>
configureSubsystems()
Configures the test server's subsystems (sftp, scp).void
enableKeyboardInteractiveAuthentication()
Enable keyboard-interactive authentication.void
enablePasswordAuthentication()
Enable password authentication.private java.util.List<org.apache.sshd.server.auth.UserAuthFactory>
getAuthFactories()
void
setPreamble(java.lang.String... lines)
Sets the lines the server sends before its server identification in the initial protocol version exchange.void
setTestUserPublicKey(java.nio.file.Path key)
Sets the test user's public key on the server.void
setTestUserPublicKey(java.security.PublicKey key)
Sets the test user's public key on the server.int
start()
Starts the test server, listening on a random port.void
stop()
Stops the test server.
-
-
-
Field Detail
-
testUser
@NonNull protected final java.lang.String testUser
-
repository
@NonNull protected final Repository repository
-
hostKeys
@NonNull protected final java.util.List<java.security.KeyPair> hostKeys
-
server
protected final org.apache.sshd.server.SshServer server
-
testKey
@NonNull protected java.security.PublicKey testKey
-
executorService
private final org.apache.sshd.common.util.threads.CloseableExecutorService executorService
-
-
Constructor Detail
-
SshTestGitServer
public SshTestGitServer(@NonNull java.lang.String testUser, @NonNull java.nio.file.Path testKey, @NonNull Repository repository, @NonNull byte[] hostKey) throws java.io.IOException, java.security.GeneralSecurityException
Creates a ssh git test server. It serves one single repository, and accepts public-key authentication for exactly one test user.- Parameters:
testUser
- user name of the test usertestKey
- private key file of the test user; the server will only user the public key from itrepository
- to servehostKey
- the unencrypted private key to use as host key- Throws:
java.io.IOException
java.security.GeneralSecurityException
-
-
Method Detail
-
getAuthFactories
private java.util.List<org.apache.sshd.server.auth.UserAuthFactory> getAuthFactories()
-
configureAuthentication
protected void configureAuthentication()
Configures the authentication mechanisms of this test server. Invoked from the constructor. The default sets up public key authentication for the test user, and a gssapi-with-mic authenticator that pretends to support this mechanism, but that then refuses to authenticate anyone.
-
configureSubsystems
@NonNull protected java.util.List<org.apache.sshd.server.subsystem.SubsystemFactory> configureSubsystems()
Configures the test server's subsystems (sftp, scp). Invoked from the constructor. The default provides a simple SFTP setup with the root directory as the given repository's .git directory's parent. (I.e., at the directory containing the .git directory.)- Returns:
- A possibly empty collection of subsystems.
-
configureShell
protected void configureShell()
Configures shell access for the test server. The default provides no shell at all.
-
addHostKey
public void addHostKey(@NonNull java.nio.file.Path key, boolean inFront) throws java.io.IOException, java.security.GeneralSecurityException
Adds an additional host key to the server.- Parameters:
key
- path to the private key file; should not be encryptedinFront
- whether to add the new key before other existing keys- Throws:
java.io.IOException
- if the file denoted by thePath
key
cannot be readjava.security.GeneralSecurityException
- if the key contained in the file cannot be read
-
addHostKey
public void addHostKey(@NonNull java.security.KeyPair key, boolean inFront)
Adds an additional host key to the server.- Parameters:
key
-KeyPair
to addinFront
- whether to add the new key before other existing keys- Since:
- 5.8
-
enablePasswordAuthentication
public void enablePasswordAuthentication()
Enable password authentication. The server will accept the test user's name, converted to all upper-case, as password.
-
enableKeyboardInteractiveAuthentication
public void enableKeyboardInteractiveAuthentication()
Enable keyboard-interactive authentication. The server will accept the test user's name, converted to all upper-case, as password.
-
start
public int start() throws java.io.IOException
Starts the test server, listening on a random port.- Returns:
- the port the server listens on; test clients should connect to that port
- Throws:
java.io.IOException
-
stop
public void stop() throws java.io.IOException
Stops the test server.- Throws:
java.io.IOException
-
setTestUserPublicKey
public void setTestUserPublicKey(java.nio.file.Path key) throws java.io.IOException, java.security.GeneralSecurityException
Sets the test user's public key on the server.- Parameters:
key
- to set- Throws:
java.io.IOException
- if the file cannot be readjava.security.GeneralSecurityException
- if the public key cannot be extracted from the file
-
setTestUserPublicKey
public void setTestUserPublicKey(@NonNull java.security.PublicKey key)
Sets the test user's public key on the server.- Parameters:
key
- to set- Since:
- 5.8
-
setPreamble
public void setPreamble(java.lang.String... lines)
Sets the lines the server sends before its server identification in the initial protocol version exchange.- Parameters:
lines
- to send- Since:
- 5.5
-
-