2011-06-15 143 views
13

我有一个要求:将本地文件复制到远程系统。 我也做了以下内容:Ant scp任务失败

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

我的构建文件是:

<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 ... 

任何想法如何解决这个问题?

+0

值得编辑你的问题主体来包含构建文件。您还可以格式化代码,日志等,使它们更易于阅读。 – 2011-06-15 10:39:38

回答

33

按照Ant scp task文档,trust属性:

This trusts all unknown hosts if set to yes/true. Note If you set this to false (the default), the host you connect to must be listed in your knownhosts file, this also implies that the file exists.

trust属性没有在你的任务调用中使用,所以会出现主机(10.184.74.168)是不是在你的knownhosts文件。建议您添加trust="true",或将主机添加到knownhosts文件。

+3

我也给过这个...仍然显示相同的错误 – user617228 2011-06-15 11:05:10

+0

@ user617228是已经在您的known_hosts中的主机,但具有不同的主机密钥?尝试在known_hosts中删除此主机的所有条目,并使用trust =“true”进行测试 – oers 2011-06-15 12:15:27

+0

@Martin clayton:真棒这对我有用 – 2015-06-26 18:46:49

3

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

请参阅man 8 sshd了解known_hosts的准确格式,以及有关在哪里查找主机公钥的提示。

+0

您的提示帮助我解决了我的问题。但是,我不得不通过JSch接口手动生成known_hosts文件。看起来JSch在支持的格式上非常有选择性。 – 2016-02-09 16:05:17