【问题标题】:Ant scp task failureAnt scp 任务失败
【发布时间】:2011-09-15 10:04:49
【问题描述】:

我有一个要求:将本地文件复制到远程系统。 我做了以下事情:

  1. 下载jsch-0.1.44.jar并复制到Ant的lib文件夹中
  2. 设置路径和一切

我的构建文件是:

<project name="ImportedBuild" default="all">
  <target name="copyFileToRemote">
    <echo>2222222222 copyFileToRemote Examples:::::::::::::</echo>
    <scp file="sample.txt" todir="${username}:${password}@${hostname}:/shared"/>
  </target>
</project>

当我运行 Ant 时,我得到了这个错误:

BUILD FAILED com.jcraft.jsch.JSchException: reject HostKey: 10.184.74.168
    at com.jcraft.jsch.Session.checkHost(Session.java:712)
    at com.jcraft.jsch.Session.connect(Session.java:313)
    at com.jcraft.jsch.Session.connect(Session.java:154)
    at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:212)
    at org.apache.tools.ant.taskdefs.optional.ssh.Scp.upload(Scp.java:291)
    at org.apache.tools.ant.taskdefs.optional.ssh.Scp.execute(Scp.java:203)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    ... etc ...

有什么办法解决这个问题吗?

【问题讨论】:

  • 值得编辑您的问题正文以包含构建文件。您还可以格式化代码、日志等,使其更易于阅读。

标签: ant scp


【解决方案1】:

根据Ant scp task 文档,trust 属性:

如果设置,这将信任所有未知主机 是/真的。注意如果您将其设置为 false(默认),你的主机 连接到必须列在您的 knownhosts 文件,这也意味着 该文件存在。

trust 属性未在您的任务调用中使用,因此主机 (10.184.74.168) 似乎不在您的 knownhosts 文件中。建议添加trust="true",或者将主机添加到knownhosts文件中。

【讨论】:

  • @user617228 主机是否已在您的 known_hosts 中,但主机密钥不同?尝试删除 known_hosts 中此主机的所有条目并使用 trust="true" 进行测试
【解决方案2】:

确保您的 ~/.ssh/known_hosts 文件使用的是未散列的主机名;如果行以|1|base64data... 开头,JSch 似乎无法解析它们。创建格式为hostname[,hostname|ip]* ssh-keytype base64data... 的行。

请参阅man 8 sshd,了解 known_hosts 的精确格式,以及在何处查找主机公钥的提示。

【讨论】:

  • 您的提示帮助我解决了我的问题。但是我必须通过 JSch 接口手动生成 known_hosts 文件。似乎 JSch 在支持的格式上很有选择性。
猜你喜欢
  • 2023-03-09
  • 2014-10-19
  • 2014-03-09
  • 2012-01-24
  • 2011-02-19
  • 2012-10-16
  • 1970-01-01
  • 2012-09-13
  • 2011-11-17
相关资源
最近更新 更多