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();