THIS CHANGELOG IS NO LONGER MAINTAINED
IllegalStateException for sanity-checking instead of assert statements inside
- Use debug rather than info logging when failing to load keys from a location in
sshClient.authPublickey(user, locations...). (GH-84)
- Possibility of
channelOutputStream.write(). (GH-99, GH-104)
- Add 'unconfirmed writes' feature to
RemoteFileOutputStream, allowing for major speedups in SFTP upload (should be at least 2x, ymmv). This is brought to you by a new parameter in the
RemoteFileOutputStream constructor called
maxUnconfirmedWrites, which is utilised by
sftpFileTransfer.upload() with a default value of 16. (GH-97)
- We were missing a socket flush during the initial SSH banner exchange.
- Transport/Connection/SFTP layer timeout methods are now millisecond granularity.
setTimeout() are called
- Simplified the
UserAuth.authenticate(..) interface by making it one-method-at-time, with the trial and error business happening in
StatefulSFTPClient.cd() should not update internal cwd state if stat fails. (GH-90)
- Potential visibility issue on some channel request info received from server like exit status. (GH-114)
- Dependency version updates.
- Made logs less chatty by changing some info logging to be debug logging. (GH-80)
- Regex pattern matching for password prompt in
AbstractChannel.close() should be no-op if the channel is already closed. (GH-53?)
sshClient.disconnect() no-op if already disconnected / never connected (GH-67).
- Set default tty to
vt100 for shell sessions.
- Much improved
TransferListener interface that supports immutable implementation, however as it is signfiicantly different any overridden impl will break.
- Fix for remote max packet size when greater than MAX_INT being treated as -1. (GH-57)
- Avoid string concat in various logging statements.
sftpClient.mkdirs() will not attempt to create the rightmost child 2x if there was a trailing separator in path.
- Fix for infinite loop in buffer allocation. (GH-72)
SFTPFileTransfer now has a preference for whether attributes should be preserved. (GH-42)
OpenSSHKnownHosts re-implemented to better support the format seen in the wild, e.g. optional markers. (GH-41)
SocketClient made public so that SSHClient can be mocked for testing.
- Publish sources jar. (GH-37)
- Fixed typo on
- Removed deprecated methods on
- Window adjustments were being logged incorrectly, fixed.
- Fix a condition where
ChannelOutputStream writes or flushes may wrongly block sitting around waiting for window adjustments where none was required. Issue was observed with non-OpenSSH servers like dropbear and WinSSHD. (GH-47)
- Fix for using sshj in OSGi. (GH-50)
- Local port forwarding - there was no way to cleanly close the server socket. (GH-26)
- Race condition in
AbstractChannel channel requests (0.6.0 regression). (GH-36)
- Fixed deadlock condition in
StatefulSFTPClient doesn't cwdify all commands. (GH-28)
- Fixed bug in SFTP
FileMode for AIX/Unix directory mask. (GH-31)
- The option to use an 'upload filter' is back in
- In case of
publickey authentication using a string rather than a file, prevent private key data from leaking in logs / on authentication exception. (GH-20)
- SessionChannel#changeWindowDimensions was broken. (GH-21)
- Prevent occasional spurious NPE when disconnecting at AbstractDirectChannel#notifyError.
- SSHClient implements Closeable.
- OSGi-fication. (GH-22)
- Intermittent key exchange failures. (GH-18)
- Support for
publickey authentication from strings. (GH-16)
FileTransfer interface refactored. Local source and destination paths can be any implementation of
- Bug in case of SCP remote path having spaces fixed.
Command#getErrorAsString() -- recommend using
StreamCopier interface updated, now uses builder pattern.
start() to spawn,
copy() to do it in current thread and block.
- Possible to specify an alternate path separator (for Windows SFTP servers).
- Several internal refactorings that make the library nicer...
ChannelInputStream gets correctly notified of errors e.g. at the transport layer.
- Added a
- An alternate
AndroidConfig to initialize
SSHClient with on Android 2.3+ was added, which uses
JCERandom instead of
- In SCP upload, detect when destination directory does not exist. This was previously detected as a warning (well, technically it is sent as one...) but should truly be an error. All SCP 'warnings' now treated as errors.
- Bug with
StatefulSFTPClient#put fixed - was doing a get instead of a put!
SessionChannel reuse now gets an explicit runtime error.
channel.close() method no longer called implicitly on disconnecting, because this is error prone. See updated examples.
- Logging fix: enable filtering, previously due to misconfiguration this was hard to do.
- Don't barf when a server sends more
CHANNEL_DATA than announced. Now there is no exception in this case, but still only as much data as announced is consumed.
- Client was still identifying as
SSHJ_0_1 -- changed to
- Support for SFTP versions less than 3.
- Host based authentication - see
net.schmizz.sshj.userauth.method.AuthHostbased; pass an instance to
SSHClient.auth() to use.
Channel.join() to allow blocking on channel close event. Useful e.g. when waiting for a command to exit.
- Various code cleanups.
- In 0.2.0
DeaultModeSetter started throwing exception when permissions couldn't be retrieved/assigned, and this was problematic on windows so the exception has been replaced with a log message.
- Now compiled with compiler source and target level = 6 -- JRE 6+ is required! Always was, just more explicit now.
- New methods in
SFTPClient: checking if a file/directory exists (
statExistence() -- returns
null on file not found); recursively create directories (
- Bug with SFTP directory listing being truncated fixed.
- Timestamps and permissions are now preserved by default when transferring with SCP or SFTP. A bug which prevented even using the
ModeSetter interface for this purpose has been quashed.
keyboard-interactive authentication now supported.
SSHClient#authPassword() attempts to use it as a fallback by default.
- An interface has been introduced for observing progress of file transfers (
TransferListener) which can be registered with any
FileTransfer implementation (i.e.
- Various bugfixes and improvements.