You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2008/11/27 18:19:57 UTC
svn commit: r721244 - in
/geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main:
java/org/apache/geronimo/gshell/commands/ssh/SshAction.java
resources/META-INF/gshell/components.xml
Author: gnodet
Date: Thu Nov 27 09:19:56 2008
New Revision: 721244
URL: http://svn.apache.org/viewvc?rev=721244&view=rev
Log:
Fix SshAction to properly exit
Modified:
geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/java/org/apache/geronimo/gshell/commands/ssh/SshAction.java
geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/resources/META-INF/gshell/components.xml
Modified: geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/java/org/apache/geronimo/gshell/commands/ssh/SshAction.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/java/org/apache/geronimo/gshell/commands/ssh/SshAction.java?rev=721244&r1=721243&r2=721244&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/java/org/apache/geronimo/gshell/commands/ssh/SshAction.java (original)
+++ geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/java/org/apache/geronimo/gshell/commands/ssh/SshAction.java Thu Nov 27 09:19:56 2008
@@ -22,6 +22,8 @@
import com.google.code.sshd.ClientChannel;
import com.google.code.sshd.ClientSession;
import com.google.code.sshd.SshClient;
+import com.google.code.sshd.common.util.NoCloseInputStream;
+import com.google.code.sshd.common.util.NoCloseOutputStream;
import org.apache.geronimo.gshell.clp.Argument;
import org.apache.geronimo.gshell.clp.Option;
import org.apache.geronimo.gshell.command.CommandAction;
@@ -128,18 +130,32 @@
// Create the client from prototype
SshClient client = container.getBean(SshClient.class);
log.debug("Created client: {}", client);
+ client.start();;
- ClientSession session = client.connect(hostname, port);
- io.info(messages.getMessage("info.connected"));
-
- session.authPassword(username, password);
-
- ClientChannel channel = session.createChannel("shell");
- channel.setIn(io.inputStream);
- channel.setOut(io.outputStream);
- channel.setErr(io.errorStream);
- channel.open();
- channel.waitFor(ClientChannel.CLOSED, 0);
+ try {
+ ClientSession session = client.connect(hostname, port);
+ try {
+ io.info(messages.getMessage("info.connected"));
+
+ session.authPassword(username, password);
+ int ret = session.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
+ if ((ret & ClientSession.AUTHED) == 0) {
+ io.err.println("Authentication failed");
+ return Result.FAILURE;
+ }
+
+ ClientChannel channel = session.createChannel("shell");
+ channel.setIn(new NoCloseInputStream(io.inputStream));
+ channel.setOut(new NoCloseOutputStream(io.outputStream));
+ channel.setErr(new NoCloseOutputStream(io.errorStream));
+ channel.open();
+ channel.waitFor(ClientChannel.CLOSED, 0);
+ } finally {
+ session.close();
+ }
+ } finally {
+ client.stop();
+ }
io.verbose(messages.getMessage("verbose.disconnected"));
Modified: geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/resources/META-INF/gshell/components.xml
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/resources/META-INF/gshell/components.xml?rev=721244&r1=721243&r2=721244&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/resources/META-INF/gshell/components.xml (original)
+++ geronimo/gshell/trunk/gshell-commands/gshell-ssh/src/main/resources/META-INF/gshell/components.xml Thu Nov 27 09:19:56 2008
@@ -45,7 +45,7 @@
</gshell:command-bundle>
</gshell:plugin>
- <bean name="sshClient" class="com.google.code.sshd.SshClient" factory-method="setUpDefaultClient" init-method="start" destroy-method="stop">
+ <bean name="sshClient" class="com.google.code.sshd.SshClient" factory-method="setUpDefaultClient" scope="prototype">
</bean>
<bean name="sshServer" class="com.google.code.sshd.SshServer" factory-method="setUpDefaultServer" scope="prototype">