Camel-SSH using Key Example
===========================

This examples shows how to use the Camel-SSH component to call Apache Karaf
using Public Key versus password. It can be run using Maven.

Requirements
------------

* [Apache Maven](http://maven.apache.org) version 3.x
* [Apache Karaf](http://karaf.apache.org) version 2.3.1

Setup Karaf
-----------

We will need to make 2 changes to Karaf for this example to work.

1. Register the Bouncy Castle Java Cryptography Extension (JCE) with Karaf.
2. Add a user and public key to Karaf's identity store.

### Register Bouncy Castle

We need the Bouncy Castle JCE as Karaf's included Mina SSHD server uses this to handle Public Key files.

Install the following jars into the `<karaf_home>/lib/ext` directory.

    curl -O http://downloads.bouncycastle.org/java/bcprov-jdk15on-147.jar
    curl -O http://downloads.bouncycastle.org/java/bcprov-ext-jdk15on-147.jar
    curl -O http://downloads.bouncycastle.org/java/bcpkix-jdk15on-147.jar

Edit the `<karaf_home>/etc/config.properties` file, making 2 changes

1. add the following line

    org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider

2. update the `org.osgi.framework.bootdelegation` property, appending `,org.bouncycastle.*` to the end. It should look
something like the following when done

    org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,sun.*,com.sun.*,javax.transaction,javax.transaction.*,org.bouncycastle.*

### Add a user and public key

Edit the `<karaf_home>/etc/keys.properties` file, appending a new user `scott`. The format of the keys.properties
file is as follows

    <user name>=<public key>,<role>

For this example you will need to add a new user `scott` with the key value from the included
`src/main/resources/test_rsa.pub` file. The included Camel route uses the associated private key
`src/main/resources/test_rsa` when connecting to the updated Karaf server.

Append the following to the `<karaf_home>/etc/keys.properties` file

    scott=AAAAB3NzaC1yc2EAAAADAQABAAABAQC4MSqXneGVM9n3Rnqfya0D31crTx+J8X8dKZ5/+2Rq96/klnmt6uGyl+DI8G0HXVK66KqU2Z0qUE9ytOMR+zSPA+zU4Bhd3G82qdJsys7Nz8t9wSWQs8/ItWTjwg+b3vVLcI1Q8sSgfxqZvD/XQk4srbDs9ba55yjEPn5DOhA7UFbFAv8menSgbpNFMrUQQ9DJcMVlu3MOcMylI5UFFf1uvDD3vUoFXZa6GQOK9j1AGvfagGgBEqV4/AiKzDmQDFqMzmTfTfBpi1crY0SGXdT26PE4Knx7KP7bBJupBm6lJ9Pk39iw8dnDWcq45EEqrHsI0dps7/iQgYxYqBmFLIkP,admin

### Start Karaf

Karaf should be all configured at this point so start up an instance by running the `bin/karaf` from
the `<karaf_home>` directory.

Building this example
---------------------

To build, run the following command

    mvn clean install

To test locally, assuming you have Setup Karaf and have it running, run the following command

    mvn camel:run

To stop the example hit ctrl + c

Deploy to Karaf
---------------

From the running Karaf console, run the following commands to install this example into your
running Karaf server.

    features:addurl mvn:org.apache.camel/camel-example-ssh-security/<camel version>/xml/features
    features:install camel-example-ssh-security

This example outputs into the Karaf log file so you can either `tail -f <karaf_home>data/log/karaf.log`
or from the Karaf console run the following command

    log:tail

If you hit any problems please let us know on the Camel Forums
  http://camel.apache.org/discussion-forums.html

Please help us make Apache Camel better - we appreciate any feedback you
may have. Enjoy!

-----------------
The Camel riders!
