【发布时间】: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 文件中的配置?提前致谢。
【问题讨论】: