dmu*_*uir 6 ant ssh build-automation jsch
我的问题类似于这里提出的问题: Ant scp任务失败
BUILD FAILED com.jcraft.jsch.JSchException:拒绝HostKey:....
我的问题是为什么在我的knownhosts文件中找不到密钥?
无论我有什么样的known_hosts文件中,主机密钥被拒绝.通过ssh连接工作完全正常,并增加了相关条目,但也许jsch是无法读取known_hosts由OpenSSH的生成的文件?
蚂蚁文档提到了knownhosts文件需要在SSH2格式,而不是SSH1.讽刺的是,从OpenSSH来SSH2格式known_hosts文件应该是~/.ssh/known_hosts2,但knownhosts的默认值是~/.ssh/known_hosts.
SSH2创建的已知主机文件都在~/.ssh2/knownhosts/,因此可以安全地计算出预期的格式.到目前为止,我一直无法让OpenSSH创建known_hosts2文件,并且手册页也没有太多帮助.那么文档实际上意味着文件需要采用SSH2格式呢?
我已经尝试过dsa并且rsa没有按键,也没有工作(两者都适用于OpenSSH).
我搜索了两天,我发现的唯一答案是' set trust="true'.是的,这可以使任务正常运行,但不能不对安全性视而不见.
这是我发现的适用于更新版本的 jch 的格式:
[xx.xx.xx.xx]:22 ssh-rsa .......
Run Code Online (Sandbox Code Playgroud)
在旧版本中它就像:
xx.xx.xx.xx ssh-rsa ......
Run Code Online (Sandbox Code Playgroud)
即没有方括号和端口号。(不确定如果您使用端口 22,端口号是否是必需的,但我使用分配给 SSH 的非默认端口的服务器进行了测试。并且,如果不明显,xx.xx.xx.xx应该是服务器的 IP 地址,或主机名或其他名称。)
我通过让 JCraft/jsch 库为我生成known_hosts 文件找到了这种格式。如果您访问www.jcraft.com,您可以下载 jsch 源代码的 zip 和一些示例。要么构建源代码来制作 jar,要么也下载现成的 jar。我解压了 zip 下载,然后将 jar 文件放入同一目录中。
有一个examples文件夹包含KnownHosts.java. 您需要编译该文件,然后运行它 - 它会询问您的known_hosts文件(只需首先在默认位置(~/.ssh/known_hosts)创建一个空文件并选择它。然后它会询问您连接到服务器的详细信息.. . 输入这些,例如sshusername@xx.xx.xx.xx,程序将尝试连接,然后为您填充known_hosts 文件。
为了方便像我这样永远不记得如何从命令行执行操作的笨拙 Windows 用户,以下是编译和运行该KnownHosts.java文件所需的内容:
首先,导航到该目录(已将其解压缩并将 jar 文件放入其中,如上所述)。
然后运行:
javac -cp jsch-0.1.49.jar examples/KnownHosts.java
编译 KnownHosts.java。进而:
java -cp "examples;jsch-0.1.49.jar" KnownHosts
来运行它。按照上面的说明操作,您应该有一个可用的known_hosts 文件。
最后一点:KnownHosts 程序假定端口为 22。我对其进行了编辑,允许我输入类似的内容,sshusername@xx.xx.xx.xx:8888这样我就可以指定具有自定义端口的服务器并使其按上述方式工作。在 KnownHosts.java 的源代码中,我查找了如下行:
Session session=jsch.getSession(user, host, 22);
并将其替换为:
int port = 22;
final int colonIndex = host.indexOf(':');
if (colonIndex > -1) {
final String[] split = host.split(":");
host = split[0];
port = Integer.parseInt(split[1]);
}
Session session=jsch.getSession(user, host, port);
Run Code Online (Sandbox Code Playgroud)
然后如上编译并运行。
| 归档时间: |
|
| 查看次数: |
5625 次 |
| 最近记录: |