diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 04ceb6e8..b7814523 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,4 +3,8 @@ updates: - package-ecosystem: "maven" directory: "/" schedule: - interval: "weekly" + interval: "daily" + - package-ecosystem: "github-actions" + directory: / + schedule: + interval: "daily" \ No newline at end of file diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 10fb79a1..bbef3509 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,6 +1,4 @@ # https://github.com/jenkinsci/.github/blob/master/.github/release-drafter.adoc +# https://www.jenkins.io/doc/developer/publishing/releasing-cd/#release-notes _extends: .github -# Semantic versioning is used d=for this plugin: https://semver.org/ -version-template: $MAJOR.$MINOR.$PATCH -tag-template: ssh-slaves-$NEXT_PATCH_VERSION -name-template: $NEXT_PATCH_VERSION + diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml new file mode 100644 index 00000000..0279984d --- /dev/null +++ b/.github/workflows/cd.yaml @@ -0,0 +1,15 @@ +# Note: additional setup is required, see https://www.jenkins.io/redirect/continuous-delivery-of-plugins + +name: cd +on: + workflow_dispatch: + check_run: + types: + - completed + +jobs: + maven-cd: + uses: jenkins-infra/github-reusable-workflows/.github/workflows/maven-cd.yml@v1 + secrets: + MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} + MAVEN_TOKEN: ${{ secrets.MAVEN_TOKEN }} diff --git a/.github/workflows/jenkins-security-scan.yml b/.github/workflows/jenkins-security-scan.yml new file mode 100644 index 00000000..17136b16 --- /dev/null +++ b/.github/workflows/jenkins-security-scan.yml @@ -0,0 +1,16 @@ +name: Jenkins Security Scan +on: + push: + branches: + - main +# see https://github.com/jenkins-infra/jenkins-security-scan/issues/3 +# pull_request: +# types: [ opened, synchronize, reopened ] + workflow_dispatch: + +jobs: + security-scan: + uses: jenkins-infra/jenkins-security-scan/.github/workflows/jenkins-security-scan.yaml@v1 + with: + java-cache: '' # Optionally enable use of a build dependency cache. Specify 'maven' or 'gradle' as appropriate. + java-version: 11 # What version of Java to set up for the build. diff --git a/.gitignore b/.gitignore index d1a7bef9..31f863d9 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ target .settings work bin +.DS_Store diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml index 94863e60..a65d82e1 100644 --- a/.mvn/extensions.xml +++ b/.mvn/extensions.xml @@ -2,6 +2,6 @@ io.jenkins.tools.incrementals git-changelist-maven-extension - 1.0-beta-7 + 1.3 diff --git a/.mvn/maven.config b/.mvn/maven.config index 2a0299c4..f7daf60d 100644 --- a/.mvn/maven.config +++ b/.mvn/maven.config @@ -1,2 +1,3 @@ -Pconsume-incrementals -Pmight-produce-incrementals +-Dchangelist.format=%d.v%s diff --git a/Jenkinsfile b/Jenkinsfile index 395c0053..66071b30 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,4 +6,4 @@ def buildConfiguration = [ [platform: 'linux', jdk: '11'], ] -buildPlugin(configurations: buildConfiguration) +buildPlugin(configurations: buildConfiguration, timeout: 90) diff --git a/README.md b/README.md index 06d42dee..ba58836b 100644 --- a/README.md +++ b/README.md @@ -21,4 +21,4 @@ Provides a means to launch agents via SSH. ## Notes This plugin is formerly known as "SSH Slaves Plugin". -It was renamed in [1.32.0](https://github.com/jenkinsci/ssh-slaves-plugin/releases/tag/ssh-slaves-1.31.0), but the plugin ID was retained as `ssh-slaves` to retain compatibility for the plugin users. +It was renamed in [1.31.0](https://github.com/jenkinsci/ssh-slaves-plugin/releases/tag/ssh-slaves-1.31.0), but the plugin ID was retained as `ssh-slaves` to retain compatibility for the plugin users. diff --git a/doc/CONFIGURE.md b/doc/CONFIGURE.md index dd0f1357..a63fe304 100644 --- a/doc/CONFIGURE.md +++ b/doc/CONFIGURE.md @@ -14,7 +14,7 @@ This means that **you have to install a JDK/JRE 8 on your agent** in order to ru The agent should have **enough memory** to run the remoting process and the builds. -**The agent needs to be reachable from the master**, +**The agent needs to be reachable from the Jenkins controller**, You have to be ensure that your Jenkins instance can connect through SSH port to your agent; you can check it from the command line. You will have to supply an account that can log in on the target machine. No root privileges are required. @@ -106,7 +106,7 @@ to see if an entry exists that matches the current connection. It is possible to the Java property `-Dhudson.plugins.sshslaves.verifiers.KnownHostsFileKeyVerificationStrategy.known_hosts_file=PATH_TO_FILE` This method does not make any updates to the Known Hosts file, instead using the file as a read-only source and expecting -someone with suitable access to the appropriate user account on the Jenkins master to update the file as required, +someone with suitable access to the appropriate user account on the Jenkins controller to update the file as required, potentially using the ssh hostname command to initiate a connection and update the file appropriately. #### Manually provided key Verification Strategy @@ -116,7 +116,7 @@ potentially using the ssh hostname command to initiate a connection and update t Checks the key provided by the remote host matches the key set by the user who configured this connection. The SSH key expected for this connection. This key should be in the form `algorithm value` -where algorithm is one of ssh-rsa or ssh-dss, and value is the Base 64 encoded content of the key. The keys should be placed in /etc/ssh/.pub +where `algorithm` is one of ssh-rsa, ssh-ed25519, or ecdsa-sha2-nistp256, and `value` is the base 64 encoded content of the key. The public keys for a Linux agent can be read from the agent file system at `/etc/ssh/.pub`. #### Manually trusted key Verification Strategy @@ -226,13 +226,16 @@ See [SSH Build Agents and Cygwin](https://wiki.jenkins.io/display/JENKINS/SSH+sl ### Launch Windows agents using Microsoft OpenSSH -The current version of the plugin does not run directly on PowerShell, you have to use prefix and suffix settings to trick the command and make it works, Windows 10 machines can run as SSH agents with the Microsoft OpenSSH server by using: +The current version of the plugin does not run when Powershell is the default shell for the agent system. To connect to the agent you have to use prefix and suffix settings to trick the command and make it work, Windows 10/11 machines can run as SSH agents with the Microsoft OpenSSH server by using: **Prefix Start Agent Command** ``` powershell -Command "cd C:\J\S ; C:\J\S\jdk\bin\java.exe -jar remoting.jar" ; exit 0 ; rem ' ``` + +`C:\J\S` is the path to the agent work directory on the agent system. If java is in a different directory, you will need to specify that directory instead of `C:\J\S\jdk\bin`. + **Suffix Start Agent Command** ``` diff --git a/doc/TROUBLESHOOTING.md b/doc/TROUBLESHOOTING.md index f776d316..9dec1d64 100644 --- a/doc/TROUBLESHOOTING.md +++ b/doc/TROUBLESHOOTING.md @@ -90,7 +90,7 @@ and see [Logging_and_Troubleshooting](https://en.wikibooks.org/wiki/OpenSSH/Logg ### Threads stuck at CredentialsProvider.trackAll -If you detect an adnormal number of threads and the thread dump showed a thread for each offline agent stuck waiting for a lock like this: +If you detect an abnormal number of threads and the thread dump showed a thread for each offline agent stuck waiting for a lock like this: ``` at hudson.XmlFile.write(XmlFile.java:186) @@ -140,7 +140,7 @@ java.lang.NoClassDefFoundError: com/trilead/ssh2/Connection ### After upgrade to ssh-slaves 1.28+ Failed to connect using SSH key credentials from files -The SSH Build Agents Plugin version newer than 1.28 uses ssh-credentials 1.14, this versions deprecated the use of "From the Jenkins master ~/.ssh", and "From a file on Jenkins master" SSH credential types because [SECURITY-440](https://jenkins.io/security/advisory/2018-06-25/#SECURITY-440), the ssh-credentials plugins should migrate these deprecated credentials to "Enter directly" type on restart but seems there are some cases that it fails or it is not possible. +The SSH Build Agents Plugin version newer than 1.28 uses ssh-credentials 1.14, this versions deprecated the use of "From the Jenkins controller ~/.ssh", and "From a file on Jenkins controller" SSH credential types because [SECURITY-440](https://jenkins.io/security/advisory/2018-06-25/#SECURITY-440), the ssh-credentials plugins should migrate these deprecated credentials to "Enter directly" type on restart but seems there are some cases that it fails or it is not possible. The issue is related to ssh-credentials and a deprecated type of credentials, the workaround it is to recreate the credential with the same ID using "Enter directly" for the key, probably if you only save again the credential it will be migrated. @@ -166,7 +166,8 @@ ConversionException: Could not call com.cloudbees.jenkins.plugins.sshcredentials ### Selenium Grid agents failed to connect -On recent versions of Jenkins Core, [Agent - Master Access Control](https://wiki.jenkins.io/display/JENKINS/Slave+To+Master+Access+Control) was introduced it seems causes an issue with Selenium Grid Agents, to fix this problem you have to disable: "Manage Jenkins" > "Configure Global Security", and check "Enable Agent → Master Access Control" (as it's said in Jenkin documentation) +On Jenkins Core 2.89.3, [Agent - Controller Access Control](https://wiki.jenkins.io/display/JENKINS/Slave+To+Master+Access+Control) was introduced it can causes an issue with Selenium Grid Agents, to fix this problem you have to disable: "Manage Jenkins" > "Configure Global Security", and check "Enable Agent → Controller Access Control" (as it's said in Jenkins documentation) +you can see more details at [JENKINS-49118](https://issues.jenkins.io/browse/JENKINS-49118) https://wiki.jenkins.io/display/JENKINS/Slave+To+Master+Access+Control "On the other hand, if all your agents are trusted to the same degree as your master, then it is safe to leave this subsystem off" @@ -194,7 +195,7 @@ Caused by: java.io.EOFException ### Corrupt agent workdir folder -If you experience a immmediate disconnection without any clear trace it could be related with a corrupt file in the agent workdir folder. +If you experience an immediate disconnection without any clear trace it could be related with a corrupt file in the agent workdir folder. ``` Apr 17, 2019 2:16:23 PM INFO hudson.remoting.SynchronousCommandTransport$ReaderThread run diff --git a/pom.xml b/pom.xml index 882722a9..30a8e783 100644 --- a/pom.xml +++ b/pom.xml @@ -5,11 +5,11 @@ org.jenkins-ci.plugins plugin - 4.15 + 4.40 ssh-slaves - ${revision}${changelist} + ${revision}.${changelist} hpi SSH Build Agents plugin @@ -25,11 +25,11 @@ - 1.31.6 - -SNAPSHOT - 2.222.4 + 1 + 999999-SNAPSHOT + 2.319.1 8 - 1.46 + 1.31.0 @@ -102,8 +102,8 @@ io.jenkins.tools.bom - bom-2.204.x - 18 + bom-2.319.x + 1409.v7659b_c072f18 pom import @@ -118,22 +118,25 @@ org.jenkins-ci.plugins trilead-api - 1.0.13 org.jenkins-ci.plugins credentials - 2.3.14 org.jenkins-ci.plugins ssh-credentials - 1.18.1 + + + org.jenkins-ci.modules + sshd + 3.242.va_db_9da_b_26a_c3 + test org.jenkins-ci.test docker-fixtures - 1.10 + 1.11 test @@ -145,27 +148,28 @@ io.jenkins configuration-as-code - ${configuration-as-code.version} test io.jenkins.configuration-as-code test-harness - ${configuration-as-code.version} test + + org.testcontainers + testcontainers + 1.17.2 + test + + + org.apache.commons + commons-compress + + + org.slf4j + slf4j-api + + + - - - - org.jenkins-ci.tools - maven-hpi-plugin - true - - 1.8 - 1.31.0 - - - - diff --git a/src/main/java/hudson/plugins/sshslaves/JavaProvider.java b/src/main/java/hudson/plugins/sshslaves/JavaProvider.java index 95e68ec6..fa738765 100644 --- a/src/main/java/hudson/plugins/sshslaves/JavaProvider.java +++ b/src/main/java/hudson/plugins/sshslaves/JavaProvider.java @@ -24,6 +24,7 @@ package hudson.plugins.sshslaves; import com.trilead.ssh2.Connection; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.ExtensionList; import hudson.ExtensionPoint; import hudson.slaves.SlaveComputer; @@ -32,13 +33,12 @@ import java.util.List; import java.util.Collections; -import javax.annotation.Nonnull; /** * Guess where Java is. */ public abstract class JavaProvider implements ExtensionPoint { - + private static final VersionNumber JAVA_LEVEL_8 = new VersionNumber("8"); /** @@ -68,12 +68,12 @@ public static ExtensionList all() { /** * Gets minimal required Java version. - * - * @return Minimal Java version required on the master and agent side. + * + * @return Minimal Java version required on the controller and agent side. * @since TODO - * + * */ - @Nonnull + @NonNull public static VersionNumber getMinJavaLevel() { return JAVA_LEVEL_8; } diff --git a/src/main/java/hudson/plugins/sshslaves/JavaVersionChecker.java b/src/main/java/hudson/plugins/sshslaves/JavaVersionChecker.java index 0205f22a..04a1bbf6 100644 --- a/src/main/java/hudson/plugins/sshslaves/JavaVersionChecker.java +++ b/src/main/java/hudson/plugins/sshslaves/JavaVersionChecker.java @@ -44,7 +44,6 @@ import hudson.slaves.SlaveComputer; import hudson.util.VersionNumber; import static java.util.logging.Level.FINE; -import static java.util.logging.Level.WARNING; /** * class to check if the version of java installed on the agent is a supported one. @@ -76,17 +75,12 @@ protected String resolveJava() throws InterruptedException, IOException { try { return checkJavaVersion(listener, javaCommand); } catch (IOException e) { - if(!"java".equalsIgnoreCase(javaCommand)){ - LOGGER.log(WARNING, "Java is not in the PATH nor configured with the javaPath setting," - + " Jenkins will try to guess where is Java," - + "this guess will be remove in the future."); - } LOGGER.log(FINE, "Failed to check the Java version",e); // try the next one } } } - throw new IOException("Java not found on " + computer + ". Install a Java 8 version on the Agent."); + throw new IOException("Java not found on " + computer + ". Install Java 8 or Java 11 on the Agent."); } @NonNull diff --git a/src/main/java/hudson/plugins/sshslaves/SSHConnector.java b/src/main/java/hudson/plugins/sshslaves/SSHConnector.java index 7e7770b2..d7c5b4b6 100644 --- a/src/main/java/hudson/plugins/sshslaves/SSHConnector.java +++ b/src/main/java/hudson/plugins/sshslaves/SSHConnector.java @@ -28,6 +28,7 @@ import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials; import com.cloudbees.plugins.credentials.common.StandardUsernameListBoxModel; import com.trilead.ssh2.Connection; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; import hudson.model.ItemGroup; import hudson.model.TaskListener; @@ -167,7 +168,7 @@ public SSHConnector(int port, String credentialsId, String jvmOptions, String ja } @Override - public SSHLauncher launch(String host, TaskListener listener) { + public SSHLauncher launch(@NonNull String host, TaskListener listener) { SSHLauncher sshLauncher = new SSHLauncher(host, port, credentialsId, jvmOptions, javaPath, prefixStartSlaveCmd, suffixStartSlaveCmd, launchTimeoutSeconds, maxNumRetries, retryWaitTime, sshHostKeyVerificationStrategy); sshLauncher.setWorkDir(workDir); @@ -283,6 +284,7 @@ public Boolean getTcpNoDelay() { @Extension public static class DescriptorImpl extends ComputerConnectorDescriptor { + @NonNull @Override public String getDisplayName() { return Messages.SSHLauncher_DescriptorDisplayName(); diff --git a/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java b/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java index 3b48e24b..d7f56f14 100644 --- a/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java +++ b/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java @@ -30,11 +30,9 @@ import com.cloudbees.plugins.credentials.domains.HostnamePortRequirement; import com.cloudbees.plugins.credentials.domains.SchemeRequirement; import com.cloudbees.plugins.credentials.common.StandardUsernameListBoxModel; -import com.google.common.io.ByteStreams; import com.trilead.ssh2.ChannelCondition; import com.trilead.ssh2.Connection; import com.trilead.ssh2.SCPClient; -import com.trilead.ssh2.SFTPv3Client; import com.trilead.ssh2.SFTPv3FileAttributes; import com.trilead.ssh2.ServerHostKeyVerifier; import com.trilead.ssh2.Session; @@ -101,11 +99,11 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.logging.Level; import java.util.logging.Logger; import static hudson.Util.fixEmpty; +import static java.util.logging.Level.WARNING; /** * A computer launcher that tries to start a linux agent by opening an SSH connection and trying to find java. @@ -260,7 +258,8 @@ public boolean verifyServerHostKey(String hostname, int port, String serverHostK */ public SSHLauncher(@NonNull String host, int port, String credentialsId, String jvmOptions, String javaPath, String prefixStartSlaveCmd, String suffixStartSlaveCmd, - Integer launchTimeoutSeconds, Integer maxNumRetries, Integer retryWaitTime, SshHostKeyVerificationStrategy sshHostKeyVerificationStrategy) { + Integer launchTimeoutSeconds, Integer maxNumRetries, Integer retryWaitTime, + @CheckForNull SshHostKeyVerificationStrategy sshHostKeyVerificationStrategy) { setHost(host); setJvmOptions(jvmOptions); setPort(port); @@ -420,59 +419,58 @@ public void launch(final SlaveComputer computer, final TaskListener listener) th launcherExecutorService = Executors.newSingleThreadExecutor( new NamingThreadFactory(Executors.defaultThreadFactory(), "SSHLauncher.launch for '" + computer.getName() + "' node")); Set> callables = new HashSet<>(); - callables.add(new Callable() { - public Boolean call() throws InterruptedException { - Boolean rval = Boolean.FALSE; - try { - String[] preferredKeyAlgorithms = getSshHostKeyVerificationStrategyDefaulted().getPreferredKeyAlgorithms(computer); - if (preferredKeyAlgorithms != null && preferredKeyAlgorithms.length > 0) { // JENKINS-44832 - connection.setServerHostKeyAlgorithms(preferredKeyAlgorithms); - } else { - listener.getLogger().println("Warning: no key algorithms provided; JENKINS-42959 disabled"); - } - - listener.getLogger().println(logConfiguration()); - - openConnection(listener, computer); - - verifyNoHeaderJunk(listener); - reportEnvironment(listener); - - final String workingDirectory = getWorkingDirectory(computer); - if (workingDirectory == null) { - listener.error("Cannot get the working directory for " + computer); - return Boolean.FALSE; - } - - String java = null; - if (StringUtils.isNotBlank(javaPath)) { - java = expandExpression(computer, javaPath); - } else { - //FIXME deprecated on 2020-12-10, it will removed after 2021-09-01 - JavaVersionChecker javaVersionChecker = new JavaVersionChecker(computer, listener, getJvmOptions(), - connection); - java = javaVersionChecker.resolveJava(); - } - - copyAgentJar(listener, workingDirectory); - - startAgent(computer, listener, java, workingDirectory); - - PluginImpl.register(connection); - rval = Boolean.TRUE; - } catch (RuntimeException|Error e) { - String msg = Messages.SSHLauncher_UnexpectedError(); - if(StringUtils.isNotBlank(e.getMessage())){ - msg = e.getMessage(); - } - e.printStackTrace(listener.error(msg)); - } catch (AbortException e) { - listener.getLogger().println(e.getMessage()); - } catch (IOException e) { - e.printStackTrace(listener.getLogger()); - } finally { - return rval; + callables.add(() -> { + Boolean rval = Boolean.FALSE; + try { + String[] preferredKeyAlgorithms = getSshHostKeyVerificationStrategyDefaulted().getPreferredKeyAlgorithms(computer); + if (preferredKeyAlgorithms != null && preferredKeyAlgorithms.length > 0) { // JENKINS-44832 + connection.setServerHostKeyAlgorithms(preferredKeyAlgorithms); + } else { + listener.getLogger().println("Warning: no key algorithms provided; JENKINS-42959 disabled"); + } + + listener.getLogger().println(logConfiguration()); + + openConnection(listener, computer); + + verifyNoHeaderJunk(listener); + reportEnvironment(listener); + + final String workingDirectory = getWorkingDirectory(computer); + if (workingDirectory == null) { + listener.error("Cannot get the working directory for " + computer); + return Boolean.FALSE; + } + + String java = null; + if (StringUtils.isNotBlank(javaPath)) { + java = expandExpression(computer, javaPath); + } else { + checkJavaIsInPath(listener); + //FIXME deprecated on 2020-12-10, it will removed after 2021-09-01 + JavaVersionChecker javaVersionChecker = new JavaVersionChecker(computer, listener, getJvmOptions(), + connection); + java = javaVersionChecker.resolveJava(); } + + copyAgentJar(listener, workingDirectory); + + startAgent(computer, listener, java, workingDirectory); + + PluginImpl.register(connection); + rval = Boolean.TRUE; + } catch (RuntimeException|Error e) { + String msg = Messages.SSHLauncher_UnexpectedError(); + if(StringUtils.isNotBlank(e.getMessage())){ + msg = e.getMessage(); + } + e.printStackTrace(listener.error(msg)); + } catch (AbortException e) { + listener.getLogger().println(e.getMessage()); + } catch (IOException e) { + e.printStackTrace(listener.getLogger()); + } finally { + return rval; } }); @@ -507,11 +505,7 @@ public Boolean call() throws InterruptedException { System.out.println(Messages.SSHLauncher_LaunchFailed(getTimestamp(), nodeName, host)); } finally { - ExecutorService srv = launcherExecutorService; - if (srv != null) { - srv.shutdownNow(); - launcherExecutorService = null; - } + shutdownAndAwaitTerminationOfLauncher(); } } if (node != null && getTrackCredentials()) { @@ -519,7 +513,29 @@ public Boolean call() throws InterruptedException { } } - /** + /** + * try to run the Java command in the PATH ad report its version. + * @param listener lister to print the output of the java command. + */ + private void checkJavaIsInPath(TaskListener listener) { + String msg = "Java is not in the PATH nor configured with the javaPath setting," + + " Jenkins will try to guess where is Java, " + + "this guess will be removed in the future. :" + + getDescriptor().getDisplayName(); + int ret = 0; + try { + listener.getLogger().println("Checking Java version in the PATH"); + ret = connection.exec("java -version", listener.getLogger()); + } catch (Exception e){ + ret = -1; + } + if(ret != 0){ + LOGGER.log(WARNING, msg); + listener.getLogger().println(msg); + } + } + + /** * Called to terminate the SSH connection. Used liberally when we back out from an error. */ private void cleanupConnection(TaskListener listener) { @@ -639,7 +655,7 @@ private void startAgent(SlaveComputer computer, final TaskListener listener, Str private void expandChannelBufferSize(Session session, TaskListener listener) { // see hudson.remoting.Channel.PIPE_WINDOW_SIZE for the discussion of why 1MB is in the right ball park - // but this particular session is where all the master/agent communication will happen, so + // but this particular session is where all the controller/agent communication will happen, so // it's worth using a bigger buffer to really better utilize bandwidth even when the latency is even larger // (and since we are draining this pipe very rapidly, it's unlikely that we'll actually accumulate this much data) int sz = 4; @@ -772,7 +788,7 @@ static byte[] readInputStreamIntoByteArrayAndClose(InputStream inputStream) thro byte[] bytes = null; try{ - bytes = ByteStreams.toByteArray(inputStream); + bytes = IOUtils.toByteArray(inputStream); }catch(IOException e){ throw e; } finally { @@ -914,12 +930,7 @@ public void afterDisconnect(SlaveComputer slaveComputer, final TaskListener list // Nothing to do here, the connection is not established return; } - - ExecutorService srv = launcherExecutorService; - if (srv != null) { - // If the service is still running, shut it down and interrupt the operations if any - srv.shutdown(); - } + shutdownAndAwaitTerminationOfLauncher(); if (tearingDownConnection) { // tear down operation is in progress, do not even try to synchronize the call. @@ -962,6 +973,30 @@ private void tearDownConnectionImpl(@NonNull SlaveComputer slaveComputer, final } } + private void shutdownAndAwaitTerminationOfLauncher() { + ExecutorService srv = launcherExecutorService; + if (srv == null) { + return; + } + srv.shutdown(); // Disable new tasks from being submitted + launcherExecutorService = null; + try { + // Wait a while for existing tasks to terminate + if (!srv.awaitTermination(10, TimeUnit.SECONDS)) { + srv.shutdownNow(); // Cancel currently executing tasks + // Wait a while for tasks to respond to being cancelled + if (!srv.awaitTermination(10, TimeUnit.SECONDS)) { + LOGGER.log(WARNING, "launcherExecutorService thread pool did not terminate cleanly"); + } + } + } catch (InterruptedException ie) { + // (Re-)Cancel if current thread also interrupted + srv.shutdownNow(); + // Preserve interrupt status + Thread.currentThread().interrupt(); + } + } + /** * If the SSH connection as a whole is lost, report that information. */ @@ -1009,7 +1044,7 @@ SshHostKeyVerificationStrategy getSshHostKeyVerificationStrategyDefaulted() { } @DataBoundSetter - public void setSshHostKeyVerificationStrategy(SshHostKeyVerificationStrategy value) { + public void setSshHostKeyVerificationStrategy(@CheckForNull SshHostKeyVerificationStrategy value) { this.sshHostKeyVerificationStrategy = value; } @@ -1183,6 +1218,7 @@ public static class DescriptorImpl extends Descriptor { /** * {@inheritDoc} */ + @NonNull public String getDisplayName() { return Messages.SSHLauncher_DescriptorDisplayName(); } @@ -1324,12 +1360,12 @@ public void flush() throws IOException { } @Override - public void write(byte[] b) throws IOException { + public void write(@NonNull byte[] b) throws IOException { if (out != null) out.write(b); } @Override - public void write(byte[] b, int off, int len) throws IOException { + public void write(@NonNull byte[] b, int off, int len) throws IOException { if (out != null) out.write(b, off, len); } } diff --git a/src/main/java/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy.java b/src/main/java/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy.java index cf403475..220a00b0 100644 --- a/src/main/java/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy.java +++ b/src/main/java/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy.java @@ -24,6 +24,7 @@ package hudson.plugins.sshslaves.verifiers; import com.trilead.ssh2.KnownHosts; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; import hudson.model.TaskListener; import hudson.plugins.sshslaves.Messages; @@ -117,6 +118,7 @@ public File getKnownHostsFile() { @Extension public static class KnownHostsFileKeyVerificationStrategyDescriptor extends SshHostKeyVerificationStrategyDescriptor { + @NonNull @Override public String getDisplayName() { return Messages.KnownHostsFileHostKeyVerifier_DisplayName(); diff --git a/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyProvidedKeyVerificationStrategy.java b/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyProvidedKeyVerificationStrategy.java index 0f01e65d..14ba2ff1 100644 --- a/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyProvidedKeyVerificationStrategy.java +++ b/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyProvidedKeyVerificationStrategy.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.StringTokenizer; +import edu.umd.cs.findbugs.annotations.NonNull; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; @@ -51,7 +52,7 @@ public class ManuallyProvidedKeyVerificationStrategy extends SshHostKeyVerificationStrategy { private final HostKey key; - + @DataBoundConstructor public ManuallyProvidedKeyVerificationStrategy(String key) { super(); @@ -61,15 +62,15 @@ public ManuallyProvidedKeyVerificationStrategy(String key) { throw new IllegalArgumentException("Invalid key: " + e.getMessage(), e); } } - + public String getKey() { return key.getAlgorithm() + " " + Base64.getEncoder().encodeToString(key.getKey()); } - + public HostKey getParsedKey() { return key; } - + @Override public boolean verify(SlaveComputer computer, HostKey hostKey, TaskListener listener) throws Exception { if (key.equals(hostKey)) { @@ -91,7 +92,7 @@ public String[] getPreferredKeyAlgorithms(SlaveComputer computer) throws IOExcep return sortedAlgorithms.toArray(new String[0]); } - + private static HostKey parseKey(String key) throws KeyParseException { if (!key.contains(" ")) { throw new IllegalArgumentException(Messages.ManualKeyProvidedHostKeyVerifier_TwoPartKey()); @@ -102,18 +103,19 @@ private static HostKey parseKey(String key) throws KeyParseException { if (null == keyValue) { throw new KeyParseException(Messages.ManualKeyProvidedHostKeyVerifier_Base64EncodedKeyValueRequired()); } - + return TrileadVersionSupportManager.getTrileadSupport().parseKey(algorithm, keyValue); } - + @Extension public static class ManuallyProvidedKeyVerificationStrategyDescriptor extends SshHostKeyVerificationStrategyDescriptor { + @NonNull @Override public String getDisplayName() { return Messages.ManualKeyProvidedHostKeyVerifier_DisplayName(); } - + public FormValidation doCheckKey(@QueryParameter String key) { try { ManuallyProvidedKeyVerificationStrategy.parseKey(key); @@ -122,7 +124,7 @@ public FormValidation doCheckKey(@QueryParameter String key) { return FormValidation.error(ex.getMessage()); } } - + } } diff --git a/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyTrustedKeyVerificationStrategy.java b/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyTrustedKeyVerificationStrategy.java index 49adb8e1..d929edff 100644 --- a/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyTrustedKeyVerificationStrategy.java +++ b/src/main/java/hudson/plugins/sshslaves/verifiers/ManuallyTrustedKeyVerificationStrategy.java @@ -23,22 +23,17 @@ */ package hudson.plugins.sshslaves.verifiers; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; -import hudson.model.Action; -import hudson.model.Actionable; -import hudson.model.Computer; import hudson.model.TaskListener; import hudson.plugins.sshslaves.Messages; import hudson.plugins.sshslaves.SSHLauncher; import hudson.slaves.SlaveComputer; import java.io.IOException; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.logging.Level; import java.util.logging.Logger; -import javax.annotation.Nonnull; import org.kohsuke.stapler.DataBoundConstructor; /** @@ -55,29 +50,29 @@ public class ManuallyTrustedKeyVerificationStrategy extends SshHostKeyVerificationStrategy { private static final Logger LOGGER = Logger.getLogger(ManuallyTrustedKeyVerificationStrategy.class.getName()); - + private final boolean requireInitialManualTrust; - + @DataBoundConstructor public ManuallyTrustedKeyVerificationStrategy(boolean requireInitialManualTrust) { super(); this.requireInitialManualTrust = requireInitialManualTrust; } - + public boolean isRequireInitialManualTrust() { return requireInitialManualTrust; } - + @Override public boolean verify(final SlaveComputer computer, HostKey hostKey, TaskListener listener) throws IOException { HostKeyHelper hostManager = HostKeyHelper.getInstance(); - + HostKey existingHostKey = hostManager.getHostKey(computer); if (null == existingHostKey) { if (isRequireInitialManualTrust()) { listener.getLogger().println(Messages.ManualTrustingHostKeyVerifier_KeyNotTrusted(SSHLauncher.getTimestamp())); if (!hasExistingTrustAction(computer, hostKey)) { - addAction(computer, new TrustHostKeyAction(computer, hostKey)); + computer.addAction(new TrustHostKeyAction(computer, hostKey)); } return false; } @@ -90,7 +85,7 @@ public boolean verify(final SlaveComputer computer, HostKey hostKey, TaskListene else if (!existingHostKey.equals(hostKey)) { listener.getLogger().println(Messages.ManualTrustingHostKeyVerifier_KeyNotTrusted(SSHLauncher.getTimestamp())); if (!hasExistingTrustAction(computer, hostKey)) { - addAction(computer, new TrustHostKeyAction(computer, hostKey)); + computer.addAction(new TrustHostKeyAction(computer, hostKey)); } return false; } @@ -118,41 +113,25 @@ public String[] getPreferredKeyAlgorithms(SlaveComputer computer) throws IOExcep return algorithms; } - /** TODO replace with {@link Computer#addAction} after core baseline picks up JENKINS-42969 fix */ - private static void addAction(@Nonnull Computer c, @Nonnull Action a) { - try { - c.addAction(a); - } catch (UnsupportedOperationException x) { - try { - Field actionsF = Actionable.class.getDeclaredField("actions"); - actionsF.setAccessible(true); - @SuppressWarnings("unchecked") - List actions = (List) actionsF.get(c); - actions.add(a); - } catch (Exception x2) { - LOGGER.log(Level.WARNING, null, x2); - } - } - } - private boolean hasExistingTrustAction(SlaveComputer computer, HostKey hostKey) { for (TrustHostKeyAction action : computer.getActions(TrustHostKeyAction.class)) { if (!action.isComplete() && action.getHostKey().equals(hostKey)) { return true; } } - + return false; } - + @Extension public static class ManuallyTrustedKeyVerificationStrategyDescriptor extends SshHostKeyVerificationStrategyDescriptor { + @NonNull @Override public String getDisplayName() { return Messages.ManualTrustingHostKeyVerifier_DescriptorDisplayName(); } - + } - + } diff --git a/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java b/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java index 62994a60..4235400f 100644 --- a/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java +++ b/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java @@ -65,6 +65,11 @@ public String getDisplayName() { } public String getAgentNames() { - return agentNames != null ? agentNames.toString() : ""; + return agentNames != null ? agentNames.toString() : ""; + } + + @Override + public boolean isSecurity() { + return true; } } diff --git a/src/main/java/hudson/plugins/sshslaves/verifiers/NonVerifyingKeyVerificationStrategy.java b/src/main/java/hudson/plugins/sshslaves/verifiers/NonVerifyingKeyVerificationStrategy.java index 5a95097d..56f38317 100644 --- a/src/main/java/hudson/plugins/sshslaves/verifiers/NonVerifyingKeyVerificationStrategy.java +++ b/src/main/java/hudson/plugins/sshslaves/verifiers/NonVerifyingKeyVerificationStrategy.java @@ -23,6 +23,7 @@ */ package hudson.plugins.sshslaves.verifiers; +import edu.umd.cs.findbugs.annotations.NonNull; import org.kohsuke.stapler.DataBoundConstructor; import hudson.Extension; @@ -45,21 +46,22 @@ public class NonVerifyingKeyVerificationStrategy extends SshHostKeyVerificationS public NonVerifyingKeyVerificationStrategy() { super(); } - + @Override public boolean verify(SlaveComputer computer, HostKey hostKey, TaskListener listener) { listener.getLogger().println(Messages.NonVerifyingHostKeyVerifier_NoVerificationWarning(SSHLauncher.getTimestamp())); return true; } - + @Extension public static class NonVerifyingKeyVerificationStrategyDescriptor extends SshHostKeyVerificationStrategyDescriptor { + @NonNull @Override public String getDisplayName() { return Messages.NonVerifyingHostKeyVerifier_DescriptorDisplayName(); } - + } - -} \ No newline at end of file + +} diff --git a/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help.properties b/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help.properties index aea3739c..44420a0a 100644 --- a/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help.properties +++ b/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help.properties @@ -21,5 +21,5 @@ # THE SOFTWARE. blurb=Starts an agent by sending commands over a secure SSH connection. \ - The agent needs to be reachable from the master, and you will have to supply an \ + The agent needs to be reachable from the Jenkins controller, and you will have to supply an \ account that can log in on the target machine. No root privileges are required. diff --git a/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help_de.properties b/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help_de.properties index 7c9a56ef..3ca66d2e 100644 --- a/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help_de.properties +++ b/src/main/resources/hudson/plugins/sshslaves/SSHLauncher/help_de.properties @@ -22,6 +22,6 @@ blurb=Startet einen Agent durch Kommandos, die \u00FCber eine gesicherte SSH-Verbindung \ gesendet werden. \ - Der Agent muss dazu vom Master aus erreichbar sein, und Sie m\u00FCssen einen \ + Der Agent muss dazu vom Controller aus erreichbar sein, und Sie m\u00FCssen einen \ Benutzeraccount mit Login-Rechten auf dem Agent angeben. \ Root-Rechte sind f\u00FCr diesen Account nicht erforderlich. diff --git a/src/main/resources/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy/help.html b/src/main/resources/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy/help.html index 86ec8c73..2a7a7d8e 100644 --- a/src/main/resources/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy/help.html +++ b/src/main/resources/hudson/plugins/sshslaves/verifiers/KnownHostsFileKeyVerificationStrategy/help.html @@ -1,2 +1,2 @@

Checks the known_hosts file (~/.ssh/known_hosts) for the user Jenkins is executing under, to see if an entry exists that matches the current connection.

-

This method does not make any updates to the Known Hosts file, instead using the file as a read-only source and expecting someone with suitable access to the appropriate user account on the Jenkins master to update the file as required, potentially using the ssh hostname command to initiate a connection and update the file appropriately.

+

This method does not make any updates to the Known Hosts file, instead using the file as a read-only source and expecting someone with suitable access to the appropriate user account on the Jenkins controller to update the file as required, potentially using the ssh hostname command to initiate a connection and update the file appropriately.

diff --git a/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java b/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java index 3d27c7c9..f0b69b31 100644 --- a/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java +++ b/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java @@ -76,6 +76,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -154,12 +155,7 @@ private static boolean checkSupported(final String testVersionOutput) throws IOE } private static void assertNotSupported(final String testVersionOutput) throws AssertionError { - try { - checkSupported(testVersionOutput); - fail("Expected version " + testVersionOutput + " to be not supported, but it is supported"); - } catch (IOException e) { - // expected - } + assertThrows(IOException.class, () -> checkSupported(testVersionOutput)); } private void checkRoundTrip(String host) throws Exception { @@ -400,7 +396,7 @@ public void getMd5Hash() { try { byte[] bytes = "Leave me alone!".getBytes(); String result = SSHLauncher.getMd5Hash(bytes); - assertTrue("1EB226C8E950BAC1494BE197E84A264C".equals(result)); + assertEquals("1EB226C8E950BAC1494BE197E84A264C", result); } catch (Exception e) { e.printStackTrace(); } @@ -420,7 +416,7 @@ public void readInputStreamIntoByteArrayAndClose() { byte[] bytes = SSHLauncher.readInputStreamIntoByteArrayAndClose(inputStream); assertNotNull(bytes); assertTrue(bytes.length > 0); - assertTrue("Don't change me or add newlines!".equals(new String(bytes))); + assertEquals("Don't change me or add newlines!", new String(bytes)); } catch (Exception e) { e.printStackTrace(); diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentConnectionBase.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentConnectionBase.java new file mode 100644 index 00000000..7d6a3e98 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentConnectionBase.java @@ -0,0 +1,117 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.concurrent.TimeUnit; + +import hudson.plugins.sshslaves.rules.Retry; +import org.apache.commons.io.IOUtils; +import org.junit.Rule; +import org.junit.rules.Timeout; +import org.jvnet.hudson.test.JenkinsRule; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.SSHLauncher; +import hudson.plugins.sshslaves.rules.CheckIsDockerAvailable; +import hudson.plugins.sshslaves.rules.CheckIsLinuxOrMac; +import hudson.plugins.sshslaves.verifiers.NonVerifyingKeyVerificationStrategy; +import hudson.slaves.DumbSlave; +import com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey; +import com.cloudbees.plugins.credentials.CredentialsScope; +import com.cloudbees.plugins.credentials.SystemCredentialsProvider; +import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials; +import com.cloudbees.plugins.credentials.domains.Domain; +import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl; +import static org.junit.Assert.assertTrue; + +/** + * Base class to test connections to a remote SSH Agent + * + * @author Kuisathaverat + */ +public class AgentConnectionBase { + public static final String USER = "jenkins"; + public static final String PASSWORD = "password"; + public static final String AGENT_WORK_DIR = "/home/jenkins"; + public static final int SSH_PORT = 22; + public static final String SSH_SSHD_CONFIG = "ssh/sshd_config"; + public static final String DOCKERFILE = "Dockerfile"; + public static final String SSH_AUTHORIZED_KEYS = "ssh/authorized_keys"; + public static final String AGENTS_RESOURCES_PATH = "/hudson/plugins/sshslaves/agents/"; + + @Rule + public CheckIsLinuxOrMac isLinuxOrMac = new CheckIsLinuxOrMac(); + + @Rule + public CheckIsDockerAvailable isDockerAvailable = new CheckIsDockerAvailable(); + + @Rule + public JenkinsRule j = new JenkinsRule(); + + @Rule + public Retry retry = new Retry(3); + + @Rule + public Timeout globalTimeout= new Timeout(4, TimeUnit.MINUTES); + + protected boolean isSuccessfullyConnected(Node node) throws IOException, InterruptedException { + boolean ret = false; + int count = 0; + while (count < 30) { + Thread.sleep(1000); + String log = node.toComputer().getLog(); + ret = log.contains("Agent successfully connected and online"); + count++; + } + return ret; + } + + protected void waitForAgentConnected(Node node) throws InterruptedException { + int count = 0; + while (!node.toComputer().isOnline() && count < 150) { + Thread.sleep(1000); + count++; + } + assertTrue(node.toComputer().isOnline()); + } + + protected Node createPermanentAgent(String name, String host, int sshPort, String keyResourcePath, String passphrase) + throws Descriptor.FormException, IOException { + String credId = "sshCredentialsId"; + createSshKeyCredentials(credId, keyResourcePath, passphrase); + final SSHLauncher launcher = new SSHLauncher(host , sshPort, credId); + launcher.setSshHostKeyVerificationStrategy(new NonVerifyingKeyVerificationStrategy()); + DumbSlave agent = new DumbSlave(name, AGENT_WORK_DIR, launcher); + j.jenkins.addNode(agent); + return j.jenkins.getNode(agent.getNodeName()); + } + + protected Node createPermanentAgent(String name, String host, int sshPort) + throws Descriptor.FormException, IOException { + String credId = "sshCredentialsId"; + createSshCredentials(credId); + final SSHLauncher launcher = new SSHLauncher(host , sshPort, credId); + launcher.setSshHostKeyVerificationStrategy(new NonVerifyingKeyVerificationStrategy()); + DumbSlave agent = new DumbSlave(name, AGENT_WORK_DIR, launcher); + j.jenkins.addNode(agent); + return j.jenkins.getNode(agent.getNodeName()); + } + + private void createSshKeyCredentials(String id, String keyResourcePath, String passphrase) throws IOException { + String privateKey = IOUtils.toString(getClass().getResourceAsStream(keyResourcePath), StandardCharsets.UTF_8); + BasicSSHUserPrivateKey.DirectEntryPrivateKeySource privateKeySource = new BasicSSHUserPrivateKey.DirectEntryPrivateKeySource( + privateKey); + BasicSSHUserPrivateKey credentials = new BasicSSHUserPrivateKey(CredentialsScope.SYSTEM, id, USER, privateKeySource, + passphrase, "Private Key ssh credentials"); + SystemCredentialsProvider.getInstance().getDomainCredentialsMap().put(Domain.global(), + Collections.singletonList(credentials)); + } + + private void createSshCredentials(String id) throws IOException { + StandardUsernameCredentials credentials = + new UsernamePasswordCredentialsImpl(CredentialsScope.SYSTEM, id, "", USER, PASSWORD); + SystemCredentialsProvider.getInstance().getDomainCredentialsMap().put(Domain.global(), + Collections.singletonList(credentials)); + } +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentCurve25519Sha256ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentCurve25519Sha256ConnectionTest.java new file mode 100644 index 00000000..6a1211cc --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentCurve25519Sha256ConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKexTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHKexTest.class}) +public class AgentCurve25519Sha256ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-curve25519-sha256"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentDSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentDSAConnectionTest.java new file mode 100644 index 00000000..ff7de11f --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentDSAConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentDSAConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-dsa"; + public static final String SSH_KEY_PATH = "ssh/dsakey"; + public static final String SSH_KEY_PUB_PATH = "ssh/dsakey.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentECConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentECConnectionTest.java new file mode 100644 index 00000000..9e6d0747 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentECConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentECConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ec"; + public static final String SSH_KEY_PATH = "ssh/ecdsakey"; + public static final String SSH_KEY_PUB_PATH = "ssh/ecdsakey.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp256ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp256ConnectionTest.java new file mode 100644 index 00000000..37a2b09a --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp256ConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKexTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKexTest.class}) +public class AgentECDHSha2Nistp256ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ecdh-sha2-nistp256"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp384ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp384ConnectionTest.java new file mode 100644 index 00000000..b6a475af --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp384ConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKexTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKexTest.class}) +public class AgentECDHSha2Nistp384ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ecdh-sha2-nistp384"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp521ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp521ConnectionTest.java new file mode 100644 index 00000000..0f4bba9a --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp521ConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKexTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHKexTest.class}) +public class AgentECDHSha2Nistp521ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ecdh-sha2-nistp521"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentED25519ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentED25519ConnectionTest.java new file mode 100644 index 00000000..c582abcb --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentED25519ConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentED25519ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ed25519"; + public static final String SSH_KEY_PATH = "ssh/ed25519key"; + public static final String SSH_KEY_PUB_PATH = "ssh/ed25519key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentHostECConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentHostECConnectionTest.java new file mode 100644 index 00000000..fbd0b8f3 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentHostECConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHHostKeyTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHHostKeyTest.class}) +public class AgentHostECConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-host-ec"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentHostEDConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentHostEDConnectionTest.java new file mode 100644 index 00000000..8cc95030 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentHostEDConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHHostKeyTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHHostKeyTest.class}) +public class AgentHostEDConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-host-ed"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentHostRSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentHostRSAConnectionTest.java new file mode 100644 index 00000000..cf7f76d2 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentHostRSAConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHHostKeyTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHHostKeyTest.class}) +public class AgentHostRSAConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-host-rsa"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA256ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA256ConnectionTest.java new file mode 100644 index 00000000..5bfa655e --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA256ConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSA256ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa256"; + public static final String SSH_KEY_PATH = "ssh/rsa-256-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-256-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA512ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA512ConnectionTest.java new file mode 100644 index 00000000..012a43a3 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA512ConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSA512ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa512"; + public static final String SSH_KEY_PATH = "ssh/rsa-512-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-512-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSAConnectionTest.java new file mode 100644 index 00000000..7998be1a --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSAConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSAConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES128CBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES128CBC_ConnectionTest.java new file mode 100644 index 00000000..a12387f9 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES128CBC_ConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSA_AES128CBC_ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; + public static final String SSH_KEY_PATH = "ssh/rsa-key-aes128-cbc"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, PASSWORD); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES192CBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES192CBC_ConnectionTest.java new file mode 100644 index 00000000..ca27295f --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES192CBC_ConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSA_AES192CBC_ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; + public static final String SSH_KEY_PATH = "ssh/rsa-key-aes192-cbc"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, PASSWORD); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES256CBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES256CBC_ConnectionTest.java new file mode 100644 index 00000000..c000e922 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES256CBC_ConnectionTest.java @@ -0,0 +1,44 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSA_AES256CBC_ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; + public static final String SSH_KEY_PATH = "ssh/rsa-key-aes256-cbc"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, PASSWORD); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DESCBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DESCBC_ConnectionTest.java new file mode 100644 index 00000000..4a09361b --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DESCBC_ConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSA_DESCBC_ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; + public static final String SSH_KEY_PATH = "ssh/rsa-key-des-cbc"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, PASSWORD); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DES_EDE3CBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DES_EDE3CBC_ConnectionTest.java new file mode 100644 index 00000000..dcfdea27 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DES_EDE3CBC_ConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentRSA_DES_EDE3CBC_ConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; + public static final String SSH_KEY_PATH = "ssh/rsa-key-des-ede3-cbc"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, PASSWORD); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1404RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1404RSAConnectionTest.java new file mode 100644 index 00000000..855159f9 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1404RSAConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentUbuntu1404RSAConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-14.04"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1604RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1604RSAConnectionTest.java new file mode 100644 index 00000000..d73777b5 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1604RSAConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentUbuntu1604RSAConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-16.04"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1804RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1804RSAConnectionTest.java new file mode 100644 index 00000000..2c0cd94f --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1804RSAConnectionTest.java @@ -0,0 +1,46 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; +import org.junit.Ignore; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentUbuntu1804RSAConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-18.04"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu2004RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu2004RSAConnectionTest.java new file mode 100644 index 00000000..c08d9e48 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu2004RSAConnectionTest.java @@ -0,0 +1,47 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; + +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Ignore("Only for manual test.") +@Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) +public class AgentUbuntu2004RSAConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-20.04"; + public static final String SSH_KEY_PATH = "ssh/rsa-key"; + public static final String SSH_KEY_PUB_PATH = "ssh/rsa-key.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT), + SSH_AGENT_NAME + "/" + SSH_KEY_PATH, ""); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUserAndPasswordConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUserAndPasswordConnectionTest.java new file mode 100644 index 00000000..de1c8877 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUserAndPasswordConnectionTest.java @@ -0,0 +1,42 @@ +package hudson.plugins.sshslaves.agents; + +import java.io.IOException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import hudson.model.Descriptor; +import hudson.model.Node; +import hudson.plugins.sshslaves.categories.AgentSSHTest; +import static org.junit.Assert.assertTrue; + +/** + * Connect to a remote SSH Agent + * + * @author Kuisathaverat + */ +@Category({ AgentSSHTest.class }) +public class AgentUserAndPasswordConnectionTest extends AgentConnectionBase { + public static final String SSH_AGENT_NAME = "ssh-agent-dsa"; + public static final String SSH_KEY_PATH = "ssh/dsakey"; + public static final String SSH_KEY_PUB_PATH = "ssh/dsakey.pub"; + + @Rule + public GenericContainer agentContainer = new GenericContainer( + new ImageFromDockerfile(SSH_AGENT_NAME, false) + .withFileFromClasspath(SSH_AUTHORIZED_KEYS, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_AUTHORIZED_KEYS) + .withFileFromClasspath(SSH_KEY_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PATH) + .withFileFromClasspath(SSH_KEY_PUB_PATH, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_KEY_PUB_PATH) + .withFileFromClasspath(SSH_SSHD_CONFIG, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + SSH_SSHD_CONFIG) + .withFileFromClasspath(DOCKERFILE, AGENTS_RESOURCES_PATH + "/" + SSH_AGENT_NAME + "/" + DOCKERFILE)) + .withExposedPorts(22); + + @Test + public void connectionTests() throws IOException, InterruptedException, Descriptor.FormException { + Node node = createPermanentAgent(SSH_AGENT_NAME, agentContainer.getHost(), agentContainer.getMappedPort(SSH_PORT)); + waitForAgentConnected(node); + assertTrue(isSuccessfullyConnected(node)); + } + +} diff --git a/src/test/java/hudson/plugins/sshslaves/categories/AgentSSHTest.java b/src/test/java/hudson/plugins/sshslaves/categories/AgentSSHTest.java new file mode 100644 index 00000000..ea563b05 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/categories/AgentSSHTest.java @@ -0,0 +1,10 @@ +package hudson.plugins.sshslaves.categories; + +/** + * Category for the SSH Agent tests + * + * @author Kuisathaverat + */ +public interface AgentSSHTest { + /* category marker */ +} diff --git a/src/test/java/hudson/plugins/sshslaves/categories/SSHHostKeyTest.java b/src/test/java/hudson/plugins/sshslaves/categories/SSHHostKeyTest.java new file mode 100644 index 00000000..a2462472 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/categories/SSHHostKeyTest.java @@ -0,0 +1,10 @@ +package hudson.plugins.sshslaves.categories; + +/** + * Category for the SSH Agent tests + * + * @author Kuisathaverat + */ +public interface SSHHostKeyTest { + /* category marker */ +} diff --git a/src/test/java/hudson/plugins/sshslaves/categories/SSHKexTest.java b/src/test/java/hudson/plugins/sshslaves/categories/SSHKexTest.java new file mode 100644 index 00000000..de52d562 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/categories/SSHKexTest.java @@ -0,0 +1,10 @@ +package hudson.plugins.sshslaves.categories; + +/** + * Category for the SSH Agent tests + * + * @author Kuisathaverat + */ +public interface SSHKexTest { + /* category marker */ +} diff --git a/src/test/java/hudson/plugins/sshslaves/categories/SSHKeyAuthenticationTest.java b/src/test/java/hudson/plugins/sshslaves/categories/SSHKeyAuthenticationTest.java new file mode 100644 index 00000000..bea643ba --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/categories/SSHKeyAuthenticationTest.java @@ -0,0 +1,10 @@ +package hudson.plugins.sshslaves.categories; + +/** + * Category for the SSH Agent tests + * + * @author Kuisathaverat + */ +public interface SSHKeyAuthenticationTest { + /* category marker */ +} diff --git a/src/test/java/hudson/plugins/sshslaves/rules/CheckIsDockerAvailable.java b/src/test/java/hudson/plugins/sshslaves/rules/CheckIsDockerAvailable.java new file mode 100644 index 00000000..b28e25cf --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/rules/CheckIsDockerAvailable.java @@ -0,0 +1,18 @@ +package hudson.plugins.sshslaves.rules; + +import org.junit.rules.ExternalResource; +import org.testcontainers.DockerClientFactory; + +import static org.junit.Assume.assumeTrue; + +/** + * Rule to check if Docker is available. + * + * @author Kuisathaverat + */ +public class CheckIsDockerAvailable extends ExternalResource { + @Override + protected void before() { + assumeTrue(DockerClientFactory.instance().isDockerAvailable()); + } +} diff --git a/src/test/java/hudson/plugins/sshslaves/rules/CheckIsLinuxOrMac.java b/src/test/java/hudson/plugins/sshslaves/rules/CheckIsLinuxOrMac.java new file mode 100644 index 00000000..6a52aa8d --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/rules/CheckIsLinuxOrMac.java @@ -0,0 +1,17 @@ +package hudson.plugins.sshslaves.rules; + +import org.apache.commons.lang.SystemUtils; +import org.junit.Assume; +import org.junit.rules.ExternalResource; + +/** + * Rule to check the Operating system where the test run. + * + * @author Kuisathaverat + */ +public class CheckIsLinuxOrMac extends ExternalResource { + @Override + protected void before() throws Throwable { + Assume.assumeTrue(SystemUtils.IS_OS_MAC || SystemUtils.IS_OS_LINUX); + } +} diff --git a/src/test/java/hudson/plugins/sshslaves/rules/Retry.java b/src/test/java/hudson/plugins/sshslaves/rules/Retry.java new file mode 100644 index 00000000..e1f51c06 --- /dev/null +++ b/src/test/java/hudson/plugins/sshslaves/rules/Retry.java @@ -0,0 +1,42 @@ +package hudson.plugins.sshslaves.rules; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +/** + * https://stackoverflow.com/questions/8295100/how-to-re-run-failed-junit-tests-immediately + */ +public class Retry implements TestRule { + private int retryCount; + + public Retry(int retryCount) { + this.retryCount = retryCount; + } + + public Statement apply(Statement base, Description description) { + return statement(base, description); + } + + private Statement statement(final Statement base, final Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + Throwable caughtThrowable = null; + + // implement retry logic here + for (int i = 0; i < retryCount; i++) { + try { + base.evaluate(); + return; + } catch (Throwable t) { + caughtThrowable = t; + System.err.println(description.getDisplayName() + ": run " + (i+1) + " failed"); + } + } + System.err.println(description.getDisplayName() + ": giving up after " + retryCount + " failures"); + throw caughtThrowable; + } + }; + } + } diff --git a/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java b/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java index 39cf6d6e..db177361 100644 --- a/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java @@ -53,10 +53,10 @@ import hudson.slaves.SlaveComputer; public class TrustHostKeyActionTest { - + @Rule public final TemporaryFolder temporaryFolder = new TemporaryFolder(); - + @Rule public final JenkinsRule jenkins = new JenkinsRule(); @@ -66,7 +66,7 @@ private static int findPort() throws IOException { return socket.getLocalPort(); } } - + @SuppressWarnings("unchecked") @Test public void testSubmitNotAuthorised() throws Exception { @@ -76,7 +76,7 @@ public void testSubmitNotAuthorised() throws Exception { new UsernamePasswordCredentialsImpl(CredentialsScope.SYSTEM, "dummyCredentialId", null, "user", "pass") ) ); - + final int port = findPort(); try { @@ -109,30 +109,30 @@ public void testSubmitNotAuthorised() throws Exception { DumbSlave agent = new DumbSlave("test-agent", "SSH Test agent", temporaryFolder.newFolder().getAbsolutePath(), "1", Mode.NORMAL, "", launcher, RetentionStrategy.NOOP, Collections.emptyList()); - + jenkins.getInstance().addNode(agent); SlaveComputer computer = (SlaveComputer) jenkins.getInstance().getComputer("test-agent"); try { computer.connect(false).get(); } catch (ExecutionException ex){ - //TODO(oleg_nenashev): "Slave" check is still needed for PCT purposes, but it should be eventually cleaned up + //TODO(oleg_nenashev): "Slave" check is still needed for PCT purposes, but it should be eventually cleaned up if (!ex.getMessage().startsWith("java.io.IOException: Slave failed") && !ex.getMessage().startsWith("java.io.IOException: Agent failed")) { throw ex; } } - + List actions = computer.getActions(TrustHostKeyAction.class); assertEquals(computer.getLog(), 1, actions.size()); assertNull(actions.get(0).getExistingHostKey()); - + HtmlPage p = jenkins.createWebClient().getPage(agent, actions.get(0).getUrlName()); p.getElementByName("Yes").click(); - + assertTrue(actions.get(0).isComplete()); assertEquals(actions.get(0).getExistingHostKey(), actions.get(0).getHostKey()); - - + + } private Object newSshServer() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { @@ -180,32 +180,28 @@ private Object newFactory() throws ClassNotFoundException, NoSuchMethodException } private Class newCommandFactoryClass() throws ClassNotFoundException { - return Class.forName("org.apache.sshd.server.CommandFactory"); + return Class.forName("org.apache.sshd.server.command.CommandFactory"); } private Object newCommandFactory(Class commandFactoryClass) throws ClassNotFoundException, IllegalArgumentException { return java.lang.reflect.Proxy.newProxyInstance( commandFactoryClass.getClassLoader(), new java.lang.Class[]{commandFactoryClass}, - new java.lang.reflect.InvocationHandler() { - - @Override - public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable { + (proxy, method, args) -> { - if (method.getName().equals("createCommand")) { - Class commandClass; - try { - commandClass = Class.forName("org.apache.sshd.server.command.UnknownCommand"); - } catch (ClassNotFoundException e) { - commandClass = Class.forName("org.apache.sshd.server.scp.UnknownCommand"); - } + if (method.getName().equals("createCommand")) { + Class commandClass; + try { + commandClass = Class.forName("org.apache.sshd.server.command.UnknownCommand"); + } catch (ClassNotFoundException e) { + commandClass = Class.forName("org.apache.sshd.server.scp.UnknownCommand"); + } - return commandClass.getConstructor(String.class).newInstance(args[0]); - } + return commandClass.getConstructor(String.class).newInstance(args[0]); + } - return null; - } - }); + return null; + }); } private Class newCommandAuthenticatorClass() throws ClassNotFoundException { @@ -223,18 +219,14 @@ private Object newAuthenticator(Class passwordAuthenticatorClass) throws ClassNo return java.lang.reflect.Proxy.newProxyInstance( passwordAuthenticatorClass.getClassLoader(), new java.lang.Class[]{passwordAuthenticatorClass}, - new java.lang.reflect.InvocationHandler() { - - @Override - public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable { + (proxy, method, args) -> { - if (method.getName().equals("authenticate")) { - return Boolean.TRUE; - } + if (method.getName().equals("authenticate")) { + return Boolean.TRUE; + } - return null; - } - }); + return null; + }); } private Object invoke(Object target, String methodName, Class[] parameterTypes, Object[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKgIBAAKCAgEAzxYUc+vnLpK9G3FS780COAE0IblNZ+f9+JRoa8Rdb+Ug0mxj +0Y+uUwCjCQj42QY/snUIubfcVJNkS31lzYmNwajnEjc1xHxpPVG8JtMH9GoFxcMn +VoJkT4pkReiGFjw1J9+brLSOaBNWGEt1HNN553Ti/4qp6A3d00AI1+ghY3PIYOaI +jDGerEpZsirpSXIfuEUtyH8DcV185JYr0OVDy+kMk9YYJef3KZ1YbtsprWBHR/7K +HcN2KcbQ9AkZRU1Xb8b7m2tGde0+gIXiDYF4kaEocvcxTHAozlPgm3ue5++4S5q6 +CinzEVXlWu0dXHil1KvLZjdq6qG46XwCx1k9+G3RASaFxkzuMAqxZTs2Njc+Hj4N +Xb+gqI6aNSAfVzPYTLm8dUGvSa5y/lHPKkJlQoX7OTL/sc0OEN4fwbY8Q3TSr02A +NwOsed3IqzNj8PpuV2GBGwe3NG17x3ClvXHsCOtT7UUVzs+sOyz76J/uPlf3RiGs +F9SYvG8ui4m9dyRGL3hB87vRmUr9tLRIk9r6T5+fb17BnMbLTlwLqQgtRnOSDISH +1yU3pnEvmboDhyYrGc78MHCoMCuHF7PbFpGiC/rKdiurJigvksylxUExrThmIRHZ ++vCJjVTdhJdJ76Yb5f35lY/Zts8Kil0+TPXVWDrNI0cKv1W4dOCTg+paSwMCAwEA +AQKCAgEAra1i8eXDObgvibh9Skixt66qvi3e0WosAjLVcKx7gMC1ykTFYpgSJ+K8 +2XMA4WLwQQcOjlO5IeWLlBRTMRJQJT82rHxJR8TfrmHCXv1WCpJwzO9jKpao8lyq +xEbDThqoqgxLT4kOdhLhffaq/cYO0yOgzZjJ7qjShb2KrSkt926/eyVdF9b1sKGa +oGaEyOhB2hWK1EBR7t3tRPj9PnFJbtbBiathDUmCbRBdfnuodJPutF7nvBaWH2tz +C3gmDY1T65cCpdJOgdC7PqcKczFGoTx75A+U9PqL/p8yHLSNDRBrjFzz8lpEVSGo +/Z0npso4qih6qfuIW8fOgWNUIUSjRxjbecv2FEo2jrJgQu7ijfRbNIjPicOQIudC +3gt3NFJipvYjcP+Yw5996QVWloi114rLNqxewZ/rsNKLda6t8APsdqCJRdv4tWHh +JcfQrSeWCR4kaziJnpfPD1PNkEMjaapFrD+3gsRPH2QctcgKC1QBqShvhnP1HbOa +ViUw+iTw3g/+8W2rGMaBADMuoNfBe63UnfhtsLLX4/nAAf1MzjJx3HDPE7fVfyg+ +ylwNgBT9GVJZQBRgTg/wvAPS2Ps9LfD52GkpwNNdwt5ZLpGQrrLthhc9uygy8ypT +bHIPLLSDwwj6GWFKuCp+gibBhjDLJAJ7quttfxAQme33W5GMZaECggEBAOxRlLFl +zr8coom8HUFny17kzrNf5hSuf+G5MS/Rb1kq12hDqilDrctLb5RzQzC5iFUVzazF +FU/yILvE92xjdvVk82IltVVRF+eUk6zhgmvgmhEp1DuGFpwoKOM4v7doO95zhrtI +t/LtZSV7Lw51H1FDONom72m/baLiXQ9pOasbK+tW8+AU9+8D4cjq+PGBzE4vVqmi +JG91ZvNbxjiODl9FXq615fm51w75GRpy3QQE5UGWHVNrLErxfTjprJbxBIroY2Pr +o1W9fC3tpWOLypcNBfQQ+BRqYQT68vdp4LaAGQvoKhHybpf1v1/zx4nXW7tMI+0K +AeXn71C7NVrOov8CggEBAOBVQDHCDNQZA78Tn7qWJlPhqYuEALxRuKKRcGAP55+M +rmEg+UjZ4sGOiz2cwWuZDvmR2x9KGjs1Fef7/25TsNw5bT0V4TY8Jt9s5cJbgixk +3HaGqnc2/TU3C1vwdyO0FlDTGveNxY9m5u49VHnxm1ZOavFx0yFCyQdRhTRWvVym +Ru65BrFecT+Jo0faL7OjAvB76Lq7dPw2LpG/nHmqwOxDOFIuGqVr7fw4nTnv4kFP +9r1EThvp7lIfnhLEavm/+9bC0uH4Nm6q/mZmPV0Qiv6qpXZC/eBlnhTx8dMqmq8S +H8qah0qJ/jWr5qGJusl95hQCFLAEdFewlHkN0yYdy/0CggEAY/6lL2dH02A3epaJ +voo/6Lhiqk3y2l94JzgokvZI6m8RVMIE9472tCYIYcVf8fcfs/kU3X1LZleq+CkB +FPEFfhKoVahlEWPN/KTG1AlcGW+hYY/UiRdU6+CmZHc30FCfvKIfqZG8nGNNQE3e +fHycstMB9HUzKwjgSGMGQ6Yfy8IklGFnsjLNMmrvGAgtLGvi2lZ3kjHUvwDrfiAg +QQADHtcImF7JoCC92k0XDTT7Rl8X7uepIwofZNrIRNPDvt7fMDPjEn270GTsbba4 +G+Yj5ESTd1HS1zioMuZI9t3rQu3zKzGi05NErrJCt0Q885uX6inurbdlVDYO8pc0 +nWcAWwKCAQEAsTAkyChxYYVwhBfH7eRy2YZAGEZnHled8inWDMoDNO41PdqBi50t +kZw5Nqz9yTLXtSATZx9soJ9JcjaEhmvsIcXqFnmVrPTN72NgBqeopc/0olmzgv4X ++VRE0JWaRMUVazmS7z03chDhDgO7GaZP/1do+NPi4z6Q8grdn31zjB55oEzckHP8 +FydrpHEdhFGZHMGCDRvLRvq0xcIGocLRJsvhTGfF/CrHipRc+0oR92xlgxDUcQ/Q +gWUfwcsKg8Gz9OllD76xn6/HyLGwfjV207eNgV9gj0E0H28KhrP8AZPbMHflrGZa +N6JTQ/w5YLTkaaFLHcwm6Kw8WXEl+dFHMQKCAQEAwF2PLHD8FzU/wayOanMlsnxt +TaR4YhhdMW1LIcPHESM69ZhdUUMzq/Y50Mms/DlcLNkgKzn73kYKLV3oR+/p3VhN +HBR710SpkrD1xDovLEe5S8uL+z+Q9Iaxqzgn85xHIn+BWJa+x3doAzpuOptmY7SP +75cQqiIhk/Z4PAXBo0GXiO6qiMzrakx02Q2eB1WQ4INrLEhdkL/ZlRPL/1mX3YAb +OZI78b2iu0Wq6PNsCKo7ptLmB963xxsxJo1e2qqKPvXoHndIrN/bo20AlGG0CNn6 +tFK62J1BWYwPIWOIHQPTq3kqBjHJgUo9dKyJE3/QoU/UIp+Kvwgd6ZVanZ7xPQ== +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/sshd_config new file mode 100644 index 00000000..b0980047 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-curve25519-sha256/ssh/sshd_config @@ -0,0 +1,15 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server + +KexAlgorithms curve25519-sha256 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/authorized_keys new file mode 100644 index 00000000..3da53d15 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/authorized_keys @@ -0,0 +1,2 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBALuABB7ZLPgkdljfCza3BVTCuZ2M0QYpx3KuGd7WvSN3bgAq9luTLRpbjoyNEH2dIjk8NtMXY3Yk1MjDeN6OGhyPHHlaVtiBoA2ct62Q/17+FPObLtyXd3B2jb7MRUbW1dGRqinWQGr/wmrkyE4Q9yEes4rcEmRHXwNhP5l5+1qzAAAAFQCoR/mlasRxdgbCZCx2gM8ajSSCEQAAAIBMsluPPDcueeoePBvHnPAGV5o+2Kbd6vvUIfOtuwjtAYFtbEQQdl9wUQq57oRWDfUDeuE4kHNgsVoc5HwsRPY+mF94kC2Q86CraEnmAMXOOvEGdWAkngFJGvRmoyCSt8cVXSZTMF9IXWjArn1/ov1U/KpUEXV62k+Bx3MjYhnzswAAAIBRYcOd6Ng8p/DSTogFFBqAOSqoTvHLxtE9jYmeJISA0c3V396cc0oNHrUrJnOywX5AROjKzx8D5HkQuxQnb4n2vHFgmK4oRlfHtNu4zTWBQfS98Yv6o2Rbi0vlPoOHNnZM1DReGvQdWVinMfgxTDFGqZLmI4+KifnnHYHec9t3NQ== inifc@The-toxic-avenger-II.local +ssh-dss AAAAB3NzaC1kc3MAAACBAIRkGmYClOfQAADnNPWAfdjVcbFgLElXCDslFbn6T8xtCaxOAHDPhmbs9ZHxydRkfe3z+8AHJWs2ZC3OjkPiv90UO4/P9xozHkiBmfJ/340FNuRzhWAjVp5E9McPtQTXxR0dbuoaEHSqaXozGZg3HIeJOH/9t10B811LH0v6ID5tAAAAFQDzrk+j/PB+MLqZAnLjmZiWIufzywAAAIApxlvENHZPB4/q5eji+v2x7VQx2jsTBeVUbeY1dyWKre/nO/YS2ZG2iamt2cgcw17wf3FZ7Kymoatv7PNnhu76Lubjaq4tB7qBA08SwXEddyQLZyWXI5hyiySyBaGpXp/ViveSuNBbzIskr+GRDY7xzI3DoPCXgxwENJKlTFEEsQAAAIEAg11TglZ+DmUu7OtIaNX56vcdFGa14DGNjoUqtnH4s/JFttqqS55aZVKeQh8b+F8tSLptjK/IBS83n76bx+/cu+Ee3WDS0M2jnTGU/twKtL++7mkiQ7AdLH6JXmqoXGVgcfTM4zos8CNDXo+k+2hZuoX3yWrSBK68TPvMzYC4XfE= inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/dsakey b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/dsakey new file mode 100644 index 00000000..3c88095d --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/dsakey @@ -0,0 +1,12 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIBvAIBAAKBgQCEZBpmApTn0AAA5zT1gH3Y1XGxYCxJVwg7JRW5+k/MbQmsTgBw +z4Zm7PWR8cnUZH3t8/vAByVrNmQtzo5D4r/dFDuPz/caMx5IgZnyf9+NBTbkc4Vg +I1aeRPTHD7UE18UdHW7qGhB0qml6MxmYNxyHiTh//bddAfNdSx9L+iA+bQIVAPOu +T6P88H4wupkCcuOZmJYi5/PLAoGAKcZbxDR2TweP6uXo4vr9se1UMdo7EwXlVG3m +NXcliq3v5zv2EtmRtomprdnIHMNe8H9xWeyspqGrb+zzZ4bu+i7m42quLQe6gQNP +EsFxHXckC2cllyOYcosksgWhqV6f1Yr3krjQW8yLJK/hkQ2O8cyNw6Dwl4McBDSS +pUxRBLECgYEAg11TglZ+DmUu7OtIaNX56vcdFGa14DGNjoUqtnH4s/JFttqqS55a +ZVKeQh8b+F8tSLptjK/IBS83n76bx+/cu+Ee3WDS0M2jnTGU/twKtL++7mkiQ7Ad +LH6JXmqoXGVgcfTM4zos8CNDXo+k+2hZuoX3yWrSBK68TPvMzYC4XfECFQCRkPdi +9X5QbN1RF5bD4qgnpOdQTg== +-----END DSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/dsakey.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/dsakey.pub new file mode 100644 index 00000000..20d6d502 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/dsakey.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAIRkGmYClOfQAADnNPWAfdjVcbFgLElXCDslFbn6T8xtCaxOAHDPhmbs9ZHxydRkfe3z+8AHJWs2ZC3OjkPiv90UO4/P9xozHkiBmfJ/340FNuRzhWAjVp5E9McPtQTXxR0dbuoaEHSqaXozGZg3HIeJOH/9t10B811LH0v6ID5tAAAAFQDzrk+j/PB+MLqZAnLjmZiWIufzywAAAIApxlvENHZPB4/q5eji+v2x7VQx2jsTBeVUbeY1dyWKre/nO/YS2ZG2iamt2cgcw17wf3FZ7Kymoatv7PNnhu76Lubjaq4tB7qBA08SwXEddyQLZyWXI5hyiySyBaGpXp/ViveSuNBbzIskr+GRDY7xzI3DoPCXgxwENJKlTFEEsQAAAIEAg11TglZ+DmUu7OtIaNX56vcdFGa14DGNjoUqtnH4s/JFttqqS55aZVKeQh8b+F8tSLptjK/IBS83n76bx+/cu+Ee3WDS0M2jnTGU/twKtL++7mkiQ7AdLH6JXmqoXGVgcfTM4zos8CNDXo+k+2hZuoX3yWrSBK68TPvMzYC4XfE= inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/sshd_config new file mode 100644 index 00000000..2da444aa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-dsa/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes=+ssh-dss +HostbasedAcceptedKeyTypes=+ssh-dss +HostKeyAlgorithms=+ssh-dss diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/authorized_keys new file mode 100644 index 00000000..c4bd7557 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/authorized_keys @@ -0,0 +1,2 @@ +ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFA6uJvyVvpQ66pJjNJqQVqXJv/IqsmCassTi7hU8H0unm03Lr6Y6oiQzhLzydDIOkUOeFtdWlD0W6m1iPh9e0GZgAOm21/P/rw2K0lM6TOw9+WNOpH08jgNr7ZAi4h9s7j8BC3kAOPtOCveTd56TRMloaraRSboibuHkZHJp3em98m3g== inifc@The-toxic-avenger-II.local +ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACrCEb4WvC3MpRjVlRQ8t4BaQr0AlORvs7Aoj7o/BGCgkRx67eilJgi/xDa+DNEZU+fquFfcRCNQZC2DXaoE+5llgEVRq5mTb1WjjdKwSRjhPAXuVozy8Cgs4eghkPwMdmIJNTj9EVTpDHJgl+leMUY2PtTMRHkbwFEemlVH9BY7PaLNg== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/ecdsakey b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/ecdsakey new file mode 100644 index 00000000..218b4743 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/ecdsakey @@ -0,0 +1,7 @@ +-----BEGIN EC PRIVATE KEY----- +MIHcAgEBBEIBeIQ4dghknd6NyyT3NLUxALQoCbtHGoBp9b5E/G5oD3ooBpndp88t +9va2XMMItUVH7XVOt7/Wo9L/OsMdw9neZHGgBwYFK4EEACOhgYkDgYYABACrCEb4 +WvC3MpRjVlRQ8t4BaQr0AlORvs7Aoj7o/BGCgkRx67eilJgi/xDa+DNEZU+fquFf +cRCNQZC2DXaoE+5llgEVRq5mTb1WjjdKwSRjhPAXuVozy8Cgs4eghkPwMdmIJNTj +9EVTpDHJgl+leMUY2PtTMRHkbwFEemlVH9BY7PaLNg== +-----END EC PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/ecdsakey.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/ecdsakey.pub new file mode 100644 index 00000000..edfe248e --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/ecdsakey.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACrCEb4WvC3MpRjVlRQ8t4BaQr0AlORvs7Aoj7o/BGCgkRx67eilJgi/xDa+DNEZU+fquFfcRCNQZC2DXaoE+5llgEVRq5mTb1WjjdKwSRjhPAXuVozy8Cgs4eghkPwMdmIJNTj9EVTpDHJgl+leMUY2PtTMRHkbwFEemlVH9BY7PaLNg== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/sshd_config new file mode 100644 index 00000000..ed2a3e0b --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ec/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 +HostbasedAcceptedKeyTypes ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 +HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/sshd_config new file mode 100644 index 00000000..64af33e0 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp256/ssh/sshd_config @@ -0,0 +1,15 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server + +KexAlgorithms ecdh-sha2-nistp256 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/sshd_config new file mode 100644 index 00000000..31826414 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp384/ssh/sshd_config @@ -0,0 +1,15 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server + +KexAlgorithms ecdh-sha2-nistp384 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/sshd_config new file mode 100644 index 00000000..ed4c386f --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ecdh-sha2-nistp521/ssh/sshd_config @@ -0,0 +1,15 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server + +KexAlgorithms ecdh-sha2-nistp521 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/authorized_keys new file mode 100644 index 00000000..d27c439b --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/authorized_keys @@ -0,0 +1,2 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDqJQOoriErxxy+uvboaC6ADzZWiyAN/ZERFxt3tHW2z inifc@The-toxic-avenger-II.local +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPRPSAhS3dFyNAlnxKPoewUppNgO5rYXo1YUIlc5rz+q inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/ed25519key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/ed25519key new file mode 100644 index 00000000..8645f826 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/ed25519key @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACD0T0gIUt3RcjQJZ8Sj6HsFKaTYDua2F6NWFCJXOa8/qgAAAJACR0HzAkdB +8wAAAAtzc2gtZWQyNTUxOQAAACD0T0gIUt3RcjQJZ8Sj6HsFKaTYDua2F6NWFCJXOa8/qg +AAAECIeu3SkXljb1tGkH+kEJNNK2g19QbPz/Vi9lZVU45A+/RPSAhS3dFyNAlnxKPoewUp +pNgO5rYXo1YUIlc5rz+qAAAADWluaWZjQHdhcmhlYWQ= +-----END OPENSSH PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/ed25519key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/ed25519key.pub new file mode 100644 index 00000000..32f47808 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/ed25519key.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPRPSAhS3dFyNAlnxKPoewUppNgO5rYXo1YUIlc5rz+q inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/sshd_config new file mode 100644 index 00000000..52bf1b50 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ed25519/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes ssh-ed25519 +HostbasedAcceptedKeyTypes ssh-ed25519 +HostKeyAlgorithms ssh-ed25519 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/Dockerfile new file mode 100644 index 00000000..df485831 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/Dockerfile @@ -0,0 +1,46 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] + +RUN rm /etc/ssh/ssh_host_dsa* /etc/ssh/ssh_host_ed* /etc/ssh/ssh_host_rsa* diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/sshd_config new file mode 100644 index 00000000..3bb2319e --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ec/ssh/sshd_config @@ -0,0 +1,13 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/Dockerfile new file mode 100644 index 00000000..51aff637 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/Dockerfile @@ -0,0 +1,46 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] + +RUN rm /etc/ssh/ssh_host_dsa* /etc/ssh/ssh_host_ec* /etc/ssh/ssh_host_rsa* diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/sshd_config new file mode 100644 index 00000000..3bb2319e --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-ed/ssh/sshd_config @@ -0,0 +1,13 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/Dockerfile new file mode 100644 index 00000000..0d3df278 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/Dockerfile @@ -0,0 +1,46 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] + +RUN rm /etc/ssh/ssh_host_dsa* /etc/ssh/ssh_host_ed* /etc/ssh/ssh_host_ec* diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/sshd_config new file mode 100644 index 00000000..3bb2319e --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-host-rsa/ssh/sshd_config @@ -0,0 +1,13 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKgIBAAKCAgEAzxYUc+vnLpK9G3FS780COAE0IblNZ+f9+JRoa8Rdb+Ug0mxj +0Y+uUwCjCQj42QY/snUIubfcVJNkS31lzYmNwajnEjc1xHxpPVG8JtMH9GoFxcMn +VoJkT4pkReiGFjw1J9+brLSOaBNWGEt1HNN553Ti/4qp6A3d00AI1+ghY3PIYOaI +jDGerEpZsirpSXIfuEUtyH8DcV185JYr0OVDy+kMk9YYJef3KZ1YbtsprWBHR/7K +HcN2KcbQ9AkZRU1Xb8b7m2tGde0+gIXiDYF4kaEocvcxTHAozlPgm3ue5++4S5q6 +CinzEVXlWu0dXHil1KvLZjdq6qG46XwCx1k9+G3RASaFxkzuMAqxZTs2Njc+Hj4N +Xb+gqI6aNSAfVzPYTLm8dUGvSa5y/lHPKkJlQoX7OTL/sc0OEN4fwbY8Q3TSr02A +NwOsed3IqzNj8PpuV2GBGwe3NG17x3ClvXHsCOtT7UUVzs+sOyz76J/uPlf3RiGs +F9SYvG8ui4m9dyRGL3hB87vRmUr9tLRIk9r6T5+fb17BnMbLTlwLqQgtRnOSDISH +1yU3pnEvmboDhyYrGc78MHCoMCuHF7PbFpGiC/rKdiurJigvksylxUExrThmIRHZ ++vCJjVTdhJdJ76Yb5f35lY/Zts8Kil0+TPXVWDrNI0cKv1W4dOCTg+paSwMCAwEA +AQKCAgEAra1i8eXDObgvibh9Skixt66qvi3e0WosAjLVcKx7gMC1ykTFYpgSJ+K8 +2XMA4WLwQQcOjlO5IeWLlBRTMRJQJT82rHxJR8TfrmHCXv1WCpJwzO9jKpao8lyq +xEbDThqoqgxLT4kOdhLhffaq/cYO0yOgzZjJ7qjShb2KrSkt926/eyVdF9b1sKGa +oGaEyOhB2hWK1EBR7t3tRPj9PnFJbtbBiathDUmCbRBdfnuodJPutF7nvBaWH2tz +C3gmDY1T65cCpdJOgdC7PqcKczFGoTx75A+U9PqL/p8yHLSNDRBrjFzz8lpEVSGo +/Z0npso4qih6qfuIW8fOgWNUIUSjRxjbecv2FEo2jrJgQu7ijfRbNIjPicOQIudC +3gt3NFJipvYjcP+Yw5996QVWloi114rLNqxewZ/rsNKLda6t8APsdqCJRdv4tWHh +JcfQrSeWCR4kaziJnpfPD1PNkEMjaapFrD+3gsRPH2QctcgKC1QBqShvhnP1HbOa +ViUw+iTw3g/+8W2rGMaBADMuoNfBe63UnfhtsLLX4/nAAf1MzjJx3HDPE7fVfyg+ +ylwNgBT9GVJZQBRgTg/wvAPS2Ps9LfD52GkpwNNdwt5ZLpGQrrLthhc9uygy8ypT +bHIPLLSDwwj6GWFKuCp+gibBhjDLJAJ7quttfxAQme33W5GMZaECggEBAOxRlLFl +zr8coom8HUFny17kzrNf5hSuf+G5MS/Rb1kq12hDqilDrctLb5RzQzC5iFUVzazF +FU/yILvE92xjdvVk82IltVVRF+eUk6zhgmvgmhEp1DuGFpwoKOM4v7doO95zhrtI +t/LtZSV7Lw51H1FDONom72m/baLiXQ9pOasbK+tW8+AU9+8D4cjq+PGBzE4vVqmi +JG91ZvNbxjiODl9FXq615fm51w75GRpy3QQE5UGWHVNrLErxfTjprJbxBIroY2Pr +o1W9fC3tpWOLypcNBfQQ+BRqYQT68vdp4LaAGQvoKhHybpf1v1/zx4nXW7tMI+0K +AeXn71C7NVrOov8CggEBAOBVQDHCDNQZA78Tn7qWJlPhqYuEALxRuKKRcGAP55+M +rmEg+UjZ4sGOiz2cwWuZDvmR2x9KGjs1Fef7/25TsNw5bT0V4TY8Jt9s5cJbgixk +3HaGqnc2/TU3C1vwdyO0FlDTGveNxY9m5u49VHnxm1ZOavFx0yFCyQdRhTRWvVym +Ru65BrFecT+Jo0faL7OjAvB76Lq7dPw2LpG/nHmqwOxDOFIuGqVr7fw4nTnv4kFP +9r1EThvp7lIfnhLEavm/+9bC0uH4Nm6q/mZmPV0Qiv6qpXZC/eBlnhTx8dMqmq8S +H8qah0qJ/jWr5qGJusl95hQCFLAEdFewlHkN0yYdy/0CggEAY/6lL2dH02A3epaJ +voo/6Lhiqk3y2l94JzgokvZI6m8RVMIE9472tCYIYcVf8fcfs/kU3X1LZleq+CkB +FPEFfhKoVahlEWPN/KTG1AlcGW+hYY/UiRdU6+CmZHc30FCfvKIfqZG8nGNNQE3e +fHycstMB9HUzKwjgSGMGQ6Yfy8IklGFnsjLNMmrvGAgtLGvi2lZ3kjHUvwDrfiAg +QQADHtcImF7JoCC92k0XDTT7Rl8X7uepIwofZNrIRNPDvt7fMDPjEn270GTsbba4 +G+Yj5ESTd1HS1zioMuZI9t3rQu3zKzGi05NErrJCt0Q885uX6inurbdlVDYO8pc0 +nWcAWwKCAQEAsTAkyChxYYVwhBfH7eRy2YZAGEZnHled8inWDMoDNO41PdqBi50t +kZw5Nqz9yTLXtSATZx9soJ9JcjaEhmvsIcXqFnmVrPTN72NgBqeopc/0olmzgv4X ++VRE0JWaRMUVazmS7z03chDhDgO7GaZP/1do+NPi4z6Q8grdn31zjB55oEzckHP8 +FydrpHEdhFGZHMGCDRvLRvq0xcIGocLRJsvhTGfF/CrHipRc+0oR92xlgxDUcQ/Q +gWUfwcsKg8Gz9OllD76xn6/HyLGwfjV207eNgV9gj0E0H28KhrP8AZPbMHflrGZa +N6JTQ/w5YLTkaaFLHcwm6Kw8WXEl+dFHMQKCAQEAwF2PLHD8FzU/wayOanMlsnxt +TaR4YhhdMW1LIcPHESM69ZhdUUMzq/Y50Mms/DlcLNkgKzn73kYKLV3oR+/p3VhN +HBR710SpkrD1xDovLEe5S8uL+z+Q9Iaxqzgn85xHIn+BWJa+x3doAzpuOptmY7SP +75cQqiIhk/Z4PAXBo0GXiO6qiMzrakx02Q2eB1WQ4INrLEhdkL/ZlRPL/1mX3YAb +OZI78b2iu0Wq6PNsCKo7ptLmB963xxsxJo1e2qqKPvXoHndIrN/bo20AlGG0CNn6 +tFK62J1BWYwPIWOIHQPTq3kqBjHJgUo9dKyJE3/QoU/UIp+Kvwgd6ZVanZ7xPQ== +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes128-cbc b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes128-cbc new file mode 100644 index 00000000..589f4782 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes128-cbc @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,3931899F8F20CCBDA0692CAF6BA5CE9B + +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes192-cbc b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes192-cbc new file mode 100644 index 00000000..694229d1 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes192-cbc @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-192-CBC,160CCC8D8DFD21740AF14F59C43F7B6E + +e+tmJbmIZfIf0aq8Pak6fAYxxrVvOe+4UgT3QGGAZhZXz0T++A06hGQl32cPXvcY +BIx3GzV8FjYWh1nmrrTfWWrZlfLeg3kdFgSovhFrrxSqCH1ey26XEMdNOtJt3wZT +lkF0VPdQ+Dpu5EjoekHc36ewYVdTuNrhJ2rGxsdHOq+tccm7UE+xSFfvY45fE9+b +6JM2s/F9kdvG+hyD/IMlfRVb9wTtbowNUKhAOYNlto83JhuzJvZNFKNnEiD439q/ +PleAVflN4fwXTSDpwxeXrCDwG6K32LgrhOnYj7xwSfcjoPQI9xm086KpOUXhO/Ym +EyD03OS6yv8Yk0EBXHP4y3T7ZI4hKte7Ad5dOBpK5gU7QidfHP8NVmVuKeSTpxxA +xMfSQI0mRqSGq9aLOH3xL7vQYgmFb6FqE+v2nv+5tF0pO3swz3N4ef08B71U4m7F +6+MosRAeZrgJLtE+Bt/VJIxczazSPyg1Ab3MdSPSmuiWEAyzd277Tp2XD1Vtwide +Ds/V6qgiX+ri9PYZ30HlqvVjBi7v4xyRybfUsUd8zctIs1kLT/4/RHnAZzSjWQNy +9nNYDe8oUCaHKIspqzy4RHj1wyP+hau46REDoVUom9IlSCt0KTCywbKwgc2MObgM +qOEq4xBKdnaj20HLq4lCsfcetwxM3FhcCDq6NxWFKwuMxOIg62vCVXt87mLq5tWd +RKJ/fF68/y03WzGkZ2FZkZi6h+HC1X+IYe5uabMg1bldhgjH/LrUTXNgRuBPPm3G +fcNIL/Wyq+E8K6IHfq9MMZeOWA2fhE3DwormDC2w3KIP/KeRMVfnoZF2copdX4Dp +R/UHFXD+VX/r2An8Hq3U7Aw/KCkdbllPS71XyebElTsYGMkyjtikfma/VmgJTEbn +RjB9Fa3J/8Y7MMBd9fzOEJKDeUU1oq7sMZ8ctodMf6pGlWSh5px1YegMu3C+OcbL +PESfZdCmV4MJFRckiJLY03A4/4UkyKu7W5lXaFZYumffCXJ1+MwB1HZQo81ABgCz +RXUv1UD6KcjJ59rMuTZVuHWS5uJpXLIGpPKgYE/SsajhwolDv3/NifSRZZkXaT4Q +CFoKWGO+okBMqnOSxnIuUE1HAp0+LVEG1ceTkgbkmD9hEVGKv60LAG9UHPImaMaF +cyTuOufD/HVHwbefv1EPKU5/QOFsdhljJUIFF3INfvWMFHnA8SaFIVRY4S60TwaJ +O5xP3k/7nvddNJfSNgjNJduWXg2K9Kim29lnwD0hMrROyJobdFUJGTXEaaY+wP2K +9wB9uHzwcrwKo3AlzBl+f9S7mtY2/4AOo2+fz4OTG3oHxGRx4hrQxWWZ5jcOqdwd +BxZeU7vda9hgueDuBMbszA2a6efllc3kxjf2OgMkK08SsADL/7sT+4Tp/SKQwCoZ +4DQUQrxzRCWH69cBcHKlLMj9enTEVYkmb+P8Ev0HGTRtpwksX4JO5ypR0qrGEGXc +b17j982/eWxkk9CmoeN8n9JGZsgzF7lVYiKA2RJZEn0eV8r0zQpRekNAH+6gM+3K +vKbqRDWkHn71zZB5gbawZXDw5K2TEt01F93R2QW/2Kn1GLVN8ulyvaIEDc2dIcjV +l6BdDrE8kMC816jvtFBfCIHu57KMvJpdiBJZygHwUR1/cUZ6thIo2cjE2S71R2HU +RQUnnt39O89R99x+FnqH9D45Uz+cpNy0yVB3lojeTPEiP3TZxRTeBANgM2JtTc+N +H4EbE1cwyuYPhrKSHz2YZJPATcErWDuIjaNhSpcC7i/0jKSoPhRrH5kRU0WtX96L +VnN+pZMZnAJIX80Zj7JyL7ZafBAAWOKjzIS23FNGmnslIrp88XHsNdCOPc8ki7A1 +APjLb4ZuTtz2jBjDcINlSLq/LTfBYtSqxt+B14MMnoPy91daT6WDhKBO6+P7H3eA +LKsSRSXu3Xi46LeWV1AAE3qUP0jVizVqynjZaV2dTKUlcabIgC9Zblm08Jns512J +1quM33SlDtHSH1NKi9MgoPrlIWF2LR8Yi5q+c66C5PFRneioPsuf9SJXdfptKx2s +k9bv/nD5g9ME7ETDX6ngcZRDdtS3fehi7AKFvINPfLgWDQBUNcf+2SbwiE8+Ij0k +1yArWRR8/MoRkULI9aFSdIwHbOSRsriIO5VfUkG0ROIPdZgJMwh8u03yhekUaSTw +bAhqsKqct768FDlVeJgadsfZUe+n5R/ImLq9uu9OM6FbkxKnqm5ws1PvvfomT8x3 +GYjyF19oPOHQrQKAJM3goJ3sQ9cLi9iZvAyegBxg8YDBj8i9Hg182AI6R3bbruEw +WiN1qXfULEbF6IkilD8n8YVVlN7h+M8n9gzGBLm5kLCSPIQmuhqBrITxCoj7HvRG +3A54L1U0jF9QrZRaXK5Zs22yx7bHFFfqoGYKXWXab4HC6GfwdIYpewvZvAD1Xz05 +31CrYNyztrmGspPxNsT/J5lHA+NfYX2iXq4WN/aGffiMxSo7MuIC9GqZRsxQndjc +586TTQUYtDomnXqg4GjBGn0uFM4z//5f8YT4eV5teW+DQWgEzIXu5prMM9jiQkNA +VNJgQk1RkV0l/z8DbZWxqt2MdRTvIGXJIP8AD6Vus4Hyv/iqZTd13N3hRj54LwC6 +K/kPfMkAHRIoqIn+NTJx7iKeF5gjDx6ynYz0P+vl9AlZVkQIqMpw72KMAhLQPbJg +/766yzs+fe1UgGmKcKIiGEffONuU4fZV/a01npu2mOqREjS1rIbln83jMH5sVylW +B4aeYyb5Bbz5VVSKs8DfWtCiwP6MvfYX87pzpWAQ6VYlmVuEWE5trTj56sbaMpPY +O6Igmg6EMYFAcvnBQW5SCPVHZ21TEV7q2bCpfmgmC3Ro20MdzLWapCy05Go3TZs/ +1vEbiZ2HfqL5mn5DoDyrBiwCNHEQx3sUTqnc/bWc+8vASrLf5pYKvehxktBWesv+ +R/LVVfBBIEL3v8esKk5z3oR7B8oOBbjmOLAnayvyohz10GysRbqMdr5zhY016v8Y +yQJKokGvJLiWd7oBeVlpKCZ9ZbtcunYlyocf3OcOM+hgyMNIicrtLVuSy/PEGPYR +fTNXNiQyGd8345uvCXXVT1NFxoG2zD2WdcPo7zKxlCPeRJtDFY2mANnPPl9ajRyE +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes256-cbc b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes256-cbc new file mode 100644 index 00000000..24de7e0a --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-aes256-cbc @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-256-CBC,4B27F143A3534B0FD1271F1431962727 + +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-des-cbc b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-des-cbc new file mode 100644 index 00000000..1bbc58a7 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-des-cbc @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-CBC,41228C5CF14D6ECA + +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-des-ede3-cbc b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-des-ede3-cbc new file mode 100644 index 00000000..7baac617 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key-des-ede3-cbc @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,D5A0E38769AB0274 + +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/sshd_config new file mode 100644 index 00000000..c0abd87a --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes ssh-rsa +HostbasedAcceptedKeyTypes ssh-rsa +HostKeyAlgorithms ssh-rsa diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/authorized_keys new file mode 100644 index 00000000..d6af5292 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/authorized_keys @@ -0,0 +1,2 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDW3NDkkJ6P+xWQJxikh6uT+M0havQHM0u0GG7JfyhxSrw2ZUaDOye/Qx5vtV722OJ8RZM+Pqx+R2ykqFu0uGp64dn4Zdgn1tCzcjHBZzT2AD4bu0Z6NnIxEx4I/BR/bIELwbQ0XEgzowO17sDhkROkG4MxQ0Bq6AXv/+3HXJlQ+DgU8ntzQLzqxBNOo324jMj5BCM4ohOR/MaMwjdVLwtGmXKf7oMwmvKJcmvSNY3XzszOmKJY92JCrOOvWAPfZJo51p5Pvt02Xb88alWfcdcrNoqh7+rxmLwe2fYAw195NyKD3mBB66Q/N2XolYAoKvYhSKE0cWwfb196l/y1zXDZsr43104gMY1njuA8ii7Uib28iIKsZI1MkFanXj/H1JZgMxUgLy6337UxvJU+J3lsM/SpdOmrLmS/dj0c6o1SYKj5KQdlESSyEG+2/uQVXgD/9lrXctBtmLe+hM6mOwPlA8JZ0/WM7ExAcidS40L0Ikos5U6o7NbHMc8ymMQwq+/FRg14FOYDssJOaF/ll8krWHir4RvghwONA2QFh4tsPhiWqS43l4H2HGHbqYuMUXjJ561MmLfLfbe8efuUldd61o1a3raWePpdtakVx7JsqYrfxB5m3YzhYQYipHfVp+TvvHDD/L7NYx5btsLj2eRRjRzHTsyEUo9vDEaVM7NQgQ== inifc@The-toxic-avenger-II.local +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCdzYCUgsh5WCZzASTan1+H72eFmtpGEd3qlLSkpm6fWGGO5N7gPmMnmt5XGhrXj3ce5kWRD2KEsdHob9QBbcdlR0zSy5OU7cRfzzZYeLjb0M+aWwLln6fI50moBIUalQRH729mgiFLADMi1doDj+6xUg1Z6L98qVEAi2QQC67qqnLgmeixdRi4MDX/2gM5W4ewmNKx4atbJbyf9GbJCyuukUCOcGzYOlSWWcY9CK/Bd7euL1zShUiL81bNKSI+TVKKJGgHwa6VNg7+IeEypPFHl01TgaWMoRutAd2YDF4c31Njfx+R5QuZWQlijet+xOB1oABHymLwGaun7ZF3JYBJaWkjsTLL8J6hfPho+4SCBTHNDM4UL/egoqx1D3VVTjzPTnTTIR6MR/m9yfA5cgN8RG7eyaLoEh8JLWwrg6qH/OklinQ5JP+fsIAtXGauj4gD8JwJjjvPrzHDEZYPKH4BJWJZY3Ga2c1vJKP0t5cu9cG4T/XvL6D/2Oac7IR/9n8ahG0Nd1jKHIrLJ6OVaGvyWkoaTfzL/w7ogBqd05yQipSKVfJ6zsmN7OT4XB5tFIix4TPimeH4f91BIM4f1F/8Vd6mhZtMdABfeUKCqZIOqxFrFD/fwmTDfMZ+WewGIcSxQ0vlZHlEZJUfu6drlBGJl2FuJhEzkd0L/+wTrkxkjw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/rsa-256-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/rsa-256-key new file mode 100644 index 00000000..cd5cbf77 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/rsa-256-key @@ -0,0 +1,49 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +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 +-----END OPENSSH PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/rsa-256-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/rsa-256-key.pub new file mode 100644 index 00000000..d85eb6de --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/rsa-256-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCdzYCUgsh5WCZzASTan1+H72eFmtpGEd3qlLSkpm6fWGGO5N7gPmMnmt5XGhrXj3ce5kWRD2KEsdHob9QBbcdlR0zSy5OU7cRfzzZYeLjb0M+aWwLln6fI50moBIUalQRH729mgiFLADMi1doDj+6xUg1Z6L98qVEAi2QQC67qqnLgmeixdRi4MDX/2gM5W4ewmNKx4atbJbyf9GbJCyuukUCOcGzYOlSWWcY9CK/Bd7euL1zShUiL81bNKSI+TVKKJGgHwa6VNg7+IeEypPFHl01TgaWMoRutAd2YDF4c31Njfx+R5QuZWQlijet+xOB1oABHymLwGaun7ZF3JYBJaWkjsTLL8J6hfPho+4SCBTHNDM4UL/egoqx1D3VVTjzPTnTTIR6MR/m9yfA5cgN8RG7eyaLoEh8JLWwrg6qH/OklinQ5JP+fsIAtXGauj4gD8JwJjjvPrzHDEZYPKH4BJWJZY3Ga2c1vJKP0t5cu9cG4T/XvL6D/2Oac7IR/9n8ahG0Nd1jKHIrLJ6OVaGvyWkoaTfzL/w7ogBqd05yQipSKVfJ6zsmN7OT4XB5tFIix4TPimeH4f91BIM4f1F/8Vd6mhZtMdABfeUKCqZIOqxFrFD/fwmTDfMZ+WewGIcSxQ0vlZHlEZJUfu6drlBGJl2FuJhEzkd0L/+wTrkxkjw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/sshd_config new file mode 100644 index 00000000..a792fc2e --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa256/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes rsa-sha2-256 +HostbasedAcceptedKeyTypes rsa-sha2-256 +HostKeyAlgorithms rsa-sha2-256 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/authorized_keys new file mode 100644 index 00000000..802ef736 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/authorized_keys @@ -0,0 +1,2 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCyEAy6D/jHzFdnm7Zq3WgomqoU3HbZbvA2zNCSr+qHVTeN80c7u+KEt9On9zlUjofqZFHhdvl6nlLlgHzbnwzQWb429RSLcRNkDsrUycy5E0uzmJwTERisVIaaE2iSEDpgnMgvScj/BlFbEB+/veVNpjrlbr46sAkbobUj3+p2RXRbanYiDFakUK2zZ/KbaAeXLqCOJ6NYE2JZSaWeEscE22kXVet/OvhRWh7SCLqdaN/b0ZOiHm8CmxEjkTHS4Jd2//a6TduV8xDh0BXMgjivMjNknTgHD+7n50ompIVKMvVwQlFhOsMmw40VC3crg/uW8YtsyoS4SNhU/bDXlb+X3aNgJoD6xtGMKRLlIm+v9bqC8fuAIYRQvcSbmdE4S7g4DEtdRyyuEqXvU4U8lv9LcuRvbbTZRIcrd2eXPGYFWz75ditvU3EhW/faRUURnPqsMwAlQUhd1bsCOqNIULBJQ8I9OVRs5o6UsHfLjfpB4y+1Jvm67lDBju5egtQGSt5Io4gpSI5GmNrKTv8sVBaFEOKDgBKfD5USamGqcO0bSwGi0QySK3pfIO0N6vBL45GyWtg6pQrePpwouQRuiGqa5Q7rwGAzcCg8Z2oDZTaLTtkwZ+4tPK4MqCcn9qnCU5ur2/IaV3h2acqw+jwxSilRTs8bbfDplnwp9ADFricvEw== inifc@The-toxic-avenger-II.local +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCeVpuoshw+u+jPPsKjAaE/fxP+Q8rV6TRQLO2iIFNGlDcDFbb/IiIVk9H4Xfqbqk9PzqZCCtwvTTbxKVagQFIr69yEIdaJ0OmSqycdYP4VXT2cYdR9aX0Z6/g7DBy818VBdYGlNGDVtXmtuus34oA9RZRMvBGe/FJb92g+cIT99QHOgxVs23zOHSosr+eogdXNXpWsSp2jstV8itnffDbrfKaYekcF1xLz7zLD2elIm71DlOrUEtWeRjsWTckLT6+pZg79jiE8HVF2YCYBRcnfeOsHsPFOew2C2nEQeS15rbRy7puo/PdQSa7Qz4V7ZnKT/LjfReAudxMGLlUCuKlC5GgboabveZZopNmxNWB++l+JRacAdHBaQk8ZF0XQ92rxAr6exmkbkgyAg+maJ5UCqh3asrshSB7NXVnPKTFm6qZCQpI54ZPlGXtnURLwLXNqRb/Gvlb41C68xr4QvmbACgdo7VD4zzK+ohz4WJyXM6pcBYWtwTFb0NHAUSneN9d029FP5/zgoLrWfvD+m3l9Ot+XyPniH/LL4BhWb3MAq4O9MzEKd9AUnsRH1n1NF94YwMnxqAMTnGFe8D0w1R5O4CCFhmEHybTabTyadKLyQViHUfH+Afun0mfqKJtVrqpOedYy21rEEiPRLQ3yUbiqQ/HfhPgoj0Jr3+uiOW40+w== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/rsa-512-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/rsa-512-key new file mode 100644 index 00000000..f65c23ba --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/rsa-512-key @@ -0,0 +1,49 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +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 +-----END OPENSSH PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/rsa-512-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/rsa-512-key.pub new file mode 100644 index 00000000..8c88869b --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/rsa-512-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCeVpuoshw+u+jPPsKjAaE/fxP+Q8rV6TRQLO2iIFNGlDcDFbb/IiIVk9H4Xfqbqk9PzqZCCtwvTTbxKVagQFIr69yEIdaJ0OmSqycdYP4VXT2cYdR9aX0Z6/g7DBy818VBdYGlNGDVtXmtuus34oA9RZRMvBGe/FJb92g+cIT99QHOgxVs23zOHSosr+eogdXNXpWsSp2jstV8itnffDbrfKaYekcF1xLz7zLD2elIm71DlOrUEtWeRjsWTckLT6+pZg79jiE8HVF2YCYBRcnfeOsHsPFOew2C2nEQeS15rbRy7puo/PdQSa7Qz4V7ZnKT/LjfReAudxMGLlUCuKlC5GgboabveZZopNmxNWB++l+JRacAdHBaQk8ZF0XQ92rxAr6exmkbkgyAg+maJ5UCqh3asrshSB7NXVnPKTFm6qZCQpI54ZPlGXtnURLwLXNqRb/Gvlb41C68xr4QvmbACgdo7VD4zzK+ohz4WJyXM6pcBYWtwTFb0NHAUSneN9d029FP5/zgoLrWfvD+m3l9Ot+XyPniH/LL4BhWb3MAq4O9MzEKd9AUnsRH1n1NF94YwMnxqAMTnGFe8D0w1R5O4CCFhmEHybTabTyadKLyQViHUfH+Afun0mfqKJtVrqpOedYy21rEEiPRLQ3yUbiqQ/HfhPgoj0Jr3+uiOW40+w== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/sshd_config new file mode 100644 index 00000000..e6efa866 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-rsa512/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes rsa-sha2-512 +HostbasedAcceptedKeyTypes rsa-sha2-512 +HostKeyAlgorithms rsa-sha2-512 diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/Dockerfile new file mode 100644 index 00000000..b321a4b9 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/Dockerfile @@ -0,0 +1,42 @@ +FROM ubuntu:14.04 +USER root + +ENV TZ=Etc/UTC +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/sshd_config new file mode 100644 index 00000000..3bb2319e --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-14.04/ssh/sshd_config @@ -0,0 +1,13 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/Dockerfile new file mode 100644 index 00000000..0af98161 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/Dockerfile @@ -0,0 +1,42 @@ +FROM ubuntu:16.04 +USER root + +ENV TZ=Etc/UTC +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/sshd_config new file mode 100644 index 00000000..c0abd87a --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-16.04/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes ssh-rsa +HostbasedAcceptedKeyTypes ssh-rsa +HostKeyAlgorithms ssh-rsa diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/Dockerfile new file mode 100644 index 00000000..9260ed51 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/Dockerfile @@ -0,0 +1,42 @@ +FROM ubuntu:18.04 +USER root + +ENV TZ=Etc/UTC +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/sshd_config new file mode 100644 index 00000000..c0abd87a --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-18.04/ssh/sshd_config @@ -0,0 +1,16 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server +PubkeyAcceptedKeyTypes ssh-rsa +HostbasedAcceptedKeyTypes ssh-rsa +HostKeyAlgorithms ssh-rsa diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/Dockerfile b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/Dockerfile new file mode 100644 index 00000000..7812a059 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 +USER root + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y -qq \ + && apt-get install -y -qq \ + --no-install-recommends \ + openssh-server \ + software-properties-common \ + git \ + make + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-get update -y -qq \ + && apt-get install -y -qq \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd --password password --shell /bin/bash --uid 1000 jenkins \ + && mkdir /home/jenkins \ + && chown -R jenkins:jenkins /home/jenkins + +COPY ssh /home/jenkins/.ssh +RUN chown -R jenkins:jenkins /home/jenkins/ \ + && chmod 700 /home/jenkins/.ssh \ + && chmod 600 /home/jenkins/.ssh/* +COPY ssh /root/.ssh +RUN chown -R root:root /root/ \ + && chmod 700 /root/.ssh \ + && chmod 600 /root/.ssh/* +RUN ssh-keygen -A +COPY ssh/sshd_config /etc/ssh/sshd_config + +RUN mkdir -p /var/run/sshd + +RUN echo "password\npassword" | passwd root \ + && echo "password\npassword" | passwd jenkins + +EXPOSE 22 +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin +RUN echo "PATH=${PATH}" >> /etc/environment +ENTRYPOINT [] +CMD [ "/bin/sh", "-c", "/usr/sbin/sshd -e -D -p 22"] diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/authorized_keys b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/authorized_keys new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/rsa-key b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/rsa-key new file mode 100644 index 00000000..afe5dc41 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/rsa-key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/rsa-key.pub b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/rsa-key.pub new file mode 100644 index 00000000..a5a1fbfa --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/rsa-key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDPFhRz6+cukr0bcVLvzQI4ATQhuU1n5/34lGhrxF1v5SDSbGPRj65TAKMJCPjZBj+ydQi5t9xUk2RLfWXNiY3BqOcSNzXEfGk9Ubwm0wf0agXFwydWgmRPimRF6IYWPDUn35ustI5oE1YYS3Uc03nndOL/iqnoDd3TQAjX6CFjc8hg5oiMMZ6sSlmyKulJch+4RS3IfwNxXXzklivQ5UPL6QyT1hgl5/cpnVhu2ymtYEdH/sodw3YpxtD0CRlFTVdvxvuba0Z17T6AheINgXiRoShy9zFMcCjOU+Cbe57n77hLmroKKfMRVeVa7R1ceKXUq8tmN2rqobjpfALHWT34bdEBJoXGTO4wCrFlOzY2Nz4ePg1dv6Cojpo1IB9XM9hMubx1Qa9JrnL+Uc8qQmVChfs5Mv+xzQ4Q3h/BtjxDdNKvTYA3A6x53cirM2Pw+m5XYYEbB7c0bXvHcKW9cewI61PtRRXOz6w7LPvon+4+V/dGIawX1Ji8by6Lib13JEYveEHzu9GZSv20tEiT2vpPn59vXsGcxstOXAupCC1Gc5IMhIfXJTemcS+ZugOHJisZzvwwcKgwK4cXs9sWkaIL+sp2K6smKC+SzKXFQTGtOGYhEdn68ImNVN2El0nvphvl/fmVj9m2zwqKXT5M9dVYOs0jRwq/Vbh04JOD6lpLAw== inifc@warhead diff --git a/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/sshd_config b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/sshd_config new file mode 100644 index 00000000..3b4fc7e7 --- /dev/null +++ b/src/test/resources/hudson/plugins/sshslaves/agents/ssh-agent-ubuntu-20.04/ssh/sshd_config @@ -0,0 +1,17 @@ +ChallengeResponseAuthentication no +LogLevel DEBUG1 +UsePAM yes +X11Forwarding yes +PrintMotd yes +AcceptEnv LANG LC_* +PermitRootLogin no +PasswordAuthentication yes +GSSAPIAuthentication yes +GSSAPICleanupCredentials yes +ClientAliveInterval 600 +ClientAliveCountMax 4 +Subsystem sftp /usr/lib/openssh/sftp-server + +#PubkeyAcceptedKeyTypes ssh-rsa +#HostbasedAcceptedKeyTypes ssh-rsa +#HostKeyAlgorithms ssh-rsa