On Nov 30, 2008, at 1:45 AM, David Jencks wrote:

Hi Jason,

This sounds very cool but I don't understand exactly what the ssh functionality gets us or what your vision of shared commands between the web console and gshell looks like.

First some background...

In the beginning there was telnet, then custom protocol (tcp or ssl) and now there is only ssh. All of these being ways which a user can remotely connect to gshell and execute commands. The custom protocol stuff (whisper) had a significant disadvantage in that users had to have the gshell code-base already installed, with the right version of java, etc in order to make a connection. With telnet most telnet terminals worked, but its not a secure protocol so not a viable enterprise solution. With ssh, any ssh client (java-based or native) can be used to make a secure connection. And most unix systems do end up having ssh, so its the perfect solution for cli-savvy administrators.


IIUC right now communication between gshell and a geronimo server is via jmx, which optionally can be using ssl. Again IIUC there's no requirement that the geronimo server be on the same machine as gshell.

Correct there is no requirement, but what he have right now is, gshell launching the server, leaving 2 java processes, so gshell is sitting "next to" the server. This gshell is ideal for controlling the server process, so a user might want to connect that that specific gshell jvm and run a command which would restart the server process, clone the process or start up a new sever. All this with out having to waste another jvm per server. Basically the "next to" gshell process becomes control process. It can even be used to automatically restart the server if it crashed or wedged.

Another option is to create a GShellGBean which will run shell commands *inside of" the server jvm. This set of commands may include running a sshd command, and probably even support an automatic connection to support the geronimo commands.

GShell now supports a lot of VFS commands to deal with files, so it makes it very simple to install files, delete files, or even edit files, and with the TrueZIP components enabled, you can even edit files inside of jar files. This is all done via GShell commands, nothing connected to the server via JMX.


We don't have the ability to start a geronimo instance on another machine at the moment, but once one is started I don't quite understand what ssh adds to the picture. With the ssh stuff can you start a gshell + g. server on a remote machine?

AFAIK its not going to be possible to launch new servers on remote machines unless that remote machine supports some kind of standard configurable remote process management daemon. And I'm not talking about [x]inetd or the like. I guess I see gshell as being that daemon. So if you have say 100 machines to work with, you install gshell, then configure it to boot up with the system and execute its sshd command. Then on your remote administration system, you can easily write a simple script to go to each of those 100 machines, ssh into them and run the start-server command, or whatever.

With GShell's support for remote repositories, via Apache Ivy or Apache Maven (maven-artifact v3) you can install the relatively small (2-3m) GShell, and use remote repos to distribute/update/manage your application installation.


How is this different from just ssh-ing into the machine from a normal terminal session and running gshell?

One key difference is that authentication mechanism is not directly tied to the systems authentication bits. So a user can log into gshell's sshd w/o needing a *real* user account on the system its running. Of course you could configure gshell's sshd to use system auth if you wanted, all depends on how you choose to manage users on your systems and if you prefer having app + system users unified or diverse.

Another difference is the number of processes needed in your scenario:
 * ssh-ing into the machine, sshd usually forks
 * then has to runs your native shell
 * probably runs some other muck in the process
 * then the shell script to launch gsh
 * which runs the jvm script,
 * which finally launches a native jvm process)

Where, using GShell's sshd there is no additional processes spawned, just acquisition of pooled threads. And since GShell is already loaded, any time spent loading command plugins which might slow down gsh's boot, has been done, so the sshd gshell is more responsive for quick operations. And because you are connecting to the same jvm, you have access to shared state.

Or the memory/resources required to fire up another jvm.

On the matter of SSL vs SSH, I'd say that system administrators are going to be more familiar with SSH key generation and management than they are going to be for SSL. And with SSH there is no need to go muck with keystore passwords (putting them in plain text, ick) or installing root certificates into a jre, etc.


As for commands, my view is that both gshell commands and web console portlet code consist of collecting the information needed for calls to gbean operations. While the portlet code is generally horrendously complicated and difficult to understand I don't really see how more of this data-collection-from-the-user code could be shared between the web console and gshell. Do you have a simple illustration in mind?

It was just something I had been pondering for what seems like years now, still not sure. I think what I need to do first is to try and implement some more commands which implement console/portlet functionality... especially with ones which list data, that have buttons on those lists (like the JMS admin stuff for example). Then I will have a better idea.

But I guess I'm thinking that there might be a way to create a common model for the data mined from the server, displayed and prompted for... which could then be used by a portlet or command. This way the data would be the same in both, just the method of rendering/prompting would differ.

Anyways, right now its still just a clump of thoughts bouncing around in my head. Need more practical experience first with it before I can craft a framework concept out of it. But it seems like it would be a good idea, as that would enable other console platforms to all use the same bits. Say if someone wanted to write a Swing console, or a Eclipse plugin console, etc...

--jason

Reply via email to