Package org.eclipse.jgit.junit.ssh
Class SshTestGitServer
java.lang.Object
org.eclipse.jgit.junit.ssh.SshTestGitServer
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 ClassesModifier and TypeClassDescriptionprivate static class
Simple echo command that echoes back the command string.private static class
private class
private class
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String
Simple echo test command.private final org.apache.sshd.common.util.threads.CloseableExecutorService
protected final Repository
protected final org.apache.sshd.server.SshServer
protected PublicKey
protected final String
-
Constructor Summary
ConstructorsConstructorDescriptionSshTestGitServer
(String testUser, Path testKey, Repository repository, byte[] hostKey) Creates a ssh git test server.SshTestGitServer
(String testUser, Path testKey, Repository repository, KeyPair hostKey) Creates a ssh git test server.SshTestGitServer
(String testUser, PublicKey testKey, Repository repository, KeyPair hostKey) Creates a ssh git test server. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addHostKey
(Path key, boolean inFront) Adds an additional host key to the server.void
addHostKey
(KeyPair key, boolean inFront) Adds an additional host key to the server.protected void
Configures the authentication mechanisms of this test server.protected void
Configures shell access for the test server.protected List
<org.apache.sshd.server.subsystem.SubsystemFactory> Configures the test server's subsystems (sftp, scp).void
Enable keyboard-interactive authentication.void
Enable password authentication.private List
<org.apache.sshd.server.auth.UserAuthFactory> org.apache.sshd.common.PropertyResolver
Retrieves the server'sPropertyResolver
, giving access to server properties.private static List
<org.apache.sshd.common.NamedFactory<org.apache.sshd.common.signature.Signature>> Apache MINA sshd 2.6.0 has removed DSA, DSA_CERT and RSA_CERT.private static KeyPair
readKeyPair
(byte[] keyMaterial) private static PublicKey
readPublicKey
(Path key) void
setPreamble
(String... lines) Sets the lines the server sends before its server identification in the initial protocol version exchange.void
setTestUserPublicKey
(Path key) Sets the test user's public key on the server.void
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 Details
-
ECHO_COMMAND
Simple echo test command. Replies with the command string as passed. If of the form "echo [int] anything", takes the integer value as a delay in seconds before replying, which may be useful to test various timeout-related things.- Since:
- 5.9
- See Also:
-
testUser
-
repository
-
hostKeys
-
server
protected final org.apache.sshd.server.SshServer server -
testKey
-
executorService
private final org.apache.sshd.common.util.threads.CloseableExecutorService executorService
-
-
Constructor Details
-
SshTestGitServer
public SshTestGitServer(@NonNull String testUser, @NonNull Path testKey, @NonNull Repository repository, @NonNull byte[] hostKey) throws IOException, 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
- public key file of the test userrepository
- to servehostKey
- the unencrypted private key to use as host key- Throws:
IOException
GeneralSecurityException
-
SshTestGitServer
public SshTestGitServer(@NonNull String testUser, @NonNull Path testKey, @NonNull Repository repository, @NonNull KeyPair hostKey) throws IOException, 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
- public key file of the test userrepository
- to servehostKey
- the unencrypted private key to use as host key- Throws:
IOException
GeneralSecurityException
- Since:
- 5.9
-
SshTestGitServer
public SshTestGitServer(@NonNull String testUser, @NonNull PublicKey testKey, @NonNull Repository repository, @NonNull KeyPair hostKey) Creates a ssh git test server. It serves one single repository, and accepts public-key authentication for exactly one test user.
-
-
Method Details
-
getSignatureFactories
private static List<org.apache.sshd.common.NamedFactory<org.apache.sshd.common.signature.Signature>> getSignatureFactories()Apache MINA sshd 2.6.0 has removed DSA, DSA_CERT and RSA_CERT. We have to set it up explicitly to still allow users to connect with DSA keys.- Returns:
- a list of supported signature factories
-
readPublicKey
- Throws:
IOException
GeneralSecurityException
-
readKeyPair
- Throws:
IOException
GeneralSecurityException
-
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
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 Path key, boolean inFront) throws IOException, 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:
IOException
- if the file denoted by thePath
key
cannot be readGeneralSecurityException
- if the key contained in the file cannot be read
-
addHostKey
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. -
getPropertyResolver
public org.apache.sshd.common.PropertyResolver getPropertyResolver()Retrieves the server'sPropertyResolver
, giving access to server properties.- Returns:
- the
PropertyResolver
- Since:
- 5.9
-
start
Starts the test server, listening on a random port.- Returns:
- the port the server listens on; test clients should connect to that port
- Throws:
IOException
-
stop
Stops the test server.- Throws:
IOException
-
setTestUserPublicKey
Sets the test user's public key on the server.- Parameters:
key
- to set- Throws:
IOException
- if the file cannot be readGeneralSecurityException
- if the public key cannot be extracted from the file
-
setTestUserPublicKey
Sets the test user's public key on the server.- Parameters:
key
- to set- Since:
- 5.8
-
setPreamble
Sets the lines the server sends before its server identification in the initial protocol version exchange.- Parameters:
lines
- to send- Since:
- 5.5
-