JSchライブラリ(または実際にはそのsharpSSH C#ポート)を使用して、SFTPの公開鍵クライアントおよびサーバー認証を設定することを検討しています。残念ながら、キー読み込み機能で使用されるファイル形式のドキュメントが見つかりません。
jsch.addIdentity(filename, passphrase);
jsch.setKnownHosts(filename);
秘密鍵と既知のhostsファイルで使用されるファイル形式は何ですか?
JSch は OpenSSH鍵ファイル形式を使用します (公開鍵と秘密鍵の両方)。この形式の仕様は見つかりませんでしたが、OpenSSH のssh-keygenツールを使用して、キーを他の形式との間で変換できます (Google は、さらに多くの形式との間で変換する他のツールを表示します)。
更新: OpenSSH メーリング リストで質問し、いくつかの RFC を読んだ後、OpenSSH の公開鍵ファイルには (バージョン 2 鍵の場合) RFC 4253 (セクション 6.6)で指定されている公開鍵が含まれているように見えます。接頭辞としてキー タイプ、接尾辞としてコメント フィールド)。秘密鍵ファイルの仕様はまだ見つかっていません。
残念ながら、JSch の公式ドキュメントはほとんど存在しませんが、私はそのためのJavadocをいくつか書きました。(キーファイル形式について言及していないようですが...これを修正する必要があります。) JSch Wikiには、公開鍵認証に関するページを含むマニュアルもあります(キー形式についても言及されていません)。まだ :-/)。
既知のホスト ファイルも、OpenSSH クライアントの対応するファイルと同じ形式です。その形式は、OpenSSH の sshd マニュアル ページのセクションSSH KNOWN HOSTS FILE FORMATで説明されています。
これらのファイルの各行には、次のフィールドが含まれます: マーカー (オプション)、ホスト名、ビット、指数、モジュラス、コメント。フィールドはスペースで区切られます。
これは、実際には SSH 1 RSA キーに対してのみ正しいです。SSH 2 キーの場合、タイプ識別子 ( ecdsa-sha2-nistp256
、ecdsa-sha2-nistp384
、ecdsa-sha2-nistp521
、ssh-dss
またはssh-rsa
) と、base-64 でエンコードされた形式のキーがあります。(承認されたキーファイルについては、同じマニュアルページの少し上を参照してください)。(JSch は DSA および RSA キー形式のみをサポートし、ECDSA はサポートしていないと思います。)
これらのファイルの行は通常、数百文字の長さであり、ホスト キーを手動で入力したくないことに注意してください。代わりに、スクリプト ssh-keyscan(1) を使用するか、/etc/ssh/ssh_host_key.pub を取得して先頭にホスト名を追加することにより、それらを生成してください。ssh-keygen(1) は ~/.ssh/known_hosts の基本的な自動編集も提供します。これには、ホスト名に一致するホストの削除や、すべてのホスト名のハッシュ表現への変換が含まれます。