因此,我与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服务器,我不需要进行身份验证。
我这里缺少一块吗?码头工人文件中的配置?提前感谢。
答案 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容器中,并覆盖其中的内容。
按照该链接上的说明进行操作。