diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactory.java index 27f1ac2d..d7991bca 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactory.java @@ -52,6 +52,8 @@ public class FileBasedSshSessionFactory extends SshdSessionFactory { hostEntry.setValue(SshConstants.STRICT_HOST_KEY_CHECKING, sshProperties.isStrictHostKeyChecking() ? SshConstants.YES : SshConstants.NO); + hostEntry.setValue(SshConstants.CONNECT_TIMEOUT, String.valueOf(sshProperties.getTimeout())); + return hostEntry; } }; diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactory.java index 29ffc5cc..edec05d1 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactory.java @@ -97,6 +97,8 @@ public class PropertyBasedSshSessionFactory extends SshdSessionFactory { private OpenSshConfigFile.HostEntry updateIfNeeded(OpenSshConfigFile.HostEntry hostEntry, String hostName) { JGitEnvironmentProperties sshProperties = sshKeysByHostname.get(hostName); + hostEntry.setValue(SshConstants.CONNECT_TIMEOUT, String.valueOf(sshProperties.getTimeout())); + if (sshProperties.getHostKey() == null || !sshProperties.isStrictHostKeyChecking()) { hostEntry.setValue(SshConstants.STRICT_HOST_KEY_CHECKING, SshConstants.NO); } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactoryTest.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactoryTest.java index 96b380d5..acd8ea95 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactoryTest.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/FileBasedSshSessionFactoryTest.java @@ -82,6 +82,17 @@ public class FileBasedSshSessionFactoryTest { assertThat(configStore).isNull(); } + @Test + public void connectTimeoutIsUsed() { + JGitEnvironmentProperties sshKey = new JGitEnvironmentProperties(); + sshKey.setUri("ssh://gitlab.example.local:3322/somerepo.git"); + setupSessionFactory(sshKey); + + SshConfigStore.HostConfig sshConfig = getSshHostConfig("gitlab.example.local"); + + assertThat(sshConfig.getValue("ConnectTimeout")).isEqualTo("5"); + } + private SshConfigStore.HostConfig getSshHostConfig(String hostName) { return factory.createSshConfigStore(new File("dummy"), new File("dummy"), "localUserName").lookup(hostName, 22, "userName"); diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactoryTest.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactoryTest.java index 7a9d71f9..97742017 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactoryTest.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ssh/PropertyBasedSshSessionFactoryTest.java @@ -312,6 +312,17 @@ public class PropertyBasedSshSessionFactoryTest { assertThat(proxyData.getProxy().address().toString()).containsPattern("host\\.domain.*:8080"); } + @Test + public void connectTimeoutIsUsed() { + JGitEnvironmentProperties sshKey = new JGitEnvironmentProperties(); + sshKey.setUri("ssh://gitlab.example.local:3322/somerepo.git"); + setupSessionFactory(sshKey); + + SshConfigStore.HostConfig sshConfig = getSshHostConfig("gitlab.example.local"); + + assertThat(sshConfig.getValue("ConnectTimeout")).isEqualTo("5"); + } + @Test public void sshConfigFileIsNotUsed() { setupSessionFactory(new JGitEnvironmentProperties());