From 1029b6a4869364207994d6a4bcf5dea52113fa89 Mon Sep 17 00:00:00 2001 From: Sandra Parsick Date: Sun, 27 Aug 2023 18:58:50 +0200 Subject: [PATCH 1/4] feature: add public key authentication --- .../gitserver/GitServerContainer.java | 25 ++++ .../testcontainers/gitserver/SshIdentity.java | 25 ++++ src/main/resources/id_client | 5 + src/main/resources/id_client.pub | 1 + src/main/resources/sshd_config | 118 ++++++++++++++++++ ...tServerContainerJUnit5IntegrationTest.java | 2 +- .../gitserver/GitServerContainerTest.java | 41 ++++++ src/{main => test}/resources/logback-test.xml | 0 8 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java create mode 100644 src/main/resources/id_client create mode 100644 src/main/resources/id_client.pub create mode 100644 src/main/resources/sshd_config rename src/{main => test}/resources/logback-test.xml (100%) diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java index 038e3bc..f1e1cd1 100644 --- a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java @@ -1,6 +1,7 @@ package com.github.sparsick.testcontainers.gitserver; import com.github.dockerjava.api.command.InspectContainerResponse; +import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.utility.DockerImageName; @@ -16,6 +17,8 @@ public class GitServerContainer extends GenericContainer { private static final String GIT_PASSWORD_KEY = "GIT_PASSWORD"; private static DockerImageName DEFAULT_DOCKER_IMAGE_NAME = DockerImageName.parse("rockstorm/git-server"); private String gitRepoName = "testRepo"; + private boolean sshKeyAuthEnabled = false; + private SshIdentity sshClientIdentity; /** * @@ -29,6 +32,7 @@ public GitServerContainer(DockerImageName dockerImageName) { } else { withExposedPorts(22); } + withCommand("/usr/sbin/sshd", "-D", "-e"); } /** @@ -57,6 +61,23 @@ public GitServerContainer withGitRepo(String gitRepoName) { return this; } + public GitServerContainer withSshKeyAuth() { + try { + sshClientIdentity = new SshIdentity( + this.getClass().getClassLoader().getResourceAsStream("id_client").readAllBytes(), + this.getClass().getClassLoader().getResourceAsStream("id_client.pub").readAllBytes(), + new byte[0]); + + withClasspathResourceMapping("id_client.pub", "/home/git/.ssh/authorized_keys", BindMode.READ_ONLY); + withClasspathResourceMapping("sshd_config", "/etc/ssh/sshd_config", BindMode.READ_ONLY); + + + } catch (IOException e) { + throw new RuntimeException(e); + } + return this; + } + /** * Return the SSH URI for git repo. * @@ -91,4 +112,8 @@ public String getGitPassword() { var password = getEnvMap().get(GIT_PASSWORD_KEY); return password != null ? password : "12345"; } + + public SshIdentity getSshClientIdentity() { + return sshClientIdentity; + } } diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java new file mode 100644 index 0000000..604da68 --- /dev/null +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java @@ -0,0 +1,25 @@ +package com.github.sparsick.testcontainers.gitserver; + +public class SshIdentity { + private byte[] privateKey; + private byte[] publicKey; + private byte[] passphrase; + + public SshIdentity(byte[] privateKey, byte[] publicKey, byte[] passphrase) { + this.privateKey = privateKey; + this.publicKey = publicKey; + this.passphrase = passphrase; + } + + public byte[] getPrivateKey() { + return privateKey; + } + + public byte[] getPublicKey() { + return publicKey; + } + + public byte[] getPassphrase() { + return passphrase; + } +} diff --git a/src/main/resources/id_client b/src/main/resources/id_client new file mode 100644 index 0000000..121753d --- /dev/null +++ b/src/main/resources/id_client @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIAv2zdBPnakBt4UCoTDRMLDKOrm0JiPc9CwRFqvcha5coAoGCCqGSM49 +AwEHoUQDQgAEKArvTWElvX1Erm/essBeGKQzsGrHPJjGJprwEOqV/MKjUPZ1jxl3 +iZL9m/PqZrKc94PGgpalIFdxOcdrgwTLMg== +-----END EC PRIVATE KEY----- diff --git a/src/main/resources/id_client.pub b/src/main/resources/id_client.pub new file mode 100644 index 0000000..64a8e63 --- /dev/null +++ b/src/main/resources/id_client.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCgK701hJb19RK5v3rLAXhikM7BqxzyYxiaa8BDqlfzCo1D2dY8Zd4mS/Zvz6maynPeDxoKWpSBXcTnHa4MEyzI= sparsick@Thinkpad-T14 diff --git a/src/main/resources/sshd_config b/src/main/resources/sshd_config new file mode 100644 index 0000000..674420f --- /dev/null +++ b/src/main/resources/sshd_config @@ -0,0 +1,118 @@ +# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel DEBUG + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes +#PubkeyAcceptedAlgorithms ssh-rsa + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#KbdInteractiveAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the KbdInteractiveAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via KbdInteractiveAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and KbdInteractiveAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +# Feel free to re-enable these if your use case requires them. +AllowTcpForwarding no +GatewayPorts no +X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/lib/ssh/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server \ No newline at end of file diff --git a/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerJUnit5IntegrationTest.java b/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerJUnit5IntegrationTest.java index b94aeff..d0c5aff 100644 --- a/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerJUnit5IntegrationTest.java +++ b/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerJUnit5IntegrationTest.java @@ -21,7 +21,7 @@ public class GitServerContainerJUnit5IntegrationTest { @Container - private GitServerContainer containerUnderTest = new GitServerContainer(DockerImageName.parse("rockstorm/git-server:2.38")); + private GitServerContainer containerUnderTest = new GitServerContainer(DockerImageName.parse("rockstorm/git-server")); @TempDir private File tempDir; diff --git a/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java b/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java index df6d247..b829b68 100644 --- a/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java +++ b/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java @@ -1,10 +1,13 @@ package com.github.sparsick.testcontainers.gitserver; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.transport.SshTransport; import org.eclipse.jgit.transport.ssh.jsch.JschConfigSessionFactory; import org.eclipse.jgit.transport.ssh.jsch.OpenSshConfig; +import org.eclipse.jgit.util.FS; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; @@ -114,4 +117,42 @@ protected void configure(OpenSshConfig.Host hc, Session session) { .call() ); } + + @ParameterizedTest + @ArgumentsSource(SupportedGitServerImages.class) + void pubKeyAuth(DockerImageName dockerImageName) { + var containerUnderTest = new GitServerContainer(dockerImageName).withSshKeyAuth(); + + containerUnderTest.start(); + + URI gitRepoURI = containerUnderTest.getGitRepoURIAsSSH(); + + assertThatNoException().isThrownBy(() -> + Git.cloneRepository() + .setURI(gitRepoURI.toString()) + .setDirectory(tempDir) + .setBranch("main") + .setTransportConfigCallback(transport -> { + var sshTransport = (SshTransport) transport; + sshTransport.setSshSessionFactory(new JschConfigSessionFactory() { + + @Override + protected JSch createDefaultJSch(FS fs ) throws JSchException { + JSch defaultJSch = super.createDefaultJSch( fs ); + SshIdentity sshIdentity = containerUnderTest.getSshClientIdentity(); + byte[] privateKey = sshIdentity.getPrivateKey(); + byte[] publicKey = sshIdentity.getPublicKey(); + byte[] passphrase = sshIdentity.getPassphrase(); + defaultJSch.addIdentity("git-server", privateKey, publicKey, passphrase); + return defaultJSch; + } + @Override + protected void configure(OpenSshConfig.Host hc, Session session) { + session.setConfig("StrictHostKeyChecking", "no"); + } + }); + }) + .call() + ); + } } diff --git a/src/main/resources/logback-test.xml b/src/test/resources/logback-test.xml similarity index 100% rename from src/main/resources/logback-test.xml rename to src/test/resources/logback-test.xml From cd759de8e29475c353037575031399d73007ffc4 Mon Sep 17 00:00:00 2001 From: Sandra Parsick Date: Sun, 27 Aug 2023 19:04:58 +0200 Subject: [PATCH 2/4] doc: add javadoc --- .../gitserver/GitServerContainer.java | 8 +++++++- .../testcontainers/gitserver/SshIdentity.java | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java index f1e1cd1..3a43e29 100644 --- a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java @@ -17,7 +17,6 @@ public class GitServerContainer extends GenericContainer { private static final String GIT_PASSWORD_KEY = "GIT_PASSWORD"; private static DockerImageName DEFAULT_DOCKER_IMAGE_NAME = DockerImageName.parse("rockstorm/git-server"); private String gitRepoName = "testRepo"; - private boolean sshKeyAuthEnabled = false; private SshIdentity sshClientIdentity; /** @@ -113,6 +112,13 @@ public String getGitPassword() { return password != null ? password : "12345"; } + /** + * Return the identity information for public key authentication. + * + * If {@code withSshKeyAuth} was not called, then it returns null. + * + * @return identity information for a public key authentication + */ public SshIdentity getSshClientIdentity() { return sshClientIdentity; } diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java index 604da68..3c13536 100644 --- a/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java @@ -1,5 +1,8 @@ package com.github.sparsick.testcontainers.gitserver; +/** + * Value object for identity information for a public key authentication. + */ public class SshIdentity { private byte[] privateKey; private byte[] publicKey; @@ -11,14 +14,29 @@ public SshIdentity(byte[] privateKey, byte[] publicKey, byte[] passphrase) { this.passphrase = passphrase; } + /** + * SSH private key + * + * @return + */ public byte[] getPrivateKey() { return privateKey; } + /** + * SSH public key + * + * @return + */ public byte[] getPublicKey() { return publicKey; } + /** + * Password for the SSH private key + * + * @return + */ public byte[] getPassphrase() { return passphrase; } From c3fc4d2e3d7608a61c5c958a8914e94c79e4618e Mon Sep 17 00:00:00 2001 From: Sandra Parsick Date: Sun, 27 Aug 2023 19:19:21 +0200 Subject: [PATCH 3/4] refactor: add enum with supported git server version --- .../gitserver/GitServerVersions.java | 30 +++++++++++++++++++ .../testcontainers/gitserver/SshIdentity.java | 6 ++-- .../gitserver/GitServerContainerTest.java | 21 +++++++------ .../gitserver/SupportedGitServerImages.java | 15 ---------- 4 files changed, 43 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java delete mode 100644 src/test/java/com/github/sparsick/testcontainers/gitserver/SupportedGitServerImages.java diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java new file mode 100644 index 0000000..4a5c63e --- /dev/null +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java @@ -0,0 +1,30 @@ +package com.github.sparsick.testcontainers.gitserver; + +import org.testcontainers.utility.DockerImageName; + +/** + * List of supported Git server version based on the docker image "rockstorm/git-server" + * + */ +public enum GitServerVersions { + + V2_40(DockerImageName.parse("rockstorm/git-server:2.40")), + V2_38(DockerImageName.parse("rockstorm/git-server:2.38")), + V2_36(DockerImageName.parse("rockstorm/git-server:2.36")), + V2_34_2(DockerImageName.parse("rockstorm/git-server:2.34.2")), + V2_34(DockerImageName.parse("rockstorm/git-server:2.34")); + + private final DockerImageName dockerImageName; + + GitServerVersions(DockerImageName dockerImageName) { + this.dockerImageName = dockerImageName; + } + + /** + * + * @return docker image name + */ + public DockerImageName getDockerImageName() { + return dockerImageName; + } +} diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java index 3c13536..67fc5ff 100644 --- a/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java @@ -17,7 +17,7 @@ public SshIdentity(byte[] privateKey, byte[] publicKey, byte[] passphrase) { /** * SSH private key * - * @return + * @return SSH private key */ public byte[] getPrivateKey() { return privateKey; @@ -26,7 +26,7 @@ public byte[] getPrivateKey() { /** * SSH public key * - * @return + * @return SSH public key */ public byte[] getPublicKey() { return publicKey; @@ -35,7 +35,7 @@ public byte[] getPublicKey() { /** * Password for the SSH private key * - * @return + * @return Password for the SSH private key */ public byte[] getPassphrase() { return passphrase; diff --git a/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java b/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java index b829b68..d939767 100644 --- a/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java +++ b/src/test/java/com/github/sparsick/testcontainers/gitserver/GitServerContainerTest.java @@ -11,8 +11,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ArgumentsSource; -import org.testcontainers.shaded.com.github.dockerjava.core.DockerContextMetaFile; +import org.junit.jupiter.params.provider.EnumSource; import org.testcontainers.utility.DockerImageName; import java.io.File; @@ -70,9 +69,9 @@ void exposedPortIs22() { } @ParameterizedTest - @ArgumentsSource(SupportedGitServerImages.class) - void containerStarted(DockerImageName dockerImageName) { - var containerUnderTest = new GitServerContainer(dockerImageName); + @EnumSource(GitServerVersions.class) + void containerStarted(GitServerVersions gitServer) { + var containerUnderTest = new GitServerContainer(gitServer.getDockerImageName()); containerUnderTest.start(); @@ -91,9 +90,9 @@ void gitRepoURI() { } @ParameterizedTest - @ArgumentsSource(SupportedGitServerImages.class) - void setupGitRepo(DockerImageName dockerImageName) { - var containerUnderTest = new GitServerContainer(dockerImageName).withGitRepo("testRepoName"); + @EnumSource(GitServerVersions.class) + void setupGitRepo(GitServerVersions gitServer) { + var containerUnderTest = new GitServerContainer(gitServer.getDockerImageName()).withGitRepo("testRepoName"); containerUnderTest.start(); @@ -119,9 +118,9 @@ protected void configure(OpenSshConfig.Host hc, Session session) { } @ParameterizedTest - @ArgumentsSource(SupportedGitServerImages.class) - void pubKeyAuth(DockerImageName dockerImageName) { - var containerUnderTest = new GitServerContainer(dockerImageName).withSshKeyAuth(); + @EnumSource(GitServerVersions.class) + void pubKeyAuth(GitServerVersions gitServer) { + var containerUnderTest = new GitServerContainer(gitServer.getDockerImageName()).withSshKeyAuth(); containerUnderTest.start(); diff --git a/src/test/java/com/github/sparsick/testcontainers/gitserver/SupportedGitServerImages.java b/src/test/java/com/github/sparsick/testcontainers/gitserver/SupportedGitServerImages.java deleted file mode 100644 index f4e8a00..0000000 --- a/src/test/java/com/github/sparsick/testcontainers/gitserver/SupportedGitServerImages.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.sparsick.testcontainers.gitserver; - -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.ArgumentsProvider; -import org.testcontainers.utility.DockerImageName; - -import java.util.stream.Stream; - -public class SupportedGitServerImages implements ArgumentsProvider { - @Override - public Stream provideArguments(ExtensionContext extensionContext) { - return Stream.of("2.40", "2.38", "2.36", "2.34", "2.34.2").map(version -> DockerImageName.parse("rockstorm/git-server:" + version)).map(Arguments::of); - } -} From 42aae13ddcc52fde722d1304260ae3e059f1dc7a Mon Sep 17 00:00:00 2001 From: Sandra Parsick Date: Sun, 27 Aug 2023 19:25:56 +0200 Subject: [PATCH 4/4] doc: add javadoc --- .../gitserver/GitServerContainer.java | 5 +++++ .../gitserver/GitServerVersions.java | 15 +++++++++++++++ .../testcontainers/gitserver/SshIdentity.java | 7 +++++++ 3 files changed, 27 insertions(+) diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java index 3a43e29..3668a2d 100644 --- a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerContainer.java @@ -60,6 +60,11 @@ public GitServerContainer withGitRepo(String gitRepoName) { return this; } + /** + * Enabled SSH public key authentication. + * + * @return instance of the git server container + */ public GitServerContainer withSshKeyAuth() { try { sshClientIdentity = new SshIdentity( diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java index 4a5c63e..a578d7c 100644 --- a/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/GitServerVersions.java @@ -8,10 +8,25 @@ */ public enum GitServerVersions { + /** + * rockstorm/git-server:2.40 + */ V2_40(DockerImageName.parse("rockstorm/git-server:2.40")), + /** + * rockstorm/git-server:2.38 + */ V2_38(DockerImageName.parse("rockstorm/git-server:2.38")), + /** + * rockstorm/git-server:2.36 + */ V2_36(DockerImageName.parse("rockstorm/git-server:2.36")), + /** + * rockstorm/git-server:2.34.2 + */ V2_34_2(DockerImageName.parse("rockstorm/git-server:2.34.2")), + /** + * rockstorm/git-server:2.34 + */ V2_34(DockerImageName.parse("rockstorm/git-server:2.34")); private final DockerImageName dockerImageName; diff --git a/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java index 67fc5ff..5e27e23 100644 --- a/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java +++ b/src/main/java/com/github/sparsick/testcontainers/gitserver/SshIdentity.java @@ -8,6 +8,13 @@ public class SshIdentity { private byte[] publicKey; private byte[] passphrase; + /** + * Identity information for a public key authentication. + * + * @param privateKey SSH private key + * @param publicKey SSH public key + * @param passphrase password for private key + */ public SshIdentity(byte[] privateKey, byte[] publicKey, byte[] passphrase) { this.privateKey = privateKey; this.publicKey = publicKey;