You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2011/03/14 20:34:16 UTC

svn commit: r1081533 - in /karaf/branches/karaf-2.2.x: admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java

Author: gnodet
Date: Mon Mar 14 19:34:16 2011
New Revision: 1081533

URL: http://svn.apache.org/viewvc?rev=1081533&view=rev
Log:
[KARAF-513] The ssh:ssh and admin:connect command do not allow passing a command to execute

Modified:
    karaf/branches/karaf-2.2.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java
    karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java

Modified: karaf/branches/karaf-2.2.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java?rev=1081533&r1=1081532&r2=1081533&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java (original)
+++ karaf/branches/karaf-2.2.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java Mon Mar 14 19:34:16 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.karaf.admin.command;
 
+import java.util.List;
+
 import org.apache.felix.gogo.commands.Option;
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
@@ -25,18 +27,31 @@ import org.apache.felix.gogo.commands.Co
 @Command(scope = "admin", name = "connect", description = "Connects to an existing container instance.")
 public class ConnectCommand extends AdminCommandSupport {
 
-    @Argument(index = 0, name="name", description="The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
     @Option(name="-u", aliases={"--username"}, description="Remote user name (Default: karaf)", required = false, multiValued = false)
     private String username = "karaf";
 
     @Option(name="-p", aliases={"--password"}, description="Remote user password (Default: karaf)", required = false, multiValued = false)
     private String password = "karaf";
 
+    @Argument(index = 0, name="name", description="The name of the container instance", required = true, multiValued = false)
+    private String instance = null;
+
+    @Argument(index = 1, name = "command", description = "Optional command to execute", required = false, multiValued = true)
+    private List<String> command;
+
     protected Object doExecute() throws Exception {
+        StringBuilder sb = new StringBuilder();
+        if (command != null) {
+            for (String cmd : command) {
+                if (sb.length() > 0) {
+                    sb.append(' ');
+                }
+                sb.append(cmd);
+            }
+        }
+
         int port = getExistingInstance(instance).getSshPort();
-        session.execute("ssh -l " + username + " -P " + password + " -p " + port + " localhost");
+        session.execute("ssh -l " + username + " -P " + password + " -p " + port + " localhost " + sb);
         return null;
     }
 }

Modified: karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java?rev=1081533&r1=1081532&r2=1081533&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java (original)
+++ karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java Mon Mar 14 19:34:16 2011
@@ -19,8 +19,15 @@
 
 package org.apache.karaf.shell.ssh;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.util.List;
 
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+import org.apache.karaf.shell.console.BlueprintContainerAware;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
 import org.apache.sshd.ClientChannel;
 import org.apache.sshd.ClientSession;
 import org.apache.sshd.SshClient;
@@ -28,14 +35,9 @@ import org.apache.sshd.client.channel.Ch
 import org.apache.sshd.client.future.ConnectFuture;
 import org.apache.sshd.common.util.NoCloseInputStream;
 import org.apache.sshd.common.util.NoCloseOutputStream;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.console.BlueprintContainerAware;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.osgi.service.blueprint.container.BlueprintContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.osgi.service.blueprint.container.BlueprintContainer;
 
 /**
  * Connect to a SSH server.
@@ -54,11 +56,14 @@ public class SshAction
     @Option(name="-P", aliases={"--password"}, description = "The password for remote login", required = false, multiValued = false)
     private String password;
 
+    @Option(name="-p", aliases={"--port"}, description = "The port to use for SSH connection", required = false, multiValued = false)
+    private int port = 22;
+
     @Argument(index = 0, name = "hostname", description = "The host name to connect to via SSH", required = true, multiValued = false)
     private String hostname;
 
-    @Option(name="-p", aliases={"--port"}, description = "The port to use for SSH connection", required = false, multiValued = false)
-    private int port = 22;
+    @Argument(index = 1, name = "command", description = "Optional command to execute", required = false, multiValued = true)
+    private List<String> command;
 
     private BlueprintContainer container;
 
@@ -113,9 +118,25 @@ public class SshAction
                     return null;
                 }
 
+                StringBuilder sb = new StringBuilder();
+                if (command != null) {
+                    for (String cmd : command) {
+                        if (sb.length() > 0) {
+                            sb.append(' ');
+                        }
+                        sb.append(cmd);
+                    }
+                }
+
                 ClientChannel channel = session.createChannel("shell");
-                channel.setIn(new NoCloseInputStream(System.in));
-                ((ChannelShell) channel).setupSensibleDefaultPty();
+                if (sb.length() > 0) {
+                    channel = session.createChannel("exec", sb.append("\n").toString());
+                    channel.setIn(new ByteArrayInputStream(new byte[0]));
+                } else {
+                    channel = session.createChannel("shell");
+                    channel.setIn(new NoCloseInputStream(System.in));
+                    ((ChannelShell) channel).setupSensibleDefaultPty();
+                }
                 channel.setOut(new NoCloseOutputStream(System.out));
                 channel.setErr(new NoCloseOutputStream(System.err));
                 channel.open();