Changelog
This documents notable changes in LibSSH.jl. The format is based on Keep a Changelog.
v0.7.1 - 2024-12-06
Added
- Implemented
Base.mkpath(::AbstractString, ::SftpSession)
(#30). - Added support for 32-bit platforms, though only Linux is tested with that in CI (#29).
Fixed
v0.7.0 - 2024-10-25
Added
Demo.DemoServer
now supports passingallow_auth_none=true
to allow easily setting up passwordless authentication (#28).
Fixed
- Previously the
Demo.DemoServer
's command execution implementation would only send the command output after it had finished. Now the output gets sent as soon as it's printed by the command (#28).
Changed
- Breaking:
set_channel_callbacks()
will remove any existing callbacks (#28).
v0.6.1 - 2024-10-20
Added
- Added support for setting the file descriptor for a
Session
during construction (#21). - Our
Base.run()
methods now accept plainString
s as well asCmd
s (#24). - Implemented convenience
Base.read(::String, ::SftpSession)
methods that will take aString
filename without having to open the file explicitly (#25). - Added support for specifying whether a
Session
should use the users SSH config with theprocess_config
option (#25).
Fixed
- Improved handling of possible errors in
Base.readdir()
(#20). - Fixed exception handling for
Base.run()
, now it throws aSshProcessFailedException
orLibSSHException
on command failure instead of a plainTaskFailedException
(#25).
v0.6.0 - 2024-10-11
Added
- Implemented
Base.readchomp(::Cmd)
for remote commands (#12). - Add support for passing environment variables to remote commands with
Base.run(::Cmd)
(#12). - Made it possible to assign callbacks to
Callbacks.ServerCallbacks
andCallbacks.ChannelCallbacks
by property (#14). close(::SshChannel)
andclosewrite(::SshChannel)
now support anallow_fail
argument that will print a warning instead of throw an exception if modifying thelib.ssh_channel
fails (#16).- Initial SFTP client support (#16, #18, #19).
Fixed
- Fixed segfaults that would occur in
SshChannel
when itsSession
is disconnected by the remote end (#13). - Fixed some concurrency bugs in the
Demo.DemoServer
andSessionEvent
(#15). - Fixed a race condition in the
Demo.DemoServer
that could cause segfaults (#16).
Changed
- Breaking:
Session
now needs to be closed explictly instead of relying on the finalizer for the memory to be freed.
v0.5.0 - 2024-08-10
Added
- A new
Forwarder(::Session, ::String, ::Int)
constructor to allow for forwarding a port to an internal socket instead of to a port (#10).
Changed
- Updated the libssh library to 0.11.0 (#11).
v0.4.0 - 2024-03-12
Added
- A
throw
argument topoll_loop()
(#9). - Support for some more options in
Session
(#9). - A new method for
PKI.get_fingerprint_hash(::PKI.SshKey)
to get a public key fingerprint straight from aPKI.SshKey
(#9).
Changed
- Some automatically-wrapped low-level functions changed names back to retaining their
ssh_
prefixes, and they now have athrow
argument to allow disabling throwing an exception upon error (#9). authenticate()
will now do host verification as well. This is critical for security so it is strongly recommend that all dependencies update to this release (#9).- All the
throw_on_*
arguments in the variousSession
andSshChannel
methods have been renamedthrow
for consistency withBase
and the newthrow
arguments in some auto-wrapped bindings (#9).
v0.3.0 - 2024-03-10
Added
- It's possible to set an interface for the
Forwarder
socket to listen on with thelocalinterface
argument (#6). - A new
Gssapi
module to help with GSSAPI support. In particular,Gssapi.principal_name()
was added to get the name of the default principal if one is available (#6). - An experimental
authenticate()
function to simplify authenticating (#7). - A do-constructor for
Session(::Function)
(#8).
Changed
- The
userauth_*
functions will now throw aLibSSHException
by default if they got aAuthStatus_Error
from libssh. This can be disabled by passingthrow_on_error=false
(#6). gssapi_available()
was renamed toGssapi.isavailable()
(#6).userauth_kbdint_getprompts()
returns a vector ofKbdintPrompt
objects instead of tuples (#7).
Fixed
- Fixed some race conditions in
poll_loop()
andForwarder()
(#6). Base.run(::Cmd, ::Session)
now properly converts commands into strings before executing them remotely, previously things like quotes weren't escaped properly (#6).- Fixed a bug in
Base.run(::Cmd, ::Session)
that would clear the output buffer when printing (#6). - Changed
poll_loop()
to poll the stdout and stderr streams, which fixes a bug where callbacks would sometimes not get executed even when data was available (#8).
v0.2.1 - 2024-02-27
Added
- Initial client support for GSSAPI authentication (#3). This is not fully tested, so use it with caution.
Changed
- Renamed
channel_send_eof()
toclosewrite(::SshChannel)
(#4).
Fixed
- An exception in
get_error(::Session)
(#5).
v0.2.0 - 2024-02-01
Changed
- The Command execution API was completely rewritten to match Julia's API (#2). This is a breaking change, any code using the old
ssh.execute()
will need to be rewritten.
Fixed
- A cause of segfaults was fixed by storing callbacks properly, so they don't get garbage collected accidentally (#2).
v0.1.0 - 2024-01-29
The initial release 🎉 ✨
Added
- Basic client support, and high-level wrappers for some Channel operations.
- A Demo server for testing SSH clients.