resources/2010/08/NetKernel_sshd
search:

{
	 "title" : "NetKernel SSHd",
	 "css" : "
	body {background-color: #A5CC64; color: #33333;}
	pre { background-color: #222222; color: #aaaaaa; border: 0px; font-size: 60%; font-family: courier, fixed; padding: 5px;}
	div.slide h1  { background-color: #63793F; padding-left: 50px; margin-left: -20px; color: #333333;}
	 ",
	 "copyright" : "© 2010, 1060 Research Limited",
	 "favicon" : "/wink/style/icon.png"
}

SSHd
WiNK
© 2010, 1060 Research

Design Principles

The SSH transport infrastructure allows remote ssh clients to issue resource requests into the NetKernel address space. Resource requests can be made through a shell or as remote commands, and even as scp "file" transfers.

Authentication

The SSH transport has a pluggable design using configurable declarative requests that enable user supplied public key and password authentication services to be invoked for new client sessions.

A standard openSSH compatible public key authentication service is provided which reads a user's ~/.ssh/authorized_keys to authenticate PKI sessions.

SSH Shell

A regular ssh client connection to the SSH transport will initiate a simple interactive shell.

pjr@hp6715b:$ ssh -p 8022 -i test-key hp6715b
    ---------------------------------------------
    NetKernel SSH Server v1.0 on hp6715b
    Welcome: pjr
    Logged in at: Tue Aug 10 19:56:25 BST 2010
    ---------------------------------------------    

pjr@hp6715b:NK$  

Shell - Requests

Each command line entered is taken to be a request identifier which is issued into the address space hosting the SSH Transport. For example, below is a command line request for a simple xml resource...

pjr@hp6715b:NK$ res:/data.xml
<?xml version="1.0" encoding="UTF-8"?>
<data>
  <item name="red">
    <colour>#ff0000</colour>
  </item>
  <item name="green">
    <colour>#00ff00</colour>
  </item>
  <item name="blue">
    <colour>#0000ff</colour>
  </item>
</data>

pjr@hp6715b:NK$ 

The requested resource must be transreptable to IReadableBinaryStreamRepresentation. The representation is written into the stdout of the ssh console.

Shell - Active Requests

Since the command line character sequence is the identifier of a request, you are free to use full active URI syntax.

In the example below, the SSH transport issues requests into a space with the service active:toUpper...

pjr@hp6715b:NK$ active:toUpper+operand@res:/data.xml
<?XML VERSION="1.0" ENCODING="UTF-8"?>
<DATA>
  <ITEM NAME="RED">
    <COLOUR>#FF0000</COLOUR>
  </ITEM>
  <ITEM NAME="GREEN">
    <COLOUR>#00FF00</COLOUR>
  </ITEM>
  <ITEM NAME="BLUE">
    <COLOUR>#0000FF</COLOUR>
  </ITEM>
</DATA>

pjr@hp6715b:NK$ 

Shell - Features

TAB Command Completion

Pressing the [TAB] key offers command completion on the partialy completed command line. The completion options may be configured through a plugin service.

pjr@hp6715b:NK$ active:[TAB]

active:toUpper+operand@
active:xslt+operator@res:/transform.xsl+operand@
pjr@hp6715b:NK$  active:

Shell - Features(2)

Command History

(Up / Down Cursor Keys) scroll forward and backward through the previous command history.

Built-in Commands

The following command lines are built-in and will always execute without issuing a request.

clear

Typing "clear" will clear the console display.

exit

Typing "exit" will terminate the shell session. Equivalently the "Ctl-D" key will terminate the session.

SSH Remote Command Execution

The ssh server will "execute" any command statement from the ssh client as a resource request.

Here is an example showing a request for an XML resource, with the response streamed to the stdout of the client.

pjr@hp6715b:~$ ssh -p 8022 -i test-key hp6715b res:/data.xml
<?xml version="1.0" encoding="UTF-8"?>
<data>
  <item name="red">
    <colour>#ff0000</colour>
  </item>
  <item name="green">
    <colour>#00ff00</colour>
  </item>
  <item name="blue">
    <colour>#0000ff</colour>
  </item>
</data>

Command - Active URI

Here is an example with an active URI command...

pjr@hp6715b:~$ ssh -p 8022 -i test-key hp6715b active:toUpper+operand@res:/data.xml
<?XML VERSION="1.0" ENCODING="UTF-8"?>
<DATA>
  <ITEM NAME="RED">
    <COLOUR>#FF0000</COLOUR>
  </ITEM>
  <ITEM NAME="GREEN">
    <COLOUR>#00FF00</COLOUR>
  </ITEM>
  <ITEM NAME="BLUE">
    <COLOUR>#0000FF</COLOUR>
  </ITEM>
</DATA>

Piping Responses

Since the command goes to the client's stdout it can be piped. Here's an example piping the response to a local file...

pjr@hp6715b:~$ ssh -p 8022 -i test-key hp6715b res:/data.xml > localdata.xml
pjr@hp6715b:~$

SCP - "File" Download / SOURCE

The SSH transport provides full support for scp file transfers.

scp hostname:[resource-identifier] localfile

The [resource-identifier] request will be issued into the SSH transport address space as a SOURCE request. The response of the request will be "downloaded" to the specified localfile.

Example

pjr@hp6715b:~$ scp -P 8022 -i test-key hp6715b:res:/data.xml localdata.xml
res__data.xml                                 100%  234     0.2KB/s   00:00    
pjr@hp6715b:~$ 

Example - scp with active URI

pjr@hp6715b:~$ scp -P 8022 -i test-key hp6715b:active:toUpper+operand@res:/data.xml upperCaseData.xml
active_toUpper+operand@res__data.xml          100%  234     0.2KB/s   00:00    
pjr@hp6715b:~$

SCP - File Upload / SINK

A client-side file can be uploaded to a target resource identifier on the serverside. The uploaded binary stream representation is provided in a SINK request to the target resource identifier.

scp localfile hostname:[resource-identifier]

Example

Here a local file is uploaded, the remote target is a file: URI on the serverside.

pjr@hp6715b:~$ scp -P 8022 -i test-key localdata.xml hp6715b:file:/home/pjr/remotedata.xml
localdata.xml                                 100%  234     0.2KB/s   00:00    
pjr@hp6715b:~$

SSH Fulcrum

An SSH fulcrum module is available as an optional install.

Provides pre-configured SSH host space. Dynamic imports allow your application space to be imported and exposed to SSH originated requests.

To be imported instantiate res:/etc/system/SimpleDynamicImportHook.xml with...

<connection>
  <type>SSHFulcrum</type>
</connection>


WiNK
© 2008-2011, 1060 Research Limited