- Exported
src/ssh_userauth.dartinlib/dartssh2.dartto exposeSSHUserInfoRequest,SSHUserInfoPrompt,SSHAuthMethod, andSSHChangePasswordResponse#188. Thanks @vicajilau.
- Advertised standard RFC 8731 key exchange name
curve25519-sha256alongside legacycurve25519-sha256@libssh.org[#187]. Thanks [@nickn17].
- Fixed an SSH channel leak in
SftpClient.close()by closing the underlying SSH channel and returningFuture<void>to allow awaiting channel teardown [#186]. Thanks [@keinstn].
- Added
flush()toSSHSocket,SSHClient, andSSHChannelto allow force flushing of buffered outgoing data [#183]. Thanks @vicajilau.
- Fixed a keepalive issue where overlapping pings could occur and caught errors during ping execution. Thanks @vicajilau.
- Added optional
handshakeTimeoutandauthTimeouttoSSHClientto limit connection negotiation and user authentication times [#182]. Thanks @GT-610.
- Fixed an
SSHTransportbusy-loop (100% CPU / ANR) that occurred when a partial packet remained in the read buffer [#179]. Thanks @vicajilau.
- Added
SSHSession.waitForExit({Duration? timeout})to await remote process exit status with an optional timeout #176. Thanks @GT-610. - Hardened SOCKS5 dynamic forwarding (half-close streaming, dialing guards, timeout cancellation, malformed UTF-8 decoding, and buffer limits) #175. Thanks @GT-610.
- Hardened SSH agent channel frame validation (rejecting empty or oversized frames) and fallback RSA signature type checks #175. Thanks @GT-610.
- Improved EC private key parsing with proper ASN.1 OID curve detection, public point derivation validation, and robust comments decoding #175. Thanks @GT-610.
- BREAKING: Bumped the minimum Dart SDK constraint to
3.0.0#23. Thanks @vicajilau. - BREAKING: Declared
OpenSSHKeyPairas amixin classto comply with Dart 3.0 class modifier rules #23. Thanks @vicajilau. - Offloaded all cryptographic key exchange (KEX) calculations to background isolates using
Isolate.runon platforms that support it, preventing the Flutter main thread from blocking/freezing during connection #23. Thanks @vicajilau. - Refactored internal key exchange isolate communication payloads (X25519, NIST Curves, DH) to use Dart 3.0 type-safe Records #23. Thanks @vicajilau.
- Added tolerant HTTP-date parsing to accept all RFC 7231 §7.1.1.1 HTTP-date formats (
IMF-fixdate,RFC 850,asctime) for HTTP response headers [#170]. Thanks @GT-610. - Added chunked transfer-encoding decoding for HTTP response bodies according to RFC 7230 §4.1, improving interoperability with HTTP/1.1 servers [#171]. Thanks @GT-610.
- Added support for OpenSSH's
posix-rename@openssh.comSFTP extension to perform atomic renames with POSIX semantics (replace destination if it exists) when advertised by the server [#172]. Thanks @GT-610. - Added
SftpFile.downloadToRandomAccessto download a remote file directly into adart:ioRandomAccessFileusing out-of-order pipelined writes, maximizing download performance on high-latency links [#173]. Thanks @GT-610. - Fixed a connection drop bug during AEAD (AES-GCM) decryption caused by incorrect padding length validation offset calculation [#168]. Thanks [@nuclear06].
- Fixed AES-GCM cipher encryption and decryption sequence number/nonce counter resetting during key exchanges #165. Thanks @vicajilau.
- BREAKING:
SSHHostkeyVerifyHandlernow receives an OpenSSH-styleSHA256:<base64>host key fingerprint instead of the previous raw MD5 digest, so host key pinning code must be updated accordingly [#162]. Thanks [@thyssentishman].
- Made
SSHPem.decodeaccept CRLF (\r\n) line endings in addition to LF when parsing PEM content #157. Thanks @gkc.
- Improved Web/WASM compatibility by updating
SSHSocketconditional imports so web runtimes consistently use the web socket shim and avoid incorrect native socket selection #88. Thanks @vicajilau. - Added local dynamic forwarding (
SSHClient.forwardDynamic) with SOCKS5NO AUTH+CONNECT, including configurable handshake/connect timeouts and connection limits. - Added AES-GCM (
aes128-gcm@openssh.com,aes256-gcm@openssh.com) AEAD groundwork in transport and cipher negotiation; currently opt-in (not enabled by default yet).chacha20-poly1305@openssh.comremains pending #26. Thanks @vicajilau.
- BREAKING: Changed
SSHChannelController.sendEnv()fromvoidtoFuture<bool>to properly await environment variable setup responses and avoid race conditions with PTY requests #102. Thanks @itzhoujun and @vicajilau. - Clarified shell stdio wiring for CLI-only usage and guarded
example/shell.dartagainst missing local terminal handles (for example GUI-launched Windows.exe) #121. Thanks @bradmartin333 and @vicajilau. - Added support for parsing legacy unencrypted
EC PRIVATE KEYPEM format inSSHKeyPair.fromPem#109. Thanks @jooy2 and @vicajilau. - Added
SSHClient.runWithResult()to expose command output together withexitCodeandexitSignalwhile keepingrun()as a convenience API #99. Thanks @falrom and @vicajilau. - Added non-breaking high-level SFTP
download()/downloadTo()APIs and read pipeline tuning knobs (chunkSize,maxPendingRequests) for improved large-file throughput while preserving stream compatibility #124. Thanks @vicajilau. - Made SFTP directory/file name parsing tolerant to malformed UTF-8 bytes to avoid
FormatExceptionon non-UTF-8 server filenames #95. Thanks @vicajilau.
- Updated
pointycastledependency to^4.0.0#131. Thanks @vicajilau. - Added foundational X11 forwarding support with session x11-req API, incoming x11 channel handling, and protocol tests #1. Thanks @vicajilau.
- Exposed SSH ident configuration from
SSHClient#135. Thanks @Remulic and @vicajilau. - Propagated the underlying exception in
SSHAuthAbortErrorthroughreasonfor better diagnostics #133. Thanks @james-thorpe and @vicajilau. - Accepted
SSH-1.99-*server banners as SSH-2 compatible during version exchange and added regression tests #132. Thanks @james-thorpe and @vicajilau. - Added SSH agent forwarding support (
auth-agent-req@openssh.com) with in-memory agent handling and RSA sign-request flag support #139. Thanks @Wackymax and @vicajilau. - Normalized HTTP response line parsing in
SSHHttpClientResponseto handle CRLF endings consistently and avoid trailing line-ending artifacts in parsed status/header fields #145. Thanks @vicajilau. - Fixed SFTP packet encoding/decoding consistency:
SftpInitPacket.decodenow parses extension pairs correctly andSftpExtendedReplyPacket.encodenow preserves raw payload bytes #145. Thanks @vicajilau.
- Fixed SSH connections through bastion hosts where the target server sends its version string immediately upon connection (which is standard behavior per RFC 4253) #141. Thanks [@shihuili1218].
- Adds a new forwardLocalUnix() function, which is an equivalent of ssh -L localPort:remoteSocketPath #140. Thanks [@isegal].
- docs: Update NoPorts naming [#115]. @XavierChanth.
- Add parameter disableHostkeyVerification #123. Thanks @alexander-irion.
- Add support for server initiated re-keying #125. Thanks @MarBazuz.
- Add support for new algorithms "mac-sha2-256-96", "hmac-sha2-512-96", "hmac-sha2-256-etm@openssh.com", "hmac-sha2-512-etm@openssh.com" #126 #127. Thanks @reinbeumer.
- Fixed streams and channel not closing after receiving SSH_Message_Channel_Close [#116]. [@cbenhagen].
- Fixed lint issues.
- Added tests.
- Updated dependencies.
- Fixed Type 'Uint8' not found issue.
- Improved Readme.
- Bug fix in SftpFileWriter for #50, #71, #100.
- Added DartShell product #101.
- Fixed dynamic return on SftpFileOpenMode in | operator #80.
- DCM updated.
- Fixed warnings related with new DCM version.
- Dependencies updated.
- Fixed Flutter 3.24 issue.
- Make the type of
SSHForwardChannel.sinktoStreamSink<List<int>>to match its super class. - Added
SSHHttpClientfor easy http request forwarding.
- Better handling of channel close.
- Make
SSHForwardChannelimplementSSHSocketfor better interoperability.
- Make
SftpFileWriterimplementFuture<void>for backward compatibility.
- Export
SftpFileWriter
SftpFile.writenow returns aSftpFileWriterthat can be used to control the writing process.- Support
SftpClient.statvfsandSftpFile.statvfs. - Support automatic keepalive.
- Update README.md
- Move cli into separate package.
- Properly handle chunk read error during stream read.
- Update README.md
- Update README.md
- Update README.md
- Upgrade
pinenaclto0.5.0. - Fix bug in exporting openssh private key to pem, thanks @PIDAMI
- Upgrade rsa authentication algorithm to rsa-sha2-256.
- Support encrypted RSA format private key
- Allow username with
@indartssh2command #24
- Allow ignoring stdout or stderr in
SSHClient.run. - Add
SSHAuthFailErrorandSSHAuthAbortError. - Fix file type detection.
- Fix empty identity handling #21
- Add connection reset handing.
- Add more tests
- Fix js import path #18.
- Ignore remote data after channel closed.
- Fix lint errors
- Remove unused dependencies
- Fix lint errors
- Fix null check error in
kill()#17 - More examples in README.md
- More examples in README.md
- Limit the maximum size of channel packets
- Support session stdin streaming and EOF
- Add remoteVersion field to SSHClient
- Add description field in SSHChannelOpenError
- Update README.md
- Support export keypair to PEM
- Update README.md
- Support loading OpenSSH encrypted pem files.
- Implements local port forwarding
- Implements remote port forwarding
- Implements SFTP client
- More supported algorithms
- Added
dartsftpcommand
- Rework login logic.
dartsshcommand now supports login with public key.
dartsshcommand now supports terminal window resize.
- Add
--verboseoption indartsshcommand.
- Fix typos.
- Organize exports.
- Dependency update.
- Sound null safety.
- Replace deprecated
pedanticwithpackage:lints - Fix crash running vim by @linhanyu. #1
- Increase test coverage and documentation.
- Fix tunneled WebSocket issue.
- Add example/README.md
- Add SSHTunneledSocketImpl, SSHTunneledWebSocketImpl, and SSHTunneledBaseClient.
- Initial release.