2.18.5 SFTPアダプタとSFTPサーバ間の通信
SFTPアダプタとSFTPサーバ間の通信について説明します。
(1) SFTPサーバとの接続
SFTPサーバとの接続では,SFTPアダプタはSFTPサーバに対してセッション接続を要求します。セッション接続では次の処理が実行されます。
-
アルゴリズムネゴシエーション
-
ホスト認証
-
ユーザ認証
セッション接続は,リクエストごとに接続または切断をし,ほかのリクエストで再利用をしません。
以降で,セッション接続時の処理について説明します。
(a) アルゴリズムネゴシエーション
暗号化通信路の確立のために,次の情報のリスト(以降,アルゴリズムのリストと呼びます)をSFTPアダプタとSFTPサーバ間で交換します。
-
鍵交換方式
-
共通鍵暗号方式
-
メッセージ認証コード
-
ホスト認証の方式
-
圧縮アルゴリズム
SFTPアダプタがサポートするアルゴリズムのリストを次に示します。
種別 |
アルゴリズムのリスト |
---|---|
鍵交換方式 |
|
共通鍵暗号方式 |
|
メッセージ認証コード |
|
ホスト認証の方式 |
|
圧縮アルゴリズム |
|
使用されるアルゴリズムは,クライアントから送信されたリストを先頭から順に参照し,サーバのリストに存在するものが選ばれます。
暗号の優先順位は,上記の表の記載順となります(上位にあるほど優先順位が高い)。
アルゴリズムの優先順位は,SFTPアダプタ実行環境プロパティファイルで入れ替えることができます。
(b) ホスト認証
ホスト認証とは,サーバのなりすましを判断するための認証です(クライアント側でサーバの正当性を確保します)。
ホスト認証では厳格なホスト公開鍵チェックをすることによって,接続先が目的のサーバであるかどうかを検証できます。
- ●厳格なホスト公開鍵チェックをする場合
-
SFTPアダプタのホスト認証は,ホスト公開鍵が記載されたファイル(以降,ホスト公開鍵ファイルと呼びます)を使用します。
SFTPサーバから受け取ったホスト公開鍵とSFTPアダプタ実行環境プロパティファイルで設定したホスト公開鍵を比較し,ホスト公開鍵が存在しない場合や,ホスト公開鍵が変更されている場合はエラーになります。
ホスト認証の定義手順については,「2.18.9(1) ホスト認証の認証情報の定義手順」を参照してください。
- ●厳格なホスト公開鍵チェックをしない場合
-
ホスト公開鍵のチェックをしません。
(c) ユーザ認証
ユーザ認証とは,クライアントが指定したユーザがサーバにログインできるかをサーバ側が確認するための認証です。SFTPアダプタでは,ユーザ認証を省略することはできません。
SFTPアダプタでサポートするユーザ認証を次に示します。
- ●パスワード認証
-
SFTPサーバが存在するマシンのユーザ名とパスワードを使用して認証をします。
パスワード認証の定義手順については,「2.18.9(2) パスワード認証の認証情報の定義手順」を参照してください。
- ●公開鍵認証
-
公開鍵・秘密鍵を使用した公開鍵暗号方式で認証をします。
公開鍵認証の定義手順については,「2.18.9(3) 公開鍵認証の認証情報の定義手順」を参照してください。
使用できる公開鍵・秘密鍵の条件を次に示します。
- ●公開鍵・秘密鍵の種類
-
次のどれかである必要があります。
-
DSA
-
RSA
-
ECDSA
-
- ●公開鍵・秘密鍵の鍵長
-
次の条件を満たしていない場合,動作は保証されません。
-
RSAの場合の鍵長は,2048バイトまたは4096バイトのどちらか
-
ECDSAの場合の鍵長は,256バイト以下
-
- ●パスフレーズを設定した秘密鍵の暗号化
-
秘密鍵は次に示すどれかの共通鍵暗号方式で暗号化されていなければなりません。
-
3des-cbc
-
aes128-cbc
-
aes192-cbc
-
aes256-cbc
上記以外の共通鍵暗号方式で暗号化した場合は動作は保証されません。
-
- ●公開鍵・秘密鍵の形式
-
次のどちらかである必要があります。
-
OpenSSL's PEM format
鍵ファイルのヘッダが,「-----BEGIN RSA」,「-----BEGIN DSA」,「-----BEGIN EC」のどれかで始まる形式
-
PKCS#8形式
「-----BEGIN PRIVATE」で始まる形式
なお,パスフレーズを設定したPKCS#8形式の秘密鍵は使用できません。使用した場合,動作は保証されません。
-
(2) ファイル転送のパターン
SFTPアダプタで実行可能なファイル転送のパターンを次に示します。
-
SFTPアダプタからSFTPサーバへのファイル転送
-
SFTPサーバからSFTPアダプタへのファイル転送
-
SFTPサーバのファイルリストの取得
以降で,それぞれのパターンについて説明します。
(a) SFTPアダプタからSFTPサーバへのファイル転送
SFTPアダプタからSFTPサーバへファイルを転送します。
1リクエストで転送できるファイルは1つだけで,ディレクトリ単位での転送や複数のファイルの転送はできません。
また,転送先にすでにファイルがある場合は上書き,または追記をします。
要求電文のoverwrite-data要素の値がtrueの場合は上書きを,要素の値がfalseの場合は追記をします。
ファイル転送に失敗した場合,SFTPアダプタは後処理として転送先のファイルは削除しません。そのため,転送先のファイルが削除されるかどうかはSFTPサーバに依存します。
(b) SFTPサーバからSFTPアダプタへのファイル転送
SFTPサーバからSFTPアダプタへファイルを転送します。
1リクエストで転送できるファイルは1つだけで,ディレクトリ単位での転送や複数のファイルの転送はできません。
また,転送先にすでにファイルがある場合は上書きをします。
ファイル転送に失敗した場合,後処理としてローカル側のファイルの削除を試みます。
(c) SFTPサーバのファイルリストの取得
SFTPサーバのファイル情報の一覧,またはファイル名一覧を取得します。
ファイル情報とファイル名のどちらの一覧を取得するかは,要求電文で指定します。
また,取得対象は要求電文で指定し,ディレクトリを指定した場合はディレクトリ配下のファイルの情報を,ファイルを指定した場合は該当するファイルの情報を取得します。
ファイル情報の一覧,またはファイル名一覧の取得結果は応答電文に格納し,ファイルへは出力しません。
ファイル情報の一覧取得では,取得したファイルごとに応答電文に格納されます。
応答電文に格納されるときのフォーマットを次に示します。
パーミッション ユーザ識別子 グループ識別子 ファイルサイズ(バイト) 更新時刻 ファイル名
ファイルへは,各項目を空白区切りで出力します。
ファイルへの出力例を次に示します。
-rw-r--r-- 0 0 9936 Thu Oct 16 05:28:47 JST 2018 data1
(3) SFTPアダプタが実行するコマンド
SFTPアダプタが実行するコマンドは,次の2つに大別できます。
-
SFTPアダプタのオペレーションに対応するSFTPコマンド
-
ユーザが要求電文に指定するユーザ指定のSFTPコマンド
次に,それぞれのSFTPコマンドについて説明します。
(a) SFTPアダプタのオペレーションに対応するSFTPコマンド
オペレーションに対応するSFTPコマンドは,SFTPアダプタが要求電文から実行するオペレーションを自動的に判別して実行します。
SFTPアダプタが自動的にSFTPコマンドを実行するため,ユーザはコマンドの書式を考慮する必要はありません。
SFTPアダプタのオペレーションに対応するSFTPコマンドの一覧を次に示します。
コマンド名 |
説明 |
対応するオペレーション |
---|---|---|
get |
リモートマシンのファイルをローカルマシンにダウンロードします。 |
GETオペレーション |
ls |
リモートマシン上のファイル一覧またはファイル名一覧を取得します。 |
GETINFOオペレーション |
put |
ローカルマシンのファイルをリモートマシンにアップロードします。 |
PUTオペレーション |
(b) ユーザが要求電文に指定するユーザ指定のSFTPコマンド
ユーザ指定のSFTPコマンドは,要求電文のsftp-commands-beforeおよびsftp-commands-afterに実行指示がある場合だけコマンドが実行されます。
ユーザは,コマンドの機能および書式を考慮した上で,要求電文にSFTPコマンドを指定する必要があります。
ユーザ指定のSFTPコマンドの一覧を次に示します。
コマンド名 |
コマンドの形式 |
説明 |
---|---|---|
cd |
cd <変更先のディレクトリのパス>※ |
リモート側のカレントディレクトリを変更します。 cdコマンドで変更したカレントディレクトリは,再度cdコマンドを実行するか,リクエストが終了するまで有効です。 |
mkdir |
mkdir <作成するディレクトリのパス> |
リモートマシン上にディレクトリを作成します。 |
rename |
rename <変更前のファイルのパス> <変更後のファイルのパス> |
リモートマシン上のファイルの名前を変更します。 |
rm |
rm <削除するファイル名> |
リモートマシン上のファイルを削除します。 |
rmdir |
rmdir <削除するディレクトリ名> |
リモートマシン上のディレクトリを削除します。 ディレクトリ配下が空の場合だけ削除できます。 |
- 注※
-
接続先がWindows上のSFTPサーバの場合は,マルチバイト文字を含むディレクトリ名を変更先のディレクトリのパスに指定しないでください。指定した場合の動作は保証されません。
- 注意事項
-
-
コマンドの形式に誤りがある場合,SFTPアダプタは例外を通知します。
-
複数のコマンドを指定する場合,半角のセミコロン(;)で区切ってください。
-
複数のコマンドを指定した場合,先頭から順にコマンドを実行します。
-
コマンド引数は,半角の空白区切りで指定してください。
-
コマンド引数の区切りに使用する空白と,コマンドの区切りに使用するセミコロン(;)は,コマンド引数に指定できません。指定した場合の動作は保証されません。
-
コマンド引数の内容については,SFTPアダプタでチェックされません。
-
(4) 転送データの圧縮
SFTPアダプタは,データを圧縮して転送できます。
転送データの圧縮は,要求電文またはSFTPアダプタ実行環境プロパティファイルのどちらかで指定できます。要求電文フォーマットの作成方法については,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「3.3.15 SFTPアダプタを定義する」の電文フォーマットの作成に関する説明を参照してください。SFTPアダプタ実行環境プロパティファイルで設定できる項目の詳細は,マニュアル「サービスプラットフォーム リファレンス」の「6.16.1 SFTPアダプタ実行環境プロパティファイル」を参照してください。
- 注意事項
-
データを圧縮して転送する場合,転送速度が低下することがあります。