来自Docker容器的SSH

时间:2018-09-21 00:17:08

标签: java docker ssh sftp

因此,我与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服务器,我不需要进行身份验证。

我这里缺少一块吗?码头工人文件中的配置?提前感谢。

1 个答案:

答案 0 :(得分:0)

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

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

对此加密技术有出口限制,我敢打赌,您的Docker容器的出口罐子强度较弱。

使用Dockerfile将local_policy.jar和US_export_policy.jar复制到Docker容器中,并覆盖其中的内容。

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