Swift.org Blog Cory Benfield Nov 19, 2020

SwiftNIO SSH Implementation

Article Summary

Cory Benfield from Apple's Cloud Services team just open-sourced SwiftNIO SSH, bringing programmatic SSH capabilities to Swift. Think libssh2, not openssh: this isn't a ready-made client, it's the building blocks for something more interesting.

SwiftNIO SSH is a new library that lets Swift developers build custom SSH clients and servers programmatically. Instead of shelling out to command-line SSH, you can now handle SSH connections directly in your Swift code, opening up creative possibilities beyond traditional remote shell access.

Key Takeaways

Critical Insight

Swift developers can now build custom SSH implementations directly into their services without spawning subprocesses or wrapping C libraries.

The article includes a fascinating architecture diagram showing how NIOSSHHandler manages multiple child channels, plus examples of unconventional SSH servers you probably haven't seen before.

About This Article

Problem

Swift developers had no built-in way to implement SSH protocol endpoints. They had to either run openssh as a subprocess or wrap C libraries like libssh2 when they needed service-to-service command invocation.

Solution

Cory Benfield's team at Apple created SwiftNIO SSH, a ChannelHandler that implements SSHv2 protocol logic. It supports session channels, TCP port forwarding, and async authentication delegates without needing external SSH binaries.

Impact

Developers can now write custom SSH servers and clients directly in Swift on any platform that SwiftNIO supports. This opens up possibilities like embedded interpreters and interactive services without the overhead of spawning subprocesses or dealing with C library bindings.