public class

Connection

extends Object
java.lang.Object
   ↳ com.trilead.ssh2.Connection
Known Direct Subclasses

Class Overview

A Connection is used to establish an encrypted TCP/IP connection to a SSH-2 server.

Typically, one

  1. creates a Connection object.
  2. calls the connect() method.
  3. calls some of the authentication methods (e.g., authenticateWithPublicKey()).
  4. calls one or several times the openSession() method.
  5. finally, one must close the connection and release resources with the close() method.

Summary

Constants
String identification The identifier presented to the SSH-2 server.
Fields
private AuthenticationManager am
private boolean authenticated
private ChannelManager cm
private Vector connectionMonitors
private CryptoWishList cryptoWishList
private DHGexParameters dhgexpara
private SecureRandom generator Will be used to generate all random data needed for the current connection.
private final String hostname
private final int port
private ProxyData proxyData
private boolean tcpNoDelay
private GenericTransportManager tm
Public Constructors
Connection(String hostname)
Prepares a fresh Connection object which can then be used to establish a connection to the specified SSH-2 server.
Connection(String hostname, int port)
Prepares a fresh Connection object which can then be used to establish a connection to the specified SSH-2 server.
Public Methods
synchronized void addConnectionMonitor(ConnectionMonitor cmon)
Add a ConnectionMonitor to this connection.
synchronized boolean authenticateWithDSA(String user, String pem, String password)
This method is deprecated. You should use one of the authenticateWithPublicKey() methods, this method is just a wrapper for it and will disappear in future builds.
synchronized boolean authenticateWithKeyboardInteractive(String user, InteractiveCallback cb)
A wrapper that calls authenticateWithKeyboardInteractivewith a null submethod list.
synchronized boolean authenticateWithKeyboardInteractive(String user, String[] submethods, InteractiveCallback cb)
After a successful connect, one has to authenticate oneself.
synchronized boolean authenticateWithNone(String user)
After a successful connect, one has to authenticate oneself.
synchronized boolean authenticateWithPassword(String user, String password)
After a successful connect, one has to authenticate oneself.
synchronized boolean authenticateWithPublicKey(String user, File pemFile, String password)
A convenience wrapper function which reads in a private key (PEM format, either DSA or RSA) and then calls authenticateWithPublicKey(String, char[], String).
synchronized boolean authenticateWithPublicKey(String user, char[] pemPrivateKey, String password)
After a successful connect, one has to authenticate oneself.
synchronized void cancelRemotePortForwarding(int bindPort)
Cancel an earlier requested remote port forwarding.
synchronized void close()
Close the connection to the SSH-2 server.
synchronized ConnectionInfo connect(ServerHostKeyVerifier verifier)
synchronized ConnectionInfo connect()
synchronized ConnectionInfo connect(ServerHostKeyVerifier verifier, int connectTimeout, int kexTimeout)
Connect to the SSH-2 server and, as soon as the server has presented its host key, use the ServerHostKeyVerifier.verifyServerHostKey() method of the verifier to ask for permission to proceed.
synchronized LocalPortForwarder createLocalPortForwarder(int local_port, String host_to_connect, int port_to_connect)
Creates a new LocalPortForwarder.
synchronized LocalPortForwarder createLocalPortForwarder(InetSocketAddress addr, String host_to_connect, int port_to_connect)
Creates a new LocalPortForwarder.
synchronized LocalStreamForwarder createLocalStreamForwarder(String host_to_connect, int port_to_connect)
Creates a new LocalStreamForwarder.
synchronized SCPClient createSCPClient()
Create a very basic SCPClient that can be used to copy files from/to the SSH-2 server.
synchronized void enableDebugging(boolean enable, DebugLogger logger)
Enable/disable debug logging.
synchronized void forceKeyExchange()
Force an asynchronous key re-exchange (the call does not block).
synchronized static String[] getAvailableCiphers()
Unless you know what you are doing, you will never need this.
synchronized static String[] getAvailableMACs()
Unless you know what you are doing, you will never need this.
synchronized static String[] getAvailableServerHostKeyAlgorithms()
Unless you know what you are doing, you will never need this.
ClientServerHello getClientServerHello()
synchronized ConnectionInfo getConnectionInfo()
Returns a ConnectionInfo object containing the details of the connection.
synchronized String getHostname()
Returns the hostname that was passed to the constructor.
synchronized int getPort()
Returns the port that was passed to the constructor.
synchronized String[] getRemainingAuthMethods(String user)
After a successful connect, one has to authenticate oneself.
GenericTransportManager getTransportManager()
synchronized boolean isAuthMethodAvailable(String user, String method)
Checks if a specified authentication method is available.
synchronized boolean isAuthenticationComplete()
Determines if the authentication phase is complete.
synchronized boolean isAuthenticationPartialSuccess()
Returns true if there was at least one failed authentication request and the last failed authentication request was marked with "partial success" by the server.
synchronized Session openSession()
Open a new Session on this connection.
synchronized void ping()
This method can be used to perform end-to-end connection testing.
synchronized void requestRemotePortForwarding(String bindAddress, int bindPort, String targetAddress, int targetPort)
Request a remote port forwarding.
synchronized void sendIgnorePacket(byte[] data)
Send an SSH_MSG_IGNORE packet with the given data attribute.
synchronized void sendIgnorePacket()
Send an SSH_MSG_IGNORE packet.
void setAuthenticated(boolean authenticated)
void setAuthenticationManager(AuthenticationManager am)
synchronized void setClient2ServerCiphers(String[] ciphers)
Unless you know what you are doing, you will never need this.
synchronized void setClient2ServerMACs(String[] macs)
Unless you know what you are doing, you will never need this.
synchronized void setDHGexParameters(DHGexParameters dgp)
Sets the parameters for the diffie-hellman group exchange.
synchronized void setProxyData(ProxyData proxyData)
Used to tell the library that the connection shall be established through a proxy server.
synchronized void setSecureRandom(SecureRandom rnd)
Provide your own instance of SecureRandom.
synchronized void setServer2ClientCiphers(String[] ciphers)
Unless you know what you are doing, you will never need this.
synchronized void setServer2ClientMACs(String[] macs)
Unless you know what you are doing, you will never need this.
synchronized void setServerHostKeyAlgorithms(String[] algos)
Define the set of allowed server host key algorithms to be used for the following key exchange operations.
synchronized void setTCPNoDelay(boolean enable)
Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm) on the underlying socket.
synchronized boolean tryPublicKey(String user, Object publicKey)
After a successful connect, one has to authenticate oneself.
Protected Methods
GenericTransportManager createTransportManager()
[Expand]
Inherited Methods
From class java.lang.Object

Constants

public static final String identification

The identifier presented to the SSH-2 server.

Constant Value: "TrileadSSH2Java_213"

Fields

private boolean authenticated

private ChannelManager cm

private Vector connectionMonitors

private CryptoWishList cryptoWishList

private DHGexParameters dhgexpara

private SecureRandom generator

Will be used to generate all random data needed for the current connection. Note: SecureRandom.nextBytes() is thread safe.

private final String hostname

private final int port

private ProxyData proxyData

private boolean tcpNoDelay

Public Constructors

public Connection (String hostname)

Prepares a fresh Connection object which can then be used to establish a connection to the specified SSH-2 server.

Same as Connection(hostname, 22).

Parameters
hostname The hostname of the SSH-2 server.

public Connection (String hostname, int port)

Prepares a fresh Connection object which can then be used to establish a connection to the specified SSH-2 server.

Parameters
hostname The host where we later want to connect to.
port Port on the server, normally 22.

Public Methods

public synchronized void addConnectionMonitor (ConnectionMonitor cmon)

Add a ConnectionMonitor to this connection. Can be invoked at any time, but it is best to add connection monitors before invoking connect() to avoid glitches (e.g., you add a connection monitor after a successful connect(), but the connection has died in the mean time. Then, your connection monitor won't be notified.)

You can add as many monitors as you like.

Parameters
cmon An object implementing the ConnectionMonitor interface.

public synchronized boolean authenticateWithDSA (String user, String pem, String password)

This method is deprecated.
You should use one of the authenticateWithPublicKey() methods, this method is just a wrapper for it and will disappear in future builds.

After a successful connect, one has to authenticate oneself. This method is based on DSA (it uses DSA to sign a challenge sent by the server).

If the authentication phase is complete, true will be returned. If the server does not accept the request (or if further authentication steps are needed), false is returned and one can retry either by using this or any other authentication method (use the getRemainingAuthMethods method to get a list of the remaining possible methods).

Parameters
user A String holding the username.
pem A String containing the DSA private key of the user in OpenSSH key format (PEM, you can't miss the "-----BEGIN DSA PRIVATE KEY-----" tag). The string may contain linefeeds.
password If the PEM string is 3DES encrypted ("DES-EDE3-CBC"), then you must specify the password. Otherwise, this argument will be ignored and can be set to null.
Returns
  • whether the connection is now authenticated.
Throws
IOException
IOException

public synchronized boolean authenticateWithKeyboardInteractive (String user, InteractiveCallback cb)

A wrapper that calls authenticateWithKeyboardInteractivewith a null submethod list.

Parameters
user A String holding the username.
cb An InteractiveCallback which will be used to determine the responses to the questions asked by the server.
Returns
  • whether the connection is now authenticated.
Throws
IOException

public synchronized boolean authenticateWithKeyboardInteractive (String user, String[] submethods, InteractiveCallback cb)

After a successful connect, one has to authenticate oneself. This method is based on "keyboard-interactive", specified in draft-ietf-secsh-auth-kbdinteract-XX. Basically, you have to define a callback object which will be feeded with challenges generated by the server. Answers are then sent back to the server. It is possible that the callback will be called several times during the invocation of this method (e.g., if the server replies to the callback's answer(s) with another challenge...)

If the authentication phase is complete, true will be returned. If the server does not accept the request (or if further authentication steps are needed), false is returned and one can retry either by using this or any other authentication method (use the getRemainingAuthMethods method to get a list of the remaining possible methods).

Note: some SSH servers advertise "keyboard-interactive", however, any interactive request will be denied (without having sent any challenge to the client).

Parameters
user A String holding the username.
submethods An array of submethod names, see draft-ietf-secsh-auth-kbdinteract-XX. May be null to indicate an empty list.
cb An InteractiveCallback which will be used to determine the responses to the questions asked by the server.
Returns
  • whether the connection is now authenticated.
Throws
IOException

public synchronized boolean authenticateWithNone (String user)

After a successful connect, one has to authenticate oneself. This method can be used to explicitly use the special "none" authentication method (where only a username has to be specified).

Note 1: The "none" method may always be tried by clients, however as by the specs, the server will not explicitly announce it. In other words, the "none" token will never show up in the list returned by getRemainingAuthMethods(String).

Note 2: no matter which one of the authenticateWithXXX() methods you call, the library will always issue exactly one initial "none" authentication request to retrieve the initially allowed list of authentication methods by the server. Please read RFC 4252 for the details.

If the authentication phase is complete, true will be returned. If further authentication steps are needed, false is returned and one can retry by any other authentication method (use the getRemainingAuthMethods method to get a list of the remaining possible methods).

Parameters
user
Returns
  • if the connection is now authenticated.
Throws
IOException

public synchronized boolean authenticateWithPassword (String user, String password)

After a successful connect, one has to authenticate oneself. This method sends username and password to the server.

If the authentication phase is complete, true will be returned. If the server does not accept the request (or if further authentication steps are needed), false is returned and one can retry either by using this or any other authentication method (use the getRemainingAuthMethods method to get a list of the remaining possible methods).

Note: if this method fails, then please double-check that it is actually offered by the server (use getRemainingAuthMethods().

Often, password authentication is disabled, but users are not aware of it. Many servers only offer "publickey" and "keyboard-interactive". However, even though "keyboard-interactive" *feels* like password authentication (e.g., when using the putty or openssh clients) it is *not* the same mechanism.

Parameters
user
password
Returns
  • if the connection is now authenticated.
Throws
IOException

public synchronized boolean authenticateWithPublicKey (String user, File pemFile, String password)

A convenience wrapper function which reads in a private key (PEM format, either DSA or RSA) and then calls authenticateWithPublicKey(String, char[], String).

NOTE PUTTY USERS: Event though your key file may start with "-----BEGIN..." it is not in the expected format. You have to convert it to the OpenSSH key format by using the "puttygen" tool (can be downloaded from the Putty website). Simply load your key and then use the "Conversions/Export OpenSSH key" functionality to get a proper PEM file.

Parameters
user A String holding the username.
pemFile A File object pointing to a file containing a DSA or RSA private key of the user in OpenSSH key format (PEM, you can't miss the "-----BEGIN DSA PRIVATE KEY-----" or "-----BEGIN RSA PRIVATE KEY-----" tag).
password If the PEM file is encrypted then you must specify the password. Otherwise, this argument will be ignored and can be set to null.
Returns
  • whether the connection is now authenticated.
Throws
IOException

public synchronized boolean authenticateWithPublicKey (String user, char[] pemPrivateKey, String password)

After a successful connect, one has to authenticate oneself. The authentication method "publickey" works by signing a challenge sent by the server. The signature is either DSA or RSA based - it just depends on the type of private key you specify, either a DSA or RSA private key in PEM format. And yes, this is may seem to be a little confusing, the method is called "publickey" in the SSH-2 protocol specification, however since we need to generate a signature, you actually have to supply a private key =).

The private key contained in the PEM file may also be encrypted ("Proc-Type: 4,ENCRYPTED"). The library supports DES-CBC and DES-EDE3-CBC encryption, as well as the more exotic PEM encrpytions AES-128-CBC, AES-192-CBC and AES-256-CBC.

If the authentication phase is complete, true will be returned. If the server does not accept the request (or if further authentication steps are needed), false is returned and one can retry either by using this or any other authentication method (use the getRemainingAuthMethods method to get a list of the remaining possible methods).

NOTE PUTTY USERS: Event though your key file may start with "-----BEGIN..." it is not in the expected format. You have to convert it to the OpenSSH key format by using the "puttygen" tool (can be downloaded from the Putty website). Simply load your key and then use the "Conversions/Export OpenSSH key" functionality to get a proper PEM file.

Parameters
user A String holding the username.
pemPrivateKey A char[] containing a DSA or RSA private key of the user in OpenSSH key format (PEM, you can't miss the "-----BEGIN DSA PRIVATE KEY-----" or "-----BEGIN RSA PRIVATE KEY-----" tag). The char array may contain linebreaks/linefeeds.
password If the PEM structure is encrypted ("Proc-Type: 4,ENCRYPTED") then you must specify a password. Otherwise, this argument will be ignored and can be set to null.
Returns
  • whether the connection is now authenticated.
Throws
IOException

public synchronized void cancelRemotePortForwarding (int bindPort)

Cancel an earlier requested remote port forwarding. Currently active forwardings will not be affected (e.g., disrupted). Note that further connection forwarding requests may be received until this method has returned.

Parameters
bindPort The allocated port number on the server
Throws
IOException if the remote side refuses the cancel request or another low level error occurs (e.g., the underlying connection is closed)

public synchronized void close ()

Close the connection to the SSH-2 server. All assigned sessions will be closed, too. Can be called at any time. Don't forget to call this once you don't need a connection anymore - otherwise the receiver thread may run forever.

public synchronized ConnectionInfo connect (ServerHostKeyVerifier verifier)

Parameters
verifier
Returns
Throws
IOException

public synchronized ConnectionInfo connect ()

Returns
Throws
IOException

public synchronized ConnectionInfo connect (ServerHostKeyVerifier verifier, int connectTimeout, int kexTimeout)

Connect to the SSH-2 server and, as soon as the server has presented its host key, use the ServerHostKeyVerifier.verifyServerHostKey() method of the verifier to ask for permission to proceed. If verifier is null, then any host key will be accepted - this is NOT recommended, since it makes man-in-the-middle attackes VERY easy (somebody could put a proxy SSH server between you and the real server).

Note: The verifier will be called before doing any crypto calculations (i.e., diffie-hellman). Therefore, if you don't like the presented host key then no CPU cycles are wasted (and the evil server has less information about us).

However, it is still possible that the server presented a fake host key: the server cheated (typically a sign for a man-in-the-middle attack) and is not able to generate a signature that matches its host key. Don't worry, the library will detect such a scenario later when checking the signature (the signature cannot be checked before having completed the diffie-hellman exchange).

Note 2: The ServerHostKeyVerifier.verifyServerHostKey() method will *NOT* be called from the current thread, the call is being made from a background thread (there is a background dispatcher thread for every established connection).

Note 3: This method will block as long as the key exchange of the underlying connection has not been completed (and you have not specified any timeouts).

Note 4: If you want to re-use a connection object that was successfully connected, then you must call the close() method before invoking connect() again.

Parameters
verifier An object that implements the ServerHostKeyVerifier interface. Pass null to accept any server host key - NOT recommended.
connectTimeout Connect the underlying TCP socket to the server with the given timeout value (non-negative, in milliseconds). Zero means no timeout. If a proxy is being used (see setProxyData(ProxyData)), then this timeout is used for the connection establishment to the proxy.
kexTimeout Timeout for complete connection establishment (non-negative, in milliseconds). Zero means no timeout. The timeout counts from the moment you invoke the connect() method and is cancelled as soon as the first key-exchange round has finished. It is possible that the timeout event will be fired during the invocation of the verifier callback, but it will only have an effect after the verifier returns.
Returns
  • A ConnectionInfo object containing the details of the established connection.
Throws
IOException If any problem occurs, e.g., the server's host key is not accepted by the verifier or there is problem during the initial crypto setup (e.g., the signature sent by the server is wrong).

In case of a timeout (either connectTimeout or kexTimeout) a SocketTimeoutException is thrown.

An exception may also be thrown if the connection was already successfully connected (no matter if the connection broke in the mean time) and you invoke connect() again without having called close() first.

If a HTTP proxy is being used and the proxy refuses the connection, then a HTTPProxyException may be thrown, which contains the details returned by the proxy. If the proxy is buggy and does not return a proper HTTP response, then a normal IOException is thrown instead.

public synchronized LocalPortForwarder createLocalPortForwarder (int local_port, String host_to_connect, int port_to_connect)

Creates a new LocalPortForwarder. A LocalPortForwarder forwards TCP/IP connections that arrive at a local port via the secure tunnel to another host (which may or may not be identical to the remote SSH-2 server).

This method must only be called after one has passed successfully the authentication step. There is no limit on the number of concurrent forwardings.

Parameters
local_port The local port the LocalPortForwarder shall bind to.
host_to_connect Target address (IP or hostname)
port_to_connect Target port
Returns
Throws
IOException

public synchronized LocalPortForwarder createLocalPortForwarder (InetSocketAddress addr, String host_to_connect, int port_to_connect)

Creates a new LocalPortForwarder. A LocalPortForwarder forwards TCP/IP connections that arrive at a local port via the secure tunnel to another host (which may or may not be identical to the remote SSH-2 server).

This method must only be called after one has passed successfully the authentication step. There is no limit on the number of concurrent forwardings.

Parameters
addr Specifies the InetSocketAddress where the local socket shall be bound to.
host_to_connect Target address (IP or hostname)
port_to_connect Target port
Returns
Throws
IOException

public synchronized LocalStreamForwarder createLocalStreamForwarder (String host_to_connect, int port_to_connect)

Creates a new LocalStreamForwarder. A LocalStreamForwarder manages an Input/Outputstream pair that is being forwarded via the secure tunnel into a TCP/IP connection to another host (which may or may not be identical to the remote SSH-2 server).

Parameters
host_to_connect
port_to_connect
Returns
Throws
IOException

public synchronized SCPClient createSCPClient ()

Create a very basic SCPClient that can be used to copy files from/to the SSH-2 server.

Works only after one has passed successfully the authentication step. There is no limit on the number of concurrent SCP clients.

Note: This factory method will probably disappear in the future.

Returns
Throws
IOException

public synchronized void enableDebugging (boolean enable, DebugLogger logger)

Enable/disable debug logging. Only do this when requested by Trilead support.

For speed reasons, some static variables used to check whether debugging is enabled are not protected with locks. In other words, if you dynamicaly enable/disable debug logging, then some threads may still use the old setting. To be on the safe side, enable debugging before doing the connect() call.

Parameters
enable On/off
logger A DebugLogger instance, null means logging using the simple logger which logs all messages to to stderr. Ignored if enabled is false

public synchronized void forceKeyExchange ()

Force an asynchronous key re-exchange (the call does not block). The latest values set for MAC, Cipher and DH group exchange parameters will be used. If a key exchange is currently in progress, then this method has the only effect that the so far specified parameters will be used for the next (server driven) key exchange.

Note: This implementation will never start a key exchange (other than the initial one) unless you or the SSH-2 server ask for it.

Throws
IOException In case of any failure behind the scenes.

public static synchronized String[] getAvailableCiphers ()

Unless you know what you are doing, you will never need this.

Returns
  • The list of supported cipher algorithms by this implementation.

public static synchronized String[] getAvailableMACs ()

Unless you know what you are doing, you will never need this.

Returns
  • The list of supported MAC algorthims by this implementation.

public static synchronized String[] getAvailableServerHostKeyAlgorithms ()

Unless you know what you are doing, you will never need this.

Returns
  • The list of supported server host key algorthims by this implementation.

public ClientServerHello getClientServerHello ()

public synchronized ConnectionInfo getConnectionInfo ()

Returns a ConnectionInfo object containing the details of the connection. Can be called as soon as the connection has been established (successfully connected).

Returns
Throws
IOException In case of any failure behind the scenes.

public synchronized String getHostname ()

Returns the hostname that was passed to the constructor.

Returns
  • the hostname

public synchronized int getPort ()

Returns the port that was passed to the constructor.

Returns
  • the TCP port

public synchronized String[] getRemainingAuthMethods (String user)

After a successful connect, one has to authenticate oneself. This method can be used to tell which authentication methods are supported by the server at a certain stage of the authentication process (for the given username).

Note 1: the username will only be used if no authentication step was done so far (it will be used to ask the server for a list of possible authentication methods by sending the initial "none" request). Otherwise, this method ignores the user name and returns a cached method list (which is based on the information contained in the last negative server response).

Note 2: the server may return method names that are not supported by this implementation.

After a successful authentication, this method must not be called anymore.

Parameters
user A String holding the username.
Returns
  • a (possibly emtpy) array holding authentication method names.
Throws
IOException

public GenericTransportManager getTransportManager ()

public synchronized boolean isAuthMethodAvailable (String user, String method)

Checks if a specified authentication method is available. This method is actually just a wrapper for getRemainingAuthMethods().

Parameters
user A String holding the username.
method An authentication method name (e.g., "publickey", "password", "keyboard-interactive") as specified by the SSH-2 standard.
Returns
  • if the specified authentication method is currently available.
Throws
IOException

public synchronized boolean isAuthenticationComplete ()

Determines if the authentication phase is complete. Can be called at any time.

Returns
  • true if no further authentication steps are needed.

public synchronized boolean isAuthenticationPartialSuccess ()

Returns true if there was at least one failed authentication request and the last failed authentication request was marked with "partial success" by the server. This is only needed in the rare case of SSH-2 server setups that cannot be satisfied with a single successful authentication request (i.e., multiple authentication steps are needed.)

If you are interested in the details, then have a look at RFC4252.

Returns
  • if the there was a failed authentication step and the last one was marked as a "partial success".

public synchronized Session openSession ()

Open a new Session on this connection. Works only after one has passed successfully the authentication step. There is no limit on the number of concurrent sessions.

Returns
Throws
IOException

public synchronized void ping ()

This method can be used to perform end-to-end connection testing. It sends a 'ping' message to the server and waits for the 'pong' from the server.

When this method throws an exception, then you can assume that the connection should be abandoned.

Note: Works only after one has passed successfully the authentication step.

Implementation details: this method sends a SSH_MSG_GLOBAL_REQUEST request ('trilead-ping') to the server and waits for the SSH_MSG_REQUEST_FAILURE reply packet from the server.

Throws
IOException in case of any problem

public synchronized void requestRemotePortForwarding (String bindAddress, int bindPort, String targetAddress, int targetPort)

Request a remote port forwarding. If successful, then forwarded connections will be redirected to the given target address. You can cancle a requested remote port forwarding by calling cancelRemotePortForwarding().

A call of this method will block until the peer either agreed or disagreed to your request-

Note 1: this method typically fails if you

  • pass a port number for which the used remote user has not enough permissions (i.e., port < 1024)
  • or pass a port number that is already in use on the remote server
  • or if remote port forwarding is disabled on the server.

Note 2: (from the openssh man page): By default, the listening socket on the server will be bound to the loopback interface only. This may be overriden by specifying a bind address. Specifying a remote bind address will only succeed if the server's GatewayPorts option is enabled (see sshd_config(5)).

Parameters
bindAddress Address to bind to on the server:
  • "" means that connections are to be accepted on all protocol families supported by the SSH implementation
  • "0.0.0.0" means to listen on all IPv4 addresses
  • "::" means to listen on all IPv6 addresses
  • "localhost" means to listen on all protocol families supported by the SSH implementation on loopback addresses only, [RFC3330] and RFC3513]
  • "127.0.0.1" and "::1" indicate listening on the loopback interfaces for IPv4 and IPv6 respectively
bindPort Port number to bind on the server (must be > 0)
targetAddress The target address (IP or hostname)
targetPort The target port
Throws
IOException

public synchronized void sendIgnorePacket (byte[] data)

Send an SSH_MSG_IGNORE packet with the given data attribute.

This method must only be called once the connection is established.

Parameters
data
Throws
IOException

public synchronized void sendIgnorePacket ()

Send an SSH_MSG_IGNORE packet. This method will generate a random data attribute (length between 0 (invlusive) and 16 (exclusive) bytes, contents are random bytes).

This method must only be called once the connection is established.

Throws
IOException

public void setAuthenticated (boolean authenticated)

Parameters
authenticated

public void setAuthenticationManager (AuthenticationManager am)

Parameters
am

public synchronized void setClient2ServerCiphers (String[] ciphers)

Unless you know what you are doing, you will never need this.

Parameters
ciphers

public synchronized void setClient2ServerMACs (String[] macs)

Unless you know what you are doing, you will never need this.

Parameters
macs

public synchronized void setDHGexParameters (DHGexParameters dgp)

Sets the parameters for the diffie-hellman group exchange. Unless you know what you are doing, you will never need this. Default values are defined in the DHGexParameters class.

Parameters
dgp DHGexParameters, non null.

public synchronized void setProxyData (ProxyData proxyData)

Used to tell the library that the connection shall be established through a proxy server. It only makes sense to call this method before calling the connect() method.

At the moment, only HTTP proxies are supported.

Note: This method can be called any number of times. The connect() method will use the value set in the last preceding invocation of this method.

Parameters
proxyData Connection information about the proxy. If null, then no proxy will be used (non surprisingly, this is also the default).
See Also

public synchronized void setSecureRandom (SecureRandom rnd)

Provide your own instance of SecureRandom. Can be used, e.g., if you want to seed the used SecureRandom generator manually.

The SecureRandom instance is used during key exchanges, public key authentication, x11 cookie generation and the like.

Parameters
rnd A SecureRandom instance

public synchronized void setServer2ClientCiphers (String[] ciphers)

Unless you know what you are doing, you will never need this.

Parameters
ciphers

public synchronized void setServer2ClientMACs (String[] macs)

Unless you know what you are doing, you will never need this.

Parameters
macs

public synchronized void setServerHostKeyAlgorithms (String[] algos)

Define the set of allowed server host key algorithms to be used for the following key exchange operations.

Unless you know what you are doing, you will never need this.

Parameters
algos An array of allowed server host key algorithms. SSH-2 defines ssh-dss and ssh-rsa. The entries of the array must be ordered after preference, i.e., the entry at index 0 is the most preferred one. You must specify at least one entry.

public synchronized void setTCPNoDelay (boolean enable)

Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm) on the underlying socket.

Can be called at any time. If the connection has not yet been established then the passed value will be stored and set after the socket has been set up. The default value that will be used is false.

Parameters
enable The argument passed to the Socket.setTCPNoDelay() method.
Throws
IOException

public synchronized boolean tryPublicKey (String user, Object publicKey)

After a successful connect, one has to authenticate oneself. This method allows you to test particular public key (f.e. if you need to prompt user for passphrase, it is a good idea to try the key first).

If the public key is accepted, true will be returned. If the server does not accept the request, false is returned and one can retry either by using this or any other authentication method (use the getRemainingAuthMethods method to get a list of the remaining possible methods).

Parameters
user A String holding the username.
publicKey A Object containing the RSA or DSA public key (instances of DSAPublicKey or RSAPublicKey). You can get them in this format by using PublicKeyDecoder.
Returns
  • whether the public key is accepted by the server.
Throws
IOException

Protected Methods

protected GenericTransportManager createTransportManager ()

Throws
IOException