【问题标题】:SSH from inside a docker container来自 docker 容器内部的 SSH
【发布时间】:2018-09-21 08:45:47
【问题描述】:

所以,我已经很久没有使用 docker 了。但这是我第一次需要 ssh 出 docker 容器。它应该是直截了当的,因为我知道我可以连接到数据库,从存储库中提取文件。但由于某种原因,我似乎无法连接到远程 sftp 服务器。有趣的是,在我的本地它运行良好(没有 docker),但是在 Jenkins 上构建时,测试无法连接。甚至对于我在测试运行之前设置并放置测试文件的 MOCK 服务器。在 Jenkins 上运行也很难调试问题所在。

我正在使用 Jcraft 获取以下连接:

public static Session getSession (String host, String user) throws JSchException{
        JSch jsch = null;
        int port = 22;
        if (JunitHelperContext.getInstance.isJunit()){
            port = JunitHelperContext.getInstance.getSftpPort();
        Session session = jsch.getSession(user,host,port);
        java.util.Properties config  = new  java.util.Properties();
        config.put(“StrictHostKeyChecking”, “no”);
        if (!JunitHelperContext.getInstance.isJunit()){
            config.put(“PreferredAuthentications”, “publickey”);
            jsch.setKnownHosts(”~/.ssh/known_hosts”);
            jsch.addIdentity(“~/.ssh/id_rsa”);
        }
        session.setConfig(config);
        session.connect();

        return session;
    }
}

我的要求是出去阅读一个文件并处理它。我可以使用非 docker 模板很好地构建套件。找到并处理该文件。虽然在 docker 容器中运行它,但当我尝试连接时出现此错误:

Invalid Key Exception: the security strength of SHA-1 digest algorithm is not sufficient for this key size. 
com.jcraft.jsch.JSchException:  Session.connect: java.io.IOException:   End of IO Stream Read

所以这似乎是一个安全问题。在生产中,证书在服务器上,可以在 /.ssh 目录中读取。但这是一个模拟 Jcraft 服务器,我不需要进行身份验证。

这里有我遗漏的部分吗? docker 文件中的配置?提前致谢。

【问题讨论】:

    标签: java docker ssh sftp


    【解决方案1】:

    您可能需要在 docker 容器中启用 Java 的 JCE 无限强度的东西:

    http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

    这种密码学的东西有出口限制,我敢打赌你的 docker 容器有弱强度的可出口罐子。

    将 local_policy.jar 和 US_export_policy.jar 复制到带有 Dockerfile 的 docker 容器中并覆盖那里的内容。

    按照该链接上的说明进行操作。

    【讨论】:

      猜你喜欢
      • 2020-07-13
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多