Swift Digest
Blog | Swift.org Blog

SwiftNIO SSH の発表

Introducing SwiftNIO SSH

このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら

この記事の要点

何が発表されたのか

SwiftNIO SSH は、SSH プロトコルのプログラム的な実装です。すなわち、SSH を話すエンドポイントを実装するための API 群であり、openssh のような完成したクライアント・サーバーではなく、libssh2 のようにそれらを構築するための部品を提供します。

プログラム的な SSH 実装には次のような用途があります。

何に使えるのか

サポートする機能

SwiftNIO SSH は SSHv2 を、次の機能セットでサポートします。

基本的な構造

SwiftNIO SSH は、SSH プロトコルの大部分を実装する ChannelHandler である NIOSSHHandler を提供します。利用者は SSH メッセージを直接生成するのではなく、子チャネル(child channel)とデリゲートを通じて NIOSSHHandler とやり取りします。

SSH は多重化されたプロトコルで、1 つの SSH 接続は「チャネル」と呼ばれる複数の双方向通信路に分割されます。SwiftNIO SSH はこれを「子チャネル」の抽象で表現します。相手が新しい SSH チャネルを作ると、そのチャネル上のすべての通信を表す新しい NIO Channel が作られます。1 つの子 Channel 内ではイベントが厳密に順序付けられますが、異なる Channel 間ではイベントが自由に交錯し得ます。

SSH チャネルにはチャネルタイプが指定されます。SwiftNIO SSH は次の 3 つをサポートします。

SSH チャネルは単一のデータ型 SSHChannelData を扱います。これは SSH の通常データと「拡張」データの両方を表現します。session チャネルでは、通常データ(.channel)が標準入力・標準出力に、拡張データ(.stdErr)が標準エラー出力に対応します。TCP フォワーディングのチャネルでは .channel のみが使われ、フォワードされるデータそのものを表します。

主な仕組み

導入・今後の位置づけ

発表時点でこのプロジェクトはプリリリース段階です。機能は揃っている(feature complete)とされていますが、1.0 をタグ付けする前にしばらく公開の場で様子を見たいという理由から、まだ正式リリースには至っていません。ただし、それまでの間に API の破壊的変更は予定されていないとされています。

SwiftNIO SSH は完全なオープンソースプロジェクトで、GitHub 上で開発されています。議論は Swift フォーラムの server カテゴリで行え、バグ報告・機能要望・プルリクエストは GitHub リポジトリで受け付けています。

関連リンク