2011-06-15 141 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