Class Session
- java.lang.Object
-
- com.trilead.ssh2.Session
-
public class Session extends java.lang.Object
ASession
is a remote execution of a program. "Program" means in this context either a shell, an application or a system command. The program may or may not have a tty. Only one single program can be started on a session. However, multiple sessions can be active simultaneously.
-
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
close()
Close this session.void
execCommand(java.lang.String cmd)
Execute a command on the remote machine.java.lang.String
getExitSignal()
Get the name of the signal by which the process on the remote side was stopped - if available and applicable.java.lang.Integer
getExitStatus()
Get the exit code/status from the remote command - if available.java.io.InputStream
getStderr()
java.io.OutputStream
getStdin()
java.io.InputStream
getStdout()
void
ping()
This method can be used to perform end-to-end session (i.e., SSH channel) testing.void
requestDumbPTY()
Basically just a wrapper for lazy people - identical to callingrequestPTY("dumb", 0, 0, 0, 0, null)
.void
requestPTY(java.lang.String term)
Basically just another wrapper for lazy people - identical to callingrequestPTY(term, 0, 0, 0, 0, null)
.void
requestPTY(java.lang.String term, int term_width_characters, int term_height_characters, int term_width_pixels, int term_height_pixels, byte[] terminal_modes)
Allocate a pseudo-terminal for this session.void
requestX11Forwarding(java.lang.String hostname, int port, byte[] cookie, boolean singleConnection)
Request X11 forwarding for the current session.void
startShell()
Start a shell on the remote machine.void
startSubSystem(java.lang.String name)
Start a subsystem on the remote machine.int
waitForCondition(int condition_set, long timeout)
This method blocks until certain conditions hold true on the underlying SSH-2 channel.int
waitUntilDataAvailable(long timeout)
Deprecated.This method has been replaced with a much more powerful wait-for-condition interface and therefore acts only as a wrapper.
-
-
-
Method Detail
-
requestDumbPTY
public void requestDumbPTY() throws java.io.IOException
Basically just a wrapper for lazy people - identical to callingrequestPTY("dumb", 0, 0, 0, 0, null)
.- Throws:
java.io.IOException
-
requestPTY
public void requestPTY(java.lang.String term) throws java.io.IOException
Basically just another wrapper for lazy people - identical to callingrequestPTY(term, 0, 0, 0, 0, null)
.- Throws:
java.io.IOException
-
requestPTY
public void requestPTY(java.lang.String term, int term_width_characters, int term_height_characters, int term_width_pixels, int term_height_pixels, byte[] terminal_modes) throws java.io.IOException
Allocate a pseudo-terminal for this session.This method may only be called before a program or shell is started in this session.
Different aspects can be specified:
- The TERM environment variable value (e.g., vt100)
- The terminal's dimensions.
- The encoded terminal modes.
terminal_modes
) is described in RFC4254.- Parameters:
term
- The TERM environment variable value (e.g., vt100)term_width_characters
- terminal width, characters (e.g., 80)term_height_characters
- terminal height, rows (e.g., 24)term_width_pixels
- terminal width, pixels (e.g., 640)term_height_pixels
- terminal height, pixels (e.g., 480)terminal_modes
- encoded terminal modes (may benull
)- Throws:
java.io.IOException
-
requestX11Forwarding
public void requestX11Forwarding(java.lang.String hostname, int port, byte[] cookie, boolean singleConnection) throws java.io.IOException
Request X11 forwarding for the current session.You have to supply the name and port of your X-server.
This method may only be called before a program or shell is started in this session.
- Parameters:
hostname
- the hostname of the real (target) X11 server (e.g., 127.0.0.1)port
- the port of the real (target) X11 server (e.g., 6010)cookie
- if non-null, then present this cookie to the real X11 serversingleConnection
- if true, then the server is instructed to only forward one single connection, no more connections shall be forwarded after first, or after the session channel has been closed- Throws:
java.io.IOException
-
execCommand
public void execCommand(java.lang.String cmd) throws java.io.IOException
Execute a command on the remote machine.- Parameters:
cmd
- The command to execute on the remote host.- Throws:
java.io.IOException
-
startShell
public void startShell() throws java.io.IOException
Start a shell on the remote machine.- Throws:
java.io.IOException
-
startSubSystem
public void startSubSystem(java.lang.String name) throws java.io.IOException
Start a subsystem on the remote machine. Unless you know what you are doing, you will never need this.- Parameters:
name
- the name of the subsystem.- Throws:
java.io.IOException
-
ping
public void ping() throws java.io.IOException
This method can be used to perform end-to-end session (i.e., SSH channel) testing. It sends a 'ping' message to the server and waits for the 'pong' from the server.Implementation details: this method sends a SSH_MSG_CHANNEL_REQUEST request ('trilead-ping') to the server and waits for the SSH_MSG_CHANNEL_FAILURE reply packet.
- Throws:
java.io.IOException
- in case of any problem or when the session is closed
-
getStdout
public java.io.InputStream getStdout()
-
getStderr
public java.io.InputStream getStderr()
-
getStdin
public java.io.OutputStream getStdin()
-
waitUntilDataAvailable
public int waitUntilDataAvailable(long timeout) throws java.io.IOException
Deprecated.This method has been replaced with a much more powerful wait-for-condition interface and therefore acts only as a wrapper.This method blocks until there is more data available on either the stdout or stderr InputStream of thisSession
. Very useful if you do not want to use two parallel threads for reading from the two InputStreams. One can also specify a timeout. NOTE: do NOT call this method if you use concurrent threads that operate on either of the two InputStreams of thisSession
(otherwise this method may block, even though more data is available).- Parameters:
timeout
- The (non-negative) timeout inms
.0
means no timeout, the call may block forever.- Returns:
0
if no more data will arrive.1
if more data is available.-1
if a timeout occurred.
- Throws:
java.io.IOException
-
waitForCondition
public int waitForCondition(int condition_set, long timeout)
This method blocks until certain conditions hold true on the underlying SSH-2 channel.This method returns as soon as one of the following happens:
- at least of the specified conditions (see
ChannelCondition
) holds true - timeout > 0 and a timeout occured (TIMEOUT will be set in result conditions)
- the underlying channel was closed (CLOSED will be set in result conditions)
In any case, the result value contains ALL current conditions, which may be more than the specified condition set (i.e., never use the "==" operator to test for conditions in the bitmask, see also comments in
ChannelCondition
).Note: do NOT call this method if you want to wait for STDOUT_DATA or STDERR_DATA and there are concurrent threads (e.g., StreamGobblers) that operate on either of the two InputStreams of this
Session
(otherwise this method may block, even though more data is available in the StreamGobblers).- Parameters:
condition_set
- a bitmask based onChannelCondition
valuestimeout
- non-negative timeout in ms,0
means no timeout- Returns:
- all bitmask specifying all current conditions that are true
- at least of the specified conditions (see
-
getExitStatus
public java.lang.Integer getExitStatus()
Get the exit code/status from the remote command - if available. Be careful - not all server implementations return this value. It is generally a good idea to call this method only when all data from the remote side has been consumed (see also themethod).
- Returns:
- An
Integer
holding the exit code, ornull
if no exit code is (yet) available.
-
getExitSignal
public java.lang.String getExitSignal()
Get the name of the signal by which the process on the remote side was stopped - if available and applicable. Be careful - not all server implementations return this value.- Returns:
- An
String
holding the name of the signal, ornull
if the process exited normally or is still running (or if the server forgot to send this information).
-
close
public void close()
Close this session. NEVER forget to call this method to free up resources - even if you got an exception from one of the other methods (or when getting an Exception on the Input- or OutputStreams). Sometimes these other methods may throw an exception, saying that the underlying channel is closed (this can happen, e.g., if the other server sent a close message.) However, as long as you have not called theclose()
method, you may be wasting (local) resources.
-
-