Browse Source

New task <sshexec>.

Submitted by:	Robert Anderson <riznob at hotmail dot com>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274233 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
2425699038
3 changed files with 151 additions and 0 deletions
  1. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  2. +3
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java
  3. +147
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java

+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -182,6 +182,7 @@ chgrp=org.apache.tools.ant.taskdefs.optional.unix.Chgrp
chown=org.apache.tools.ant.taskdefs.optional.unix.Chown
attrib=org.apache.tools.ant.taskdefs.optional.windows.Attrib
scp=org.apache.tools.ant.taskdefs.optional.ssh.Scp
sshexec=org.apache.tools.ant.taskdefs.optional.ssh.SSHExec

# deprecated ant tasks (kept for back compatibility)
starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut


+ 3
- 0
src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java View File

@@ -102,6 +102,9 @@ public abstract class SSHBase extends Task implements LogListener {
this.host = host;
}

public String getHost() {
return host;
}
public void setFailonerror( boolean failure ) {
failOnError = failure;


+ 147
- 0
src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java View File

@@ -0,0 +1,147 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "Ant" and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.tools.ant.taskdefs.optional.ssh;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.TaskContainer;
import org.apache.tools.ant.taskdefs.LogOutputStream;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Vector;
import java.util.Enumeration;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.Session;

/**
* Executes a command on a remote machine via ssh.
* @author Robert Anderson, riznob@hotmail.com
* @created February 2, 2003
* @since Ant 1.6
*/
public class SSHExec extends SSHBase {

private String command = null;
private int maxwait = 30000;

/**
* Constructor for SSHExecTask.
*/
public SSHExec() {
super();
}

/**
* Sets the command to execute on the remote host.
*
* @param command The new command value
*/
public void setCommand(String command) {
this.command = command;
}

/**
* The connection will be dropped after maxwait seconds. This is
* sometimes useful when a connection may be flaky. Default is to
* wait forever.
*
* @param maxwait The new maxwait value
*/
public void setMaxwait(int maxwait) {
this.maxwait = maxwait;
}


/**
* Execute the command on the remote host.
* @exception BuildException Most likely a network error or bad
* parameter.
*/
public void execute() throws BuildException {
if (getHost() == null) {
throw new BuildException("Host is null.");
}
if (getUserInfo().getName() == null) {
throw new BuildException("Username is null.");
}
if (getUserInfo().getKeyfile() == null
&& getUserInfo().getPassword() == null) {
throw new BuildException("Password and Keyfile are null.");
}
if (command == null) {
throw new BuildException("Command is null.");
}

try {
Session session = openSession();
ChannelExec channel=(ChannelExec) session.openChannel("exec");
channel.setCommand(command);
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
} catch(Exception e){
if (getFailonerror()) {
throw new BuildException(e);
} else {
log("Caught exception: " + e.getMessage(), Project.MSG_ERR);
}
}
}
}


Loading…
Cancel
Save