diff --git a/examples/sftp/build.gradle b/examples/sftp/build.gradle index d8ed52d255f..ce965a509c7 100644 --- a/examples/sftp/build.gradle +++ b/examples/sftp/build.gradle @@ -7,11 +7,12 @@ repositories { } dependencies { - testImplementation 'com.jcraft:jsch:0.1.55' + testImplementation 'com.github.mwiede:jsch:0.2.24' testImplementation 'org.testcontainers:testcontainers' - testImplementation 'org.assertj:assertj-core:3.26.3' - testImplementation 'ch.qos.logback:logback-classic:1.3.14' - testImplementation 'org.junit.jupiter:junit-jupiter:5.11.0' + testImplementation 'org.assertj:assertj-core:3.27.3' + testImplementation 'ch.qos.logback:logback-classic:1.5.17' + testImplementation 'org.junit.jupiter:junit-jupiter:5.12.1' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } test { diff --git a/examples/sftp/src/test/java/org/example/SftpContainerTest.java b/examples/sftp/src/test/java/org/example/SftpContainerTest.java index e54b5b72036..9ce4c30bf61 100644 --- a/examples/sftp/src/test/java/org/example/SftpContainerTest.java +++ b/examples/sftp/src/test/java/org/example/SftpContainerTest.java @@ -1,6 +1,7 @@ package org.example; import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.HostKey; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import org.junit.jupiter.api.Test; @@ -10,6 +11,7 @@ import java.io.BufferedReader; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; @@ -19,11 +21,15 @@ class SftpContainerTest { @Test void test() throws Exception { try ( - GenericContainer sftp = new GenericContainer<>("atmoz/sftp:alpine-3.7") + GenericContainer sftp = new GenericContainer<>("jmcombs/sftp:alpine") .withCopyFileToContainer( MountableFile.forClasspathResource("testcontainers/", 0777), "/home/foo/upload/testcontainers" ) + .withCopyFileToContainer( + MountableFile.forClasspathResource("./ssh_host_ed25519_key", 0400), + "/etc/ssh/ssh_host_ed25519_key" + ) .withExposedPorts(22) .withCommand("foo:pass:::upload") ) { @@ -31,7 +37,10 @@ void test() throws Exception { JSch jsch = new JSch(); Session jschSession = jsch.getSession("foo", sftp.getHost(), sftp.getMappedPort(22)); jschSession.setPassword("pass"); - jschSession.setConfig("StrictHostKeyChecking", "no"); + // hostKeyString is string starting with AAAA from file known_hosts or ssh_host_*_key.pub + String hostKeyString = "AAAAC3NzaC1lZDI1NTE5AAAAINaBuegbLGHOgpXCePq80uY79Xw716jWXAwWjRdFYi53"; + HostKey hostKey = new HostKey(sftp.getHost(), Base64.getDecoder().decode(hostKeyString)); + jschSession.getHostKeyRepository().add(hostKey, null); jschSession.connect(); ChannelSftp channel = (ChannelSftp) jschSession.openChannel("sftp"); channel.connect(); diff --git a/examples/sftp/src/test/resources/ssh_host_ed25519_key b/examples/sftp/src/test/resources/ssh_host_ed25519_key new file mode 100644 index 00000000000..2a03354f845 --- /dev/null +++ b/examples/sftp/src/test/resources/ssh_host_ed25519_key @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACDWgbnoGyxhzoKVwnj6vNLmO/V8O9eo1lwMFo0XRWIudwAAAJixm9bFsZvW +xQAAAAtzc2gtZWQyNTUxOQAAACDWgbnoGyxhzoKVwnj6vNLmO/V8O9eo1lwMFo0XRWIudw +AAAEDUMj/yjokN6yVDNM85skqB2LrPXgyH4FyztT3r3uKBDNaBuegbLGHOgpXCePq80uY7 +9Xw716jWXAwWjRdFYi53AAAAD2FhQDIzLTA3MTUzLTAwOQECAwQFBg== +-----END OPENSSH PRIVATE KEY----- diff --git a/examples/sftp/src/test/resources/ssh_host_ed25519_key.pub b/examples/sftp/src/test/resources/ssh_host_ed25519_key.pub new file mode 100644 index 00000000000..96f78a3fda0 --- /dev/null +++ b/examples/sftp/src/test/resources/ssh_host_ed25519_key.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINaBuegbLGHOgpXCePq80uY79Xw716jWXAwWjRdFYi53 someone@localhost