データ接続と統合利用可能なコネクターSFTP

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

SFTP

Foundry を SFTP サーバーに接続して、フォルダーと Foundry データセット間でデータを同期します。

サポートされている機能

機能ステータス
探索🟢 一般提供
一括インポート🟢 一般提供
インクリメンタル(差分連携)🟢 一般提供
エクスポートタスク🟡 サンセット(レガシー SFTP ソースのみ)
ファイルエクスポート🟢 一般提供

データモデル

このコネクターは、任意の種類のファイルを Foundry データセットに転送できます。ファイル形式は保持され、転送中や転送後にスキーマが適用されることはありません。データにアクセスするには、出力データセットに必要なスキーマを適用するか、下流のトランスフォームを作成します。

パフォーマンスと制限事項

転送可能なファイルのサイズに制限はありません。ただし、ネットワークの問題により、大規模な転送が失敗することがあります。特に、実行に2日を超える時間がかかる Foundry の同期は中断されます。ネットワークの問題を回避するため、ファイルサイズを小さくし、同期を実行するたびに取り込むファイル数を制限することを推奨します。同期は頻繁に実行するようにスケジュールできます。

セットアップ

  1. Data Connection アプリケーションを開き、画面の右上にある + 新規ソースを選択します。
  2. 利用可能なコネクターの種類から SFTP を選択します。
  3. 以下のセクションの情報を使用し、追加の設定プロンプトに従ってコネクターのセットアップを続けます。

オンプレミスの SFTP サーバーにアクセスするには、Agent プロキシ接続を使用することを推奨します。

Foundry でのコネクターのセットアップについては、詳しくはこちらをご覧ください。

認証

SFTP サーバーへの接続は、パスワードまたは SSL 秘密鍵を使用して確立できます。サーバーへの接続時に問題が発生した場合は、Foundry の外部にある SFTP クライアントから接続を試み、認証情報が正しいことを確認してください。この接続に使用するユーザーには、ルートディレクトリへのアクセス権に加え、ルートディレクトリ内のすべてのファイルとディレクトリを読み取り、一覧表示する権限が必要です。

オプション必須?説明
ユーザー名はいSFTP にログインするためのユーザー名。
パスワードいいえSFTP にログインするためのパスワード。
秘密鍵いいえRSA または OpenSSH 形式の SSL 秘密鍵。指定したユーザー名の認証済みキーとして、SFTP サーバーに公開鍵が正しく設定されている必要があります。

ネットワーク

SFTP 接続が Foundry で実行される場合は、接続を許可リストに登録するためにネットワークエグレスポリシーを適用する必要があります。

エグレスポリシーは、SFTP サーバーのホスト名(ドメイン経由で接続する場合)と、そのホスト名の名前解決先の IP アドレスに対して作成する必要があります。エグレスポリシーを正しく設定しても、ホスト名の検証により、標準の接続ポート (22) 以外では接続できない場合があります。この場合は、この接続に適用されているポリシーの一覧を添えて、Palantir サポートに問題を報告してください。

サーバーのドメインが複数のドメインやサーバーに名前解決される場合は、関連するすべてのドメインとその関連 IP アドレスを許可リストに登録する必要があります。サーバーが複数のドメインやサーバーに名前解決されるかどうかを確認するには、接続先のサーバーについて、ターミナルで dig <domain> コマンドを実行し、回答セクションを確認します。

UNIX マシンでは、次のコマンドを実行して、サーバーのドメインの名前解決先の IP アドレスを確認します。

Copied!
1 dig <domain> +short

Agent がコネクターを実行している場合は、Agent のサーバーが SFTP サーバーへのネットワーク接続を確立できること、およびファイアウォールが適切に設定されていることを確認してください。必要に応じて、netcat ↗ または同様のユーティリティを使用してネットワーク接続を確認することを推奨します。

証明書と秘密鍵

サーバー SSH キー

SFTP サーバーは公開鍵を使用して自身を識別します。このキーは、サーバーの管理者から取得する(推奨)か、対象の SFTP サーバーにネットワーク経由でアクセスできる任意の Linux サーバーで、以下のコマンドを実行して取得できます。

Copied!
1 ssh-keyscan -t rsa -p {port} {hostname} | awk '{print $3}'

このキーは、接続情報ページのホストキーセクションで設定する必要があります。このキーを取得できない場合や、キーが頻繁に変更される場合は、任意のホストキーを受け入れるトグルを使用してキーの検証を無効にできます。ただし、キーの検証を無効にすることは安全ではないため、推奨しません。

ホスト名の検証

Foundry は、すべてのエグレスルートに対してホスト名の検証を試みます。ポート22以外のネットワークトラフィックが検証されない場合があり、その結果、接続が応答しなくなったり、タイムアウトエラーが発生したりすることがあります。エグレスポリシーを適切に設定してもエラーが発生し続ける場合は、ホスト名の検証を無効にしたいポリシーの一覧を添えて、Palantir サポートに問題を報告してください。

設定オプション

オプション必須?デフォルト説明
ホスト名はいサーバーを指すドメイン名、またはサーバーの IP アドレス。
ポートはいSFTP サーバーが稼働しているポート。
ルートディレクトリはいこの接続経由のすべてのリクエストで開始ディレクトリとして使用される、サーバー上のディレクトリ。
ユーザー名はいSFTP のログインユーザー名。
パスワードいいえSFTP のログインパスワード。
秘密鍵いいえRSA または OpenSSH 形式の SSL 秘密鍵。SFTP サーバーでは、指定したユーザー名の認証済み鍵として公開鍵が正しく設定されている必要があります。
ホスト鍵はい詳細は、上記のサーバーの SSH 鍵を参照してください。
すべてのホスト鍵を受け入れるいいえfalse詳細は、上記のサーバーの SSH 鍵を参照してください。
プロキシいいえ直接有効にすると、SFTP へのプロキシ接続が許可されます。
タイムアウトいいえ0詳細は、下記のタイムアウトを参照してください。
最大同時接続数いいえランタイムがサポートする最大並列アップロード数値を大きくすると、通常は転送速度が向上します。ランタイムがサポートする最大並列アップロード数を超える値を設定しても、効果はありません。SFTP サーバーで負荷を管理するためにサーバーへの同時接続数を制限できる場合は、この設定を使用します。
接続設定いいえ詳細は、下記の接続設定セクションを参照してください。
ログいいえ情報記録するログのレベル。レベルを選択すると、そのレベル以上のすべてのログが記録されます。たとえば、エラーレベルを選択すると、エラーと致命的の両方のレベルのログが記録されます。例については、下記のログセクションを参照してください。
拡張機能のネゴシエーションいいえ該当なしこれらの設定は、コネクターが SFTP サーバーに送信する拡張機能のネゴシエーションメッセージを制御します。これらの機能を無効にすると、接続の確立に関する問題が解決する場合があります。詳細なガイダンスは下記を参照してください。

タイムアウト

値が0の場合、接続はサーバーからのすべてのレスポンスを無期限に待ちます。このタイムアウトは、サーバーとの接続の確立時、およびサーバー上で実行する各コマンドに対して、コネクターが待機する時間を制御します。サーバーが応答し続けている場合、タイムアウトは発生しません。小さい値を設定しても大きなファイルの転送は妨げられませんが、応答が停止した接続のデバッグに役立つ場合があります。

接続設定

SFTP 接続を確立する際、サーバーとクライアント(Foundry)の両方で、必要な詳細情報をネゴシエーションする必要があります。この詳細情報には、クライアントとサーバーが使用する暗号化アルゴリズムを決めるための情報が含まれます。互換性の問題により、自動ネゴシエーションに任せるのではなく、これらを手動で設定する必要がある場合があります。以下のテーブルは、必要に応じてネゴシエーションを調整するために使用できる設定オプションの一覧です。詳細は、FAQ ↗を参照してください。

設定説明
鍵交換アルゴリズム鍵交換に使用できるアルゴリズムの明示的なリスト。アルゴリズムを1つ以上選択する必要があります。
暗号暗号化に使用できる暗号のリスト。
メッセージ認証コード (MAC)MAC の種類のリスト。
ホスト鍵の種類この接続に使用できるホスト鍵の種類。
公開鍵の種類公開鍵認証に使用するアルゴリズム。

SFTP からデータを同期する

SFTP コネクターは、ファイルベースの同期インターフェースを使用します。より複雑なシナリオには、コードによる代替アプリケーションを使用します。

トラブルシューティング

Borrowing connection for ls failed

ビルドに失敗して Borrowing connection for ls failed エラーが発生し、エラーに SocketException: Connection reset が含まれている場合は、ビルドログを確認して、SFTP サーバーへのネットワーク接続が確立されているかを調べます。ログに Connection established と Remote version string の行が含まれていない場合は、ファイアウォールが接続ランタイムからの送信トラフィックをブロックしているか、接続先の SFTP サーバーが着信接続を許可していません。ネットワーク接続の問題を解決するには、エグレスポリシーとファイアウォールのルールを確認し、SFTP サーバーの管理者に連絡してください。以下は、接続に成功した場合のログの例です。

jschLogMessage: Connecting to <HOSTNAME> port 2232
jschLogMessage: Connection established
jschLogMessage: Remote version string: <value identifying the type of server>

応答が停止した接続

進行状況の変化も明らかな失敗もないまま接続の応答が停止した場合は、タイムアウトを小さい値(たとえば 1000)に設定して、どの呼び出しで応答が停止しているかを特定しやすくします。たとえば、特定のディレクトリの一覧取得に時間がかかっていたり、ファイルの一部の読み込みに長い時間がかかっていたりする可能性があります。

ホスト名の検証によって接続の応答が停止することがあります。小さいタイムアウト値を設定すると、失敗ログが生成され、サポートチームが接続の問題の根本原因を特定する際に役立ちます。

Agent ワーカー接続 [レガシー]

レガシー

このセクションは、既存のレガシー Agent ワーカーソースにのみ適用されます。

FTP はステートフルなプロトコルであるため、エグレスプロキシのロードバランサーを使用すると、連続するリクエストが同じ IP から送信されない場合に、同期に失敗することがあります(非決定的に発生します)。

SFTP にデータをエクスポートする

コネクターは、Foundry データセットから SFTP サーバー上の任意の場所にファイルをコピーできます。より複雑なシナリオには、コードによる代替アプリケーションを使用します。

SFTP サーバーにエクスポートするには、まず SFTP コネクターのエクスポートを有効にします。次に、新しいエクスポートを作成します。

多くの場合、Foundry はデフォルトでデータセットの実際のファイル名に接頭辞 spark/ を付加します。この接頭辞を持つファイル名を SFTP インスタンスにエクスポートしようとすると、コネクターはデフォルトで spark フォルダーの作成を試みます。Foundry が使用する SFTP ユーザーに、SFTP インスタンス上でフォルダーを作成する権限がない場合、この作成に失敗します。これを防ぐには、エクスポートする前にファイル名を変更します。エクスポート前にファイルパスを書き換える方法の例については、出力ファイル構造の制御に関するドキュメントを参照してください。

コードで SFTP ソースを使用する

より複雑なシナリオでは、コードによる代替アプリケーションを使用して SFTP ソースに接続できます。

以下の例は、外部トランスフォームで Paramiko ↗ Python クライアントを使用して SFTP ソースに接続する方法を示しています。

SFTP にファイルを書き込む

この例は、OpenSSH 秘密鍵認証を使用して、XLSX ファイルのリストを SFTP サーバーに書き込む方法を示しています。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 from transforms.api import Output, Input, TransformOutput, TransformInput, transform from transforms.external.systems import external_systems, Source, ResolvedSource import pandas as pd import paramiko import io @external_systems( sftp_source=Source("<source_rid>") ) @transform( output_file=Output( "<output_dataset_rid>" ), xlsx_files=Input("<input_dataset_rid>"), ) def compute( sftp_source: ResolvedSource, output_file: TransformOutput, xlsx_files: TransformInput, # xlsx ファイルのリストを含む入力データセット ) -> None: # 1. SFTP 接続のセットアップ hostname = "<hostname>" port = <port> # (通常は22) username = "<username>" private_key_string = sftp_source.get_secret("privateKeyString") # 2. 秘密鍵の文字列を paramiko の適切な入力パラメーターに変換します # StringIO を使って文字列をファイルのようなオブジェクトとして扱います private_key_stream = io.StringIO(private_key_string) private_key = paramiko.Ed25519Key.from_private_key(private_key_stream) # 3. SFTP クライアントを定義します transport = paramiko.Transport((hostname, port)) transport.connect(username=username, pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport) # 4. 入力ファイルを順に処理し、それぞれを SFTP にアップロードします remote_paths = [] fs = xlsx_files.filesystem() input_files = fs.ls() for f in input_files: with fs.open(f.path, "rb") as fileobj: # バイナリモードで開きます remote_path = get_remote_path(f.path) with sftp.file(remote_path, "wb") as remote_file: remote_file.write(fileobj.read()) # バイトを直接書き込みます remote_paths.append({"file_name": f.path, "remote_path": remote_path}) # ファイル名とアップロード先パスの対応を記録します # 3. リモートパスのデータセットを返します output_file.write_pandas(pd.DataFrame.from_records(remote_path)) def get_remote_path(file_path): """ ファイルのアップロード先となるリモートパスを定義します。 """ remote_target_folder = "<example_target_folder>" clean_file_path = file_path.replace(" ", "_") return f"{remote_target_folder}/{clean_file_path}"

レガシー SFTP コネクター

以下のセクションでは、レガシー SFTP コネクターについて説明します。このコネクターの既存の利用を維持する場合にのみ参照してください。SFTP ソースを新しく作成する場合は、上記のセクションで説明した手順に従ってください。

新しい SFTP コネクターに移行する

レガシー SFTP コネクターから新しい SFTP コネクターへの移行は自動化されておらず、手動で行う必要があります。新しいコネクターはほぼ同じ設定オプションをサポートしているため、古いソースを置き換える新しいソースを作成する必要があります。

新しいソースを作成する際には、以下の違いがあります。

  • パスワードは古いソースから取得できません。パスワードにアクセスできなくなった場合は、サーバー管理者に依頼する必要があります。
  • privateKeyFile と privateKeyPassphrase はサポートされなくなりました。秘密鍵認証を使用する場合は、秘密鍵の内容をソース設定に直接入力する必要があります。
  • knownHostsFile はサポートされなくなりました。ソース設定で base64HostKey を正しく設定する必要があります。

レガシー SFTP コネクターをセットアップする

レガシー SFTP コネクターをセットアップするには、Data Connection アプリケーションに移動し、+ 新規ソースを選択します。ソース選択画面で詳細まで下にスクロールし、カスタムソースを選択します。設定画面のプロンプトに従って、SFTP コネクターのセットアップを続けます。

SFTP の YAML 設定の完全な例は、次のようになります。

レガシー SFTP ソースの type は magritte-sftp である必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 type: magritte-sftp hostname: my.host.name port: 22 username: username password: '{{password}}' rootDirectory: /home/palantir/sftp base64Hostkey: >- FULL CONTENTS OF THE HOST KEY unsafeAcceptAllHostKeys: false privateKeyFile: location/of/private/key/file privateKeyPassphrase: '{{passphrase}}' proxyConfiguration: host: hostname.of.proxy port: port.of.proxy type: HTTP (can be HTTP/HTTPS/SOCKS) credentials: username: proxyUsername password: `{{proxyPassword}}` timeout: 0 maxConcurrentConnections: 10 sessionParams: customKex: - "ecdh-sha2-nistp256" - "ecdh-sha2-nistp384" knownHostsFile: /path/to/known_hosts_file

レガシー SFTP コネクターでエクスポートする

通常、外部ソースにデータを書き戻すためにエクスポートタスクを使用することは推奨しません。以下のドキュメントは、既存のレガシーエクスポートタスクをサポートすることのみを目的としています。新しいエクスポートはすべて、更新された正式な SFTP コネクターを使用して作成する必要があります。

データをエクスポートするには、エクスポートタスクを設定する必要があります。エクスポート先のコネクターを含むプロジェクトフォルダーに移動します。コネクター名を右クリックし、Data Connection タスクを作成を選択します。

Data Connection の表示の左パネルで、次の操作を行います。

  1. ソース名が、使用するコネクターと一致していることを確認します。
  2. inputDataset という名前の入力を追加します。入力データセットは、エクスポートする Foundry データセットです。
  3. outputDataset という名前の出力を追加します。出力データセットは、タスクの実行、スケジュール設定、監視に使用します。
  4. 最後に、テキストフィールドに YAML ブロックを追加して、タスクの設定を定義します。

左側のパネルに表示されるコネクターと入力データセットのラベルには、YAML で定義した名前は反映されません。

エクスポートタスクの YAML を作成する際は、以下のオプションを使用します。

オプション必須か説明
directoryPathはいファイルの書き込み先ディレクトリです。パスの末尾には / が必要です。
excludePathsいいえ正規表現のリストです。これらの式に名前が一致するファイルはエクスポートされません。
rewritePathsいいえ詳細は以下のセクションを参照してください。
uploadConfirmationいいえ値が exportedFiles の場合、出力データセットにはエクスポートされたファイルのリストが含まれます。
createTransactionFoldersいいえ有効にすると、指定した directoryPath 内のサブフォルダーにデータが書き込まれます。サブフォルダーには、Foundry でエクスポートされるトランザクションごとに一意の名前が付けられます。この名前は、Foundry でトランザクションがコミットされた時刻に基づきます。
incrementalTypeいいえインクリメンタルにビルドされるデータセットでは、incremental に設定すると、前回のエクスポート以降に発生したトランザクションのみがエクスポートされます。
flagFileいいえ詳細はフラグファイルのセクションを参照してください。
spanMultipleViewsいいえtrue の場合、Foundry の複数のトランザクションが一度にエクスポートされます。false の場合、1回のビルドでエクスポートされるのは1つのトランザクションのみです。インクリメンタル(差分連携)が有効な場合、最も古いトランザクションのファイルから順にエクスポートされます。

rewritePaths

最初のキーがファイル名に一致する場合、キーのキャプチャグループは値に置き換えられます。値自体には、ファイル名にメタデータを追加するための追加部分を含めることができます。

値に以下が含まれている場合は、次のように置き換えられます。

  • ${dt:javaDateExpression}:値のこの部分は、ファイルがエクスポートされる時点のタイムスタンプに置き換えられます。javaDateExpression は DateTimeFormatter ↗ のパターンに従います。
  • ${transaction}:値のこの部分は、このファイルを含むトランザクションの Foundry トランザクションIDに置き換えられます。
  • ${dataset}:値のこの部分は、このファイルを含むデータセットの Foundry データセットIDに置き換えられます。

例:

Foundry データセット内の「spark/file_name」というファイルを考えます。このファイルは、ID が transaction_id のトランザクションに含まれ、データセットIDは dataset_id です。キーとして式 fi.*ame を、値として file_${dt:DD-MM-YYYY}-${transaction}-${dataset}_end を使用すると、ファイルは SFTP に書き込まれる際に spark/file_79-03-2023-transaction_id-dataset_id_end として保存されます。

フラグファイル

コネクターは、特定のビルドのすべてのデータがコピーされた後、空のフラグファイルを SFTP サーバーに書き込むことができます。この空のファイルは、内容を利用できる状態になり、以後変更されないことを示します。フラグファイルは directoryPath に書き込まれます。ただし、createTransactionFolders が有効な場合は、内容が書き込まれたフォルダーごとにフラグファイルが作成されます。フラグファイルが有効で、フラグファイルの名前が confirmation.txt の場合、ビルドでエクスポートするファイルが書き込まれた後に、すべてのフラグファイルが一度に書き込まれます。フラグファイルは、サブフォルダーのエクスポート時ではなく、ビルドの最後に書き込まれます。

SFTP サーバー内のファイルがフラグファイルよりも新しい場合、通常は、前回のエクスポートが成功しなかったか、そのフォルダーのエクスポートが進行中であることを示します。

簡単なエクスポート設定の例は、次のとおりです。

Copied!
1 2 type: export-sftp-task directoryPath: export-directory/subdirectory

directoryPath で指定するディレクトリは、SFTP サーバー上にすでに存在している必要があります。パスはルートディレクトリからの相対パスです。たとえば、接続で rootDirectory: /home/palantir/sftp が設定され、directoryPath が export-directory の場合、ファイルは /home/palantir/sftp/export-directory/ にエクスポートされます。

エクスポートタスクを設定した後、右上の保存を選択します。

ログ

探索とビルドのログを表示するには、Data Connections のログタブを選択します。これらのログは、接続の問題のデバッグに役立ちます。詳細を表示するには、jschLogMessage を検索します。

以下のログの詳細は、ログイン試行が成功したことを示しています。

jschLogMessage: Connecting to <HOSTNAME> port 2232
jschLogMessage: Connection established
jschLogMessage: Remote version string: SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u1
jschLogMessage: Local version string: SSH-2.0-JSCH_0.2.12
jschLogMessage: CheckCiphers: chacha20-poly1305@openssh.com
jschLogMessage: CheckKexes: curve25519-sha256,curve25519-sha256@libssh.org,curve448-sha512
jschLogMessage: CheckSignatures: ssh-ed25519,ssh-ed448
jschLogMessage: server_host_key proposal before known_host reordering is: ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-dss,ssh-rsa
jschLogMessage: server_host_key proposal after known_host reordering is: ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-dss
jschLogMessage: SSH_MSG_KEXINIT sent
jschLogMessage: SSH_MSG_KEXINIT received
jschLogMessage: server proposal: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
jschLogMessage: server proposal: host key algorithms: ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
jschLogMessage: server proposal: ciphers c2s: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
jschLogMessage: server proposal: ciphers s2c: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
jschLogMessage: server proposal: MACs c2s: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
jschLogMessage: server proposal: MACs s2c: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
jschLogMessage: server proposal: compression c2s: none,zlib@openssh.com
jschLogMessage: server proposal: compression s2c: none,zlib@openssh.com
jschLogMessage: server proposal: languages c2s:
jschLogMessage: server proposal: languages s2c:
jschLogMessage: client proposal: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,ext-info-c
jschLogMessage: client proposal: host key algorithms: ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-dss
jschLogMessage: client proposal: ciphers c2s: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc
jschLogMessage: client proposal: ciphers s2c: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc
jschLogMessage: client proposal: MACs c2s: hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96
jschLogMessage: client proposal: MACs s2c: hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96
jschLogMessage: client proposal: compression c2s: none
jschLogMessage: client proposal: compression s2c: none
jschLogMessage: client proposal: languages c2s:
jschLogMessage: client proposal: languages s2c:
jschLogMessage: kex: algorithm: curve25519-sha256
jschLogMessage: kex: host key algorithm: ssh-ed25519
jschLogMessage: kex: server->client cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none
jschLogMessage: kex: client->server cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none
jschLogMessage: SSH_MSG_KEX_ECDH_INIT sent
jschLogMessage: expecting SSH_MSG_KEX_ECDH_REPLY
jschLogMessage: ssh_eddsa_verify: ssh-ed25519 signature true
jschLogMessage: Host '[<HOSTNAME>]:2232' is known and matches the EDDSA host key
jschLogMessage: SSH_MSG_NEWKEYS sent
jschLogMessage: SSH_MSG_NEWKEYS received
jschLogMessage: SSH_MSG_SERVICE_REQUEST sent
jschLogMessage: SSH_MSG_EXT_INFO received
jschLogMessage: server-sig-algs=<ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com,webauthn-sk-ecdsa-sha2-nistp256@openssh.com>
jschLogMessage: SSH_MSG_SERVICE_ACCEPT received
jschLogMessage: Authentications that can continue: publickey,keyboard-interactive,password
jschLogMessage: Next authentication method: publickey
jschLogMessage: PubkeyAcceptedAlgorithms = ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa
jschLogMessage: PubkeyAcceptedAlgorithms in server-sig-algs = [ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, rsa-sha2-512, rsa-sha2-256, ssh-rsa]
jschLogMessage: rsa-sha2-512 preauth success
jschLogMessage: rsa-sha2-512 auth success
jschLogMessage: Authentication succeeded (publickey).

上記の例では、サーバーは ssh-ed25519、rsa-sha2-512、rsa-sha2-256、ssh-rsa のホスト鍵アルゴリズムをサポートしています。ssh-ed25519 を使用して接続の問題が発生した場合は、ホスト鍵アルゴリズムの設定を代わりに rsa-sha2-512 に設定できます。

拡張機能のネゴシエーション

SFTP プロトコルでは、クライアントとサーバーの両方がサポートしている場合、クライアントはプロトコルの高度な機能を使用できます。業界標準の SFTP 実装のほとんどでは、拡張機能を有効なままにしておくことを推奨します。ただし、互換性の問題がある場合、拡張機能によって接続が失敗することがあります。Foundry SFTP コネクターでは、必要に応じて拡張機能を無効にできます。一般に、すべての拡張機能を無効にするのではなく、必要最小限の拡張機能だけを無効にすることがベストプラクティスです。