public class PtyCapableChannelSession extends ChannelSession implements PtyChannelConfigurationMutator
Serves as the base channel session for executing remote commands - including a full shell. Note: all the
configuration changes via the various setXXX
methods must be made before the channel is actually open.
If they are invoked afterwards then they have no effect (silently ignored).
A typical code snippet would be:
try (client = SshClient.setUpDefaultClient()) {
client.start();
try (ClientSession s = client.connect(getCurrentTestName(), "localhost", port).verify(CONNECT_TIMEOUT).getSession()) {
s.addPasswordIdentity(getCurrentTestName());
s.auth().verify(AUTH_TIMEOUT);
try (ChannelExec shell = s.createExecChannel("my super duper command")) {
shell.setEnv("var1", "val1");
shell.setEnv("var2", "val2");
...etc...
shell.setPtyType(...);
shell.setPtyLines(...);
...etc...
shell.open().verify(OPEN_TIMEOUT);
shell.waitFor(ClientChannel.CLOSED, TimeUnit.SECONDS.toMillis(17L)); // can use zero for infinite wait
Integer status = shell.getExitStatus();
if (status.intValue() != 0) {
...error...
}
}
} finally {
client.stop();
}
}
AbstractChannel.GracefulChannelCloseable, AbstractChannel.GracefulState
AbstractCloseable.State
ClientChannel.Streaming
AttributeRepository.AttributeKey<T>
Modifier and Type | Field and Description |
---|---|
private boolean |
agentForwarding |
private PtyChannelConfiguration |
config |
private java.util.Map<java.lang.String,java.lang.Object> |
env |
private boolean |
usePty |
DEFAULT_INPUT_STREAM_PUMP_CHUNK_SIZE, INPUT_STREAM_PUMP_CHUNK_SIZE
asyncErr, asyncIn, asyncOut, err, exitSignalHolder, exitStatusHolder, in, invertedErr, invertedIn, invertedOut, opened, openFailureLang, openFailureMsg, openFailureReason, openFuture, out, streaming
channelListenerProxy, channelListeners, eofReceived, eofSent, gracefulFuture, gracefulState, initialized, RESPONSE_BUFFER_GROWTH_FACTOR, service
closeFuture, futureLock, state
log
DEFAULT_COLUMNS_COUNT, DEFAULT_HEIGHT, DEFAULT_PTY_MODES, DEFAULT_ROWS_COUNT, DEFAULT_WIDTH, DUMMY_PTY_TYPE, WINDOWS_PTY_TYPE
CHANNEL_EXEC, CHANNEL_SHELL, CHANNEL_SUBSYSTEM
EMPTY
NONE
CLOSE_WAIT_TIMEOUT, DEFAULT_CLOSE_WAIT_TIMEOUT
Constructor and Description |
---|
PtyCapableChannelSession(boolean usePty,
PtyChannelConfigurationHolder configHolder,
java.util.Map<java.lang.String,?> env) |
Modifier and Type | Method and Description |
---|---|
protected void |
doOpenPty() |
int |
getPtyColumns() |
int |
getPtyHeight() |
int |
getPtyLines() |
java.util.Map<PtyMode,java.lang.Integer> |
getPtyModes() |
java.lang.String |
getPtyType() |
int |
getPtyWidth() |
boolean |
isAgentForwarding() |
boolean |
isUsePty() |
protected java.lang.String |
resolvePtyType(PtyChannelConfigurationHolder configHolder) |
void |
sendWindowChange(int columns,
int lines) |
void |
sendWindowChange(int columns,
int lines,
int height,
int width) |
void |
setAgentForwarding(boolean agentForwarding) |
java.lang.Object |
setEnv(java.lang.String key,
java.lang.Object value) |
void |
setPtyColumns(int ptyColumns) |
void |
setPtyHeight(int ptyHeight) |
void |
setPtyLines(int ptyLines) |
void |
setPtyModes(java.util.Map<PtyMode,java.lang.Integer> ptyModes) |
void |
setPtyType(java.lang.String ptyType) |
void |
setPtyWidth(int ptyWidth) |
void |
setupSensibleDefaultPty() |
void |
setUsePty(boolean usePty) |
closeImmediately0, doOpen, getInnerCloseable, handleInternalRequest, handleXonXoff, pumpInputStream, securedRead
addChannelSignalRequestHandlers, doWriteData, doWriteExtendedData, getAsyncErr, getAsyncIn, getAsyncOut, getChannelState, getChannelType, getErr, getExitSignal, getExitStatus, getIn, getInvertedErr, getInvertedIn, getInvertedOut, getOut, getStreaming, handleOpenFailure, handleOpenSuccess, handleWindowAdjust, open, open, setErr, setIn, setOut, setStreaming, updateCurrentChannelState, waitFor
addChannelListener, addPendingRequest, addRequestHandler, attributeKeys, clearAttributes, computeAttributeIfAbsent, configureWindow, getAttribute, getAttributesCount, getChannelListenerProxy, getChannelStreamPacketWriterResolver, getExecutorService, getId, getLocalWindow, getParentPropertyResolver, getProperties, getRecipient, getRemoteWindow, getRequestHandlers, getSession, handleChannelRequest, handleClose, handleData, handleEof, handleExtendedData, handleFailure, handleRequest, handleSuccess, handleUnknownChannelRequest, init, invokeChannelSignaller, isEofSent, isEofSignalled, isInitialized, notifyStateChanged, notifyStateChanged, preClose, removeAttribute, removeChannelListener, removePendingRequest, removeRequestHandler, resolveChannelStreamPacketWriterResolver, sendEof, sendResponse, sendWindowAdjust, setAttribute, setChannelStreamPacketWriterResolver, setRecipient, signalChannelClosed, signalChannelClosed, signalChannelInitialized, signalChannelInitialized, signalChannelOpenFailure, signalChannelOpenFailure, signalChannelOpenSuccess, signalChannelOpenSuccess, toString, validateIncomingDataSize, writePacket
doCloseGracefully, doCloseImmediately
addCloseFutureListener, builder, close, getFutureLock, isClosed, isClosing, removeCloseFutureListener
getSimplifiedLogger
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
copyConfiguration, setupSensitiveDefaultPtyConfiguration
getClientSession, validateCommandExitStatusCode, waitFor
addRequestHandler, addRequestHandlers, getId, getLocalWindow, getRecipient, getRemoteWindow, getRequestHandlers, handleClose, handleData, handleEof, handleExtendedData, handleFailure, handleRequest, handleSuccess, init, isEofSignalled, isInitialized, removeRequestHandler, removeRequestHandlers, resolveAttribute, resolveAttribute
getSession, getSessionContext
addChannelListener, getChannelListenerProxy, removeChannelListener
getBoolean, getBooleanProperty, getCharset, getInteger, getIntProperty, getLong, getLongProperty, getObject, getParentPropertyResolver, getProperties, getString, getStringProperty
clearAttributes, computeAttributeIfAbsent, removeAttribute, setAttribute
attributeKeys, getAttribute, getAttributesCount, ofAttributesMap, ofKeyValuePair
calculatePadLength, writePacket
getChannelStreamPacketWriterResolver, resolveChannelStreamPacketWriter, resolveChannelStreamPacketWriterResolver, setChannelStreamPacketWriterResolver
addCloseFutureListener, close, close, close, getMaxCloseWaitTime, isClosed, isClosing, isOpen, removeCloseFutureListener
private boolean agentForwarding
private boolean usePty
private final java.util.Map<java.lang.String,java.lang.Object> env
private final PtyChannelConfiguration config
public PtyCapableChannelSession(boolean usePty, PtyChannelConfigurationHolder configHolder, java.util.Map<java.lang.String,?> env)
protected java.lang.String resolvePtyType(PtyChannelConfigurationHolder configHolder)
public void setupSensibleDefaultPty()
public boolean isAgentForwarding()
public void setAgentForwarding(boolean agentForwarding)
public boolean isUsePty()
public void setUsePty(boolean usePty)
public java.lang.String getPtyType()
getPtyType
in interface PtyChannelConfigurationHolder
public void setPtyType(java.lang.String ptyType)
setPtyType
in interface PtyChannelConfigurationMutator
public int getPtyColumns()
getPtyColumns
in interface PtyChannelConfigurationHolder
public void setPtyColumns(int ptyColumns)
setPtyColumns
in interface PtyChannelConfigurationMutator
public int getPtyLines()
getPtyLines
in interface PtyChannelConfigurationHolder
public void setPtyLines(int ptyLines)
setPtyLines
in interface PtyChannelConfigurationMutator
public int getPtyWidth()
getPtyWidth
in interface PtyChannelConfigurationHolder
public void setPtyWidth(int ptyWidth)
setPtyWidth
in interface PtyChannelConfigurationMutator
public int getPtyHeight()
getPtyHeight
in interface PtyChannelConfigurationHolder
public void setPtyHeight(int ptyHeight)
setPtyHeight
in interface PtyChannelConfigurationMutator
public java.util.Map<PtyMode,java.lang.Integer> getPtyModes()
getPtyModes
in interface PtyChannelConfigurationHolder
public void setPtyModes(java.util.Map<PtyMode,java.lang.Integer> ptyModes)
setPtyModes
in interface PtyChannelConfigurationMutator
public java.lang.Object setEnv(java.lang.String key, java.lang.Object value)
key
- The (never null
) key (Note: may be empty...)value
- The value to set - if null
then the pre-existing value for the key (if any) is
removed.null
if no previous value set for the key.public void sendWindowChange(int columns, int lines) throws java.io.IOException
java.io.IOException
public void sendWindowChange(int columns, int lines, int height, int width) throws java.io.IOException
java.io.IOException
protected void doOpenPty() throws java.io.IOException
java.io.IOException