[[ssh-component]]
= SSH Component
:page-source: components/camel-ssh/src/main/docs/ssh-component.adoc

*Available as of Camel version 2.10*

The SSH component enables access to SSH servers such that you can send
an SSH command, and process the response.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-ssh</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,java]
-----------------------------------------------
ssh:[username[:password]@]host[:port][?options]
-----------------------------------------------

== Options



// component options: START
The SSH component supports 15 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *configuration* (advanced) | To use the shared SSH configuration |  | SshConfiguration
| *host* (common) | Sets the hostname of the remote SSH server. |  | String
| *port* (common) | Sets the port number for the remote SSH server. |  | int
| *username* (security) | Sets the username to use in logging into the remote SSH server. |  | String
| *password* (security) | Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null. |  | String
| *pollCommand* (common) | Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer, i.e. from(ssh://...). You may need to end your command with a newline, and that must be URL encoded %0A |  | String
| *keyPairProvider* (security) | Sets the KeyPairProvider reference to use when connecting using Certificates to the remote SSH Server. |  | KeyPairProvider
| *keyType* (security) | Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. Defaults to ssh-rsa. |  | String
| *timeout* (common) | Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds. |  | long
| *certResource* (security) | Sets the resource path of the certificate to use for Authentication. Will use ResourceHelperKeyPairProvider to resolve file based certificate, and depends on keyType setting. |  | String
| *certResourcePassword* (security) | Sets the password to use in loading certResource, if certResource is an encrypted key. |  | String
| *channelType* (advanced) | Sets the channel type to pass to the Channel as part of command execution. Defaults to exec. |  | String
| *shellPrompt* (advanced) | Sets the shellPrompt to be dropped when response is read after command execution |  | String
| *sleepForShellPrompt* (advanced) | Sets the sleep period in milliseconds to wait reading response from shell prompt. Defaults to 100 milliseconds. |  | long
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END




// endpoint options: START
The SSH endpoint is configured using URI syntax:

----
ssh:host:port
----

with the following path and query parameters:

=== Path Parameters (2 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *host* | *Required* Sets the hostname of the remote SSH server. |  | String
| *port* | Sets the port number for the remote SSH server. | 22 | int
|===


=== Query Parameters (35 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *failOnUnknownHost* (common) | Specifies whether a connection to an unknown host should fail or not. This value is only checked when the property knownHosts is set. | false | boolean
| *knownHostsResource* (common) | Sets the resource path for a known_hosts file |  | String
| *timeout* (common) | Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds. | 30000 | long
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *pollCommand* (consumer) | Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer, i.e. from(ssh://...) You may need to end your command with a newline, and that must be URL encoded %0A |  | String
| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *channelType* (advanced) | Sets the channel type to pass to the Channel as part of command execution. Defaults to exec. | exec | String
| *shellPrompt* (advanced) | Sets the shellPrompt to be dropped when response is read after command execution |  | String
| *sleepForShellPrompt* (advanced) | Sets the sleep period in milliseconds to wait reading response from shell prompt. Defaults to 100 milliseconds. | 100 | long
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
| *delay* (scheduler) | Milliseconds before the next poll. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 500 | long
| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
| *initialDelay* (scheduler) | Milliseconds before the first poll starts. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 1000 | long
| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. | TRACE | LoggingLevel
| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component | none | String
| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. | MILLISECONDS | TimeUnit
| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
| *certResource* (security) | Sets the resource path of the certificate to use for Authentication. Will use ResourceHelperKeyPairProvider to resolve file based certificate, and depends on keyType setting. |  | String
| *certResourcePassword* (security) | Sets the password to use in loading certResource, if certResource is an encrypted key. |  | String
| *keyPairProvider* (security) | Sets the KeyPairProvider reference to use when connecting using Certificates to the remote SSH Server. |  | KeyPairProvider
| *keyType* (security) | Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. From Camel 3.0.0 / 2.25.0, by default Camel will select the first available KeyPair that is loaded. Prior to this, a KeyType of 'ssh-rsa' was enforced by default. |  | String
| *password* (security) | Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null. |  | String
| *username* (security) | Sets the username to use in logging into the remote SSH server. |  | String
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-ssh-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 31 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.ssh.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.ssh.cert-resource* | Sets the resource path of the certificate to use for Authentication. Will use ResourceHelperKeyPairProvider to resolve file based certificate, and depends on keyType setting. |  | String
| *camel.component.ssh.cert-resource-password* | Sets the password to use in loading certResource, if certResource is an encrypted key. |  | String
| *camel.component.ssh.channel-type* | Sets the channel type to pass to the Channel as part of command execution. Defaults to exec. |  | String
| *camel.component.ssh.configuration.cert-resource* | Sets the resource path of the certificate to use for Authentication. Will use {@link ResourceHelperKeyPairProvider} to resolve file based certificate, and depends on keyType setting. |  | String
| *camel.component.ssh.configuration.cert-resource-password* | Sets the password to use in loading certResource, if certResource is an encrypted key. |  | String
| *camel.component.ssh.configuration.channel-type* | Sets the channel type to pass to the Channel as part of command execution. Defaults to "exec". | exec | String
| *camel.component.ssh.configuration.fail-on-unknown-host* | Specifies whether a connection to an unknown host should fail or not. This value is only checked when the property knownHosts is set. | false | Boolean
| *camel.component.ssh.configuration.host* | Sets the hostname of the remote SSH server. |  | String
| *camel.component.ssh.configuration.key-pair-provider* | Sets the KeyPairProvider reference to use when connecting using Certificates to the remote SSH Server. |  | KeyPairProvider
| *camel.component.ssh.configuration.key-type* | Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. From Camel 3.0.0 / 2.25.0, by default Camel will select the first available KeyPair that is loaded. Prior to this, a KeyType of 'ssh-rsa' was enforced by default. |  | String
| *camel.component.ssh.configuration.known-hosts-resource* | Sets the resource path for a known_hosts file |  | String
| *camel.component.ssh.configuration.password* | Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null. |  | String
| *camel.component.ssh.configuration.poll-command* | Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer, i.e. from("ssh://...") You may need to end your command with a newline, and that must be URL encoded %0A |  | String
| *camel.component.ssh.configuration.port* | Sets the port number for the remote SSH server. | 22 | Integer
| *camel.component.ssh.configuration.shell-prompt* | Sets the shellPrompt to be dropped when response is read after command execution |  | String
| *camel.component.ssh.configuration.sleep-for-shell-prompt* | Sets the sleep period in milliseconds to wait reading response from shell prompt. Defaults to 100 milliseconds. | 100 | Long
| *camel.component.ssh.configuration.timeout* | Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds. | 30000 | Long
| *camel.component.ssh.configuration.username* | Sets the username to use in logging into the remote SSH server. |  | String
| *camel.component.ssh.enabled* | Enable ssh component | true | Boolean
| *camel.component.ssh.host* | Sets the hostname of the remote SSH server. |  | String
| *camel.component.ssh.key-pair-provider* | Sets the KeyPairProvider reference to use when connecting using Certificates to the remote SSH Server. The option is a org.apache.sshd.common.keyprovider.KeyPairProvider type. |  | String
| *camel.component.ssh.key-type* | Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. Defaults to ssh-rsa. |  | String
| *camel.component.ssh.password* | Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null. |  | String
| *camel.component.ssh.poll-command* | Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer, i.e. from(ssh://...). You may need to end your command with a newline, and that must be URL encoded %0A |  | String
| *camel.component.ssh.port* | Sets the port number for the remote SSH server. |  | Integer
| *camel.component.ssh.shell-prompt* | Sets the shellPrompt to be dropped when response is read after command execution |  | String
| *camel.component.ssh.sleep-for-shell-prompt* | Sets the sleep period in milliseconds to wait reading response from shell prompt. Defaults to 100 milliseconds. |  | Long
| *camel.component.ssh.timeout* | Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds. |  | Long
| *camel.component.ssh.username* | Sets the username to use in logging into the remote SSH server. |  | String
| *camel.component.ssh.configuration.cert-filename* | *Deprecated*  |  | String
|===
// spring-boot-auto-configure options: END



== Usage as a Producer endpoint

When the SSH Component is used as a Producer (`.to("ssh://...")`), it
will send the message body as the command to execute on the remote SSH
server.

Here is an example of this within the XML DSL. Note that the command has
an XML encoded newline (`+&#10;+`).

[source,xml]
----------------------------------------------
<route id="camel-example-ssh-producer">
  <from uri="direct:exampleSshProducer"/>
  <setBody>
    <constant>features:list&#10;</constant>
  </setBody>
  <to uri="ssh://karaf:karaf@localhost:8101"/>
  <log message="${body}"/>
</route>
----------------------------------------------

== Authentication

The SSH Component can authenticate against the remote SSH server using
one of two mechanisms: Public Key certificate or username/password.
Configuring how the SSH Component does authentication is based on how
and which options are set.

1.  First, it will look to see if the `certResource` option has been
set, and if so, use it to locate the referenced Public Key certificate
and use that for authentication.
2.  If `certResource` is not set, it will look to see if a
`keyPairProvider` has been set, and if so, it will use that for
certificate based authentication.
3.  If neither `certResource` nor `keyPairProvider` are set, it will use
the `username` and `password` options for authentication. Even though the `username` 
and `password` are provided in the endpoint configuration and headers set with 
`SshConstants.USERNAME_HEADER` (`CamelSshUsername`) and 
`SshConstants.PASSWORD_HEADER` (`CamelSshPassword`), the endpoint 
configuration is surpassed and credentials set in the headers are used.

The following route fragment shows an SSH polling consumer using a
certificate from the classpath.

In the XML DSL,

[source,xml]
-------------------------------------------------------------------------------------------------------------------------------------------------
<route>
  <from uri="ssh://scott@localhost:8101?certResource=classpath:test_rsa&amp;useFixedDelay=true&amp;delay=5000&amp;pollCommand=features:list%0A"/>
  <log message="${body}"/>
</route>
-------------------------------------------------------------------------------------------------------------------------------------------------

In the Java DSL,

[source,java]
-----------------------------------------------------------------------------------------------------------------------------
from("ssh://scott@localhost:8101?certResource=classpath:test_rsa&useFixedDelay=true&delay=5000&pollCommand=features:list%0A")
    .log("${body}");
-----------------------------------------------------------------------------------------------------------------------------

An example of using Public Key authentication is provided in
`examples/camel-example-ssh-security`.

[[SSH-CertificateDependencies]]
Certificate Dependencies

You will need to add some additional runtime dependencies if you use
certificate based authentication. You may need to use later versions depending what version
of Camel you are using.

[source,xml]
-----------------------------------------
<dependency>
  <groupId>org.apache.sshd</groupId>
  <artifactId>sshd-core</artifactId>
  <version>0.8.0</version>
</dependency>
<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcpg-jdk15on</artifactId>
  <version>1.47</version>
</dependency>
<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcpkix-jdk15on</artifactId>
  <version>1.47</version>
</dependency>
-----------------------------------------

== Example

See the `examples/camel-example-ssh` and
`examples/camel-example-ssh-security` in the Camel distribution.

