From 242569903851181a6f19ca6884525649c12fa72c Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Tue, 11 Mar 2003 13:15:43 +0000 Subject: [PATCH] New task . Submitted by: Robert Anderson git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274233 13f79535-47bb-0310-9956-ffa450edef68 --- .../tools/ant/taskdefs/defaults.properties | 1 + .../ant/taskdefs/optional/ssh/SSHBase.java | 3 + .../ant/taskdefs/optional/ssh/SSHExec.java | 147 ++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties index 4d47ccdf6..cdc19ceec 100644 --- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties +++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties @@ -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 diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java index d2fbbeccd..808f48fb8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java @@ -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; diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java new file mode 100644 index 000000000..0409571fb --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java @@ -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 + * . + */ + +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); + } + } + } +} +