/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.ssh; import java.net.URI; import java.util.Map; import org.apache.camel.Endpoint; import org.apache.camel.impl.UriEndpointComponent; import org.apache.camel.spi.Metadata; import org.apache.sshd.common.KeyPairProvider; /** * Represents the component that manages {@link SshEndpoint}. */ public class SshComponent extends UriEndpointComponent { @Metadata(label = "advanced") private SshConfiguration configuration = new SshConfiguration(); public SshComponent() { super(SshEndpoint.class); } @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { URI u = new URI(uri); SshConfiguration newConfig = configuration.copy(); newConfig.configure(u); SshEndpoint endpoint = new SshEndpoint(uri, this, newConfig); setProperties(endpoint.getConfiguration(), parameters); return endpoint; } public SshConfiguration getConfiguration() { return configuration; } /** * To use the shared SSH configuration */ public void setConfiguration(SshConfiguration configuration) { this.configuration = configuration; } public String getHost() { return getConfiguration().getHost(); } /** * Sets the hostname of the remote SSH server. * * @param host String representing hostname of SSH server. */ public void setHost(String host) { getConfiguration().setHost(host); } public int getPort() { return getConfiguration().getPort(); } /** * Sets the port number for the remote SSH server. * * @param port int representing port number on remote host. Defaults to 22. */ public void setPort(int port) { getConfiguration().setPort(port); } public String getUsername() { return getConfiguration().getUsername(); } /** * Sets the username to use in logging into the remote SSH server. * * @param username String representing login username. */ @Metadata(label = "security", secret = true) public void setUsername(String username) { getConfiguration().setUsername(username); } public String getPassword() { return getConfiguration().getPassword(); } /** * Sets the password to use in connecting to remote SSH server. * Requires keyPairProvider to be set to null. * * @param password String representing password for username at remote host. */ @Metadata(label = "security", secret = true) public void setPassword(String password) { getConfiguration().setPassword(password); } public String getPollCommand() { return getConfiguration().getPollCommand(); } /** * 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 * * @param pollCommand String representing the command to send. */ public void setPollCommand(String pollCommand) { getConfiguration().setPollCommand(pollCommand); } public KeyPairProvider getKeyPairProvider() { return getConfiguration().getKeyPairProvider(); } /** * Sets the KeyPairProvider reference to use when connecting using Certificates to the remote SSH Server. * * @param keyPairProvider KeyPairProvider reference to use in authenticating. If set to 'null', * then will attempt to connect using username/password settings. * * @see KeyPairProvider */ @Metadata(label = "security") public void setKeyPairProvider(KeyPairProvider keyPairProvider) { getConfiguration().setKeyPairProvider(keyPairProvider); } public String getKeyType() { return getConfiguration().getKeyType(); } /** * Sets the key type to pass to the KeyPairProvider as part of authentication. * KeyPairProvider.loadKey(...) will be passed this value. Defaults to "ssh-rsa". * * @param keyType String defining the type of KeyPair to use for authentication. * * @see KeyPairProvider */ @Metadata(label = "security") public void setKeyType(String keyType) { getConfiguration().setKeyType(keyType); } public long getTimeout() { return getConfiguration().getTimeout(); } /** * Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. * Defaults to 30000 milliseconds. * * @param timeout long milliseconds to wait. */ public void setTimeout(long timeout) { getConfiguration().setTimeout(timeout); } /** * @deprecated As of version 2.11, replaced by {@link #getCertResource()} */ @Deprecated public String getCertFilename() { return getConfiguration().getCertFilename(); } /** * Sets the resource path of the certificate to use for Authentication. * * @deprecated As of version 2.11, replaced by {@link #setCertResource(String)} */ @Deprecated @Metadata(label = "security") public void setCertFilename(String certFilename) { getConfiguration().setCertFilename(certFilename); } public String getCertResource() { return getConfiguration().getCertResource(); } /** * 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. * * @param certResource String file, classpath, or http url for the certificate */ @Metadata(label = "security") public void setCertResource(String certResource) { getConfiguration().setCertResource(certResource); } }