Chinaunix首页 | 论坛 | 博客
  • 博客访问: 499950
  • 博文数量: 58
  • 博客积分: 6012
  • 博客等级: 准将
  • 技术积分: 1211
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-09 22:50
文章分类

全部博文(58)

文章存档

2010年(25)

2009年(23)

2008年(10)

我的朋友

分类: Java

2009-01-27 09:25:34

一、简介:
  现在我们安装Linux的时候通常考虑到安全因素(默认情况下)是不打开telnet服务的,而ssh服务是有的,ant很早就支持telnet,但要求我们在Linux下要安装telnet-server,并要启用该服务。

还好自Ant1.60开始支持了SSH 及SCP 操作了,早在Ant之前若要支持SSH、SCP、SFTP等任务就必须下载j2ssh的j2ssh-ant.jar和j2ssh-core.jar(在的j2ssh下有下载)。现在可以使用Ant提供的Sshexec和scp任务,由$ANT_HOME/lib/ant-jsch.jar提供支持,但是同样你也要在下载一个依赖包jsch-0.1.24.jar(文件名因版本而不同),jsch同样也是下的一个项目。

你需要把下载的jsch-0.1.24拷贝到$ANT_HOME/lib下,如果是Eclipse下的Ant环境必须在Window->Preferences->Ant->Runtime->Classpath中加入jsch-0.1.24。

JSch是一个SSH2的纯Java实现
JSch允许你连接到sshd server并采用端口映射, X11 映射; Scp文件传输等,你可以把集成JSch提供的功能到你自己的Java项目中,JSch 的授权方式为 BSD形式。

二、简单例子:
  下面是用JSch完成Sshexec和scp两个任务的最简单例子,如果需要更详细的内容,请参考Ant用户手册

[Sshexec任务]
<BR><target name="sshexec">
      <sshexec host="192.168.122.180" username="root"  password="123456"
         trust="true" command="cd /;ls"/>
</target>

注意上面的trust属性一般设置为true, 如果为默认值false时,那么就要求你所连接的host必须存在于你的knownhosts文件中,并且这个文件也必须是存在的,否则会出现 com.jcraft.jsch.JSchException: reject HostKey: 192.168.122.180异常。执行Linux下的命令时可以用分号";"把多个命令隔开,它们将会依次执行,而不需要写多个sshexec进行多次连接,每次连接只执行一个命令。

该任务的执行后输出结果如下:

sshexec:
  [sshexec] Connecting to 192.168.122.180:22
  [
sshexec] backup
  [
sshexec] bin
  [
sshexec] boot
  [
sshexec] dev
  [
sshexec] etc
  ...................

[scp任务]

1.拷贝单个文件到远端服务器
<scp file="c:/cmd.txt" todir="root:123456@192.168.122.180:/tmp" trust="true"/>

<scp file="c:/cmd.txt" todir="root@192.168.122.180:/tmp" password="123456" trust="true"/>

2.拷贝远端文件本地
<scp file="root:123456@192.168.122.180:/tmp/cmd.txt" todir="D:/my-app"  trust="true"/>

3.拷贝远端目录到本地,将以递归形式操作
<scp file="root:123456@192.168.122.180:/tmp/*" todir="d:/my-app" trust="true"/>

4.拷贝本地目录中的内容到远端,递归形式,但不在服务器上建立my-app目录
<scp todir="root:123456@192.168.122.180:/tmp/" trust="true">
   
<fileset dir="d:/my-app"/>
</scp>

5.拷贝一系列的文件到远端,会建立相应的层次目录,不建立my-app目录
<scp todir="root:123456@192.168.122.180:/tmp" trust="true">
   
<fileset dir="d:/my-app">
      
<include name="**/*.java" />
   
</fileset>
</scp>

<scp todir="root:123456@192.168.122.180:/tmp" trust="true">
   
<fileset dir="d:/my-app" excludes="**/*.java"/>
</scp>

最后一个任务的执行输出结果如下(其他略):

scp:
      [scp]Connecting to 192.168.122.180:22
      [
scp] Sending: cmd.txt : 0
      [
scp] File transfer time: 0.0 Average Rate: ? B/s
      [
scp] Sending: pom.xml : 852
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: application.properties : 142
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: application.properties : 45
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: test.properties : 0
      [
scp] File transfer time: 0.02 Average Rate: 0.0 B/s
      [
scp] Sending: application.properties : 153
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: application.properties : 45
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] done.

三、其他例子:

例子1:














例子2:
import   com.jcraft.jsch.Channel;      
import   com.jcraft.jsch.ChannelSftp;      
import   com.jcraft.jsch.JSch;      
import   com.jcraft.jsch.Session;      
import   com.jcraft.jsch.UserInfo;      
   
public   class   ExecSCP   {      
        public   static   final   UserInfo   defaultUserInfo   =   new   UserInfo(){      
                public   String   getPassphrase()   {      
                        return   null;      
                }      
   
                public   String   getPassword()   {      
                        return   null;      
                }      
   
                public   boolean   promptPassword(String   arg0)   {      
                        return   false;      
                }      
   
                public   boolean   promptPassphrase(String   arg0)   {      
                        return   false;      
                }      
   
                public   boolean   promptYesNo(String   arg0)   {      
                        return   true;      
                }      
   
                public   void   showMessage(String   arg0)   {      
                }      
        };      
   
        /**    
          *   @param   args    
          */    
public   static   void   main(String[]   args)   throws   Exception{
String   hostname   =   " ";
String   username   =   "wiimii ";
String   password   =   "jtev000 ";
String   remoteFile   =   "Setup.ini ";
String   localFile   =   "C:\\ ";

                JSch   jsch=new   JSch();

                Session   session=jsch.getSession(username,   hostname,   990);
                session.setPassword(password);
                session.setUserInfo(defaultUserInfo);
                session.connect();

                Channel   channel=session.openChannel( "sftp ");      
                channel.connect();      
                ChannelSftp   c=(ChannelSftp)channel;      
                     
                c.get(remoteFile,   localFile);  
               
                session.disconnect();
              }
}

阅读(2640) | 评论(1) | 转发(0) |
0

上一篇:encfs的使用

下一篇:ASR机制介绍

给主人留下些什么吧!~~

chinaunix网友2009-02-04 21:13:06

太谢谢了 ,我正为愁着呢 ,就是 reject hostkey