ant使用ssh和linux交互 如:上传文件

来源:互联网 发布:sql server 权限管理 编辑:程序博客网 时间:2024/06/02 21:50

转载自:http://jiajun.iteye.com/blog/741001


背景:

ant生成jar包之后,每次都要往目标机器上拷贝部署,真是难受。

 

本机又是Windows ,运行机器是linux,如何办?来个共享?安装samba?

 

高人指点,采用ftp,要去配置个ftp还是不爽的事情,想既然ant支持ftp肯定考虑支持sftp等关于ssh的功能,一查发现,果然还是支持的。兴奋!

 

一、寻找资源文件

看ant的文档:

http://ant.apache.org/manual/Tasks/scp.html

 

在依赖的jar包列表 http://ant.apache.org/manual/install.html#librarydependencies 中找到

jsch.jar 0.1.42 or later

 

进入http://www.jcraft.com/jsch/index.html 找到下载地址:http://sourceforge.net/projects/jsch/files/jsch/jsch-0.1.43.jar/download

 

源码地址:http://sourceforge.net/projects/jsch/files/jsch/jsch-0.1.43.zip/download

 

二、测试可行性

下载后,放入自己的ant下的lib文件夹下,如果是eclipse需要加入运行环境window->preferences->ant->runtime->classpath中加入jsch-0.1.43.jar

 

例子,可以采用http://ant.apache.org/manual/Tasks/scp.html里面的examples,还挺全的,拷贝单个文件,拷贝文件夹,设置密码,设置私钥等

scp

下面亲自测试几个:

Xml代码  收藏代码
  1. <target name="scp-file">  
  2.     <scp file="jar/fetch.jar" todir="uu:123@192.168.0.175:/home/uu/fetch" />  
  3. </target>  
  4.   
  5. <target name="scp-folder">  
  6.         <scp todir="uu:123@192.168.0.175:/home/uu/fetch" >  
  7.              <fileset dir="jar"/>  
  8.         </scp>  
  9. </target>  

com.jcraft.jsch.JSchException: reject HostKey: 192.168.0.175

 

会有以上的异常,奇怪的官方文档不说。要求你所连接的host必须存在于你的knownhosts文件中,并且 这个文件也必须是存在的,否则会出现上面的异常。

 

解决方法:

 

Xml代码  收藏代码
  1.     <target name="scp-file">  
  2.         <scp file="jar/fetch.jar" todir="uu:123@192.168.0.175:/home/uu/fetch" <span style="color: #ff0000;">trust="true"</span>  
  3. />  
  4.     </target>  
  5.      
  6.     <target name="scp-folder">  
  7.             <scp todir="uu:123@192.168.0.175:/home/uu/fetch" <span style="color: #ff0000;">trust="true"</span>  
  8. >  
  9.                  <fileset dir="jar"/>  
  10.             </scp>  
  11.     </target>  

 

sshexec

再测试一下诱惑人的可执行shell功能,文档地址;http://ant.apache.org/manual/Tasks/sshexec.html

Xml代码  收藏代码
  1. <target name="sshexec">  
  2.      <sshexec host="192.168.0.175"  
  3.         username="uu"  
  4.         password="123"  
  5.         command="touch somefile;ls;df -h;" trust="true"/>  
  6. </target>  
 

若个命令可以用;号隔开。

 

关于拷贝远程到本地,拷贝本地到远程,选取特定文件等等,都是变通可行的,本文就不再演示了。

原创粉丝点击