SFTP
SSH File Transfer Protocolを使用した安全なファイル転送です。
YAML設定ファイルの書き方
接続設定は batch.sftp の下に、処理対象ディレクトリやフィルタは batch の直下に書きます。 batch.fileSystem: sftp を書いておけば、サブコマンドなしの lightfile-batch -c job.yaml だけで実行できます(v6.0.10 から)。
--sftp-host(batch.sftp.host)と --sftp-user(batch.sftp.user)は、コマンドラインか設定ファイルのどちらかで必ず指定します。
パスワード認証
ユーザー名とパスワードで認証します。シンプルな接続方法ですが、秘密鍵認証の方がより安全です。
コマンドライン:
lightfile-batch sftp \
--sftp-host sftp.example.com \
--sftp-user myuser \
--sftp-password mypassword \
--sftp-dir /imagesYAML設定ファイル:
batch:
fileSystem: sftp
dir: /images
sftp:
host: sftp.example.com
port: 22
user: myuser
password: mypassword秘密鍵認証(推奨)
SSH秘密鍵を使用した認証です。パスワード認証よりも安全で、サーバー管理で一般的に推奨される方式です。
コマンドライン:
# パスフレーズなしの秘密鍵
lightfile-batch sftp \
--sftp-host sftp.example.com \
--sftp-user myuser \
--sftp-private-key ~/.ssh/id_rsa \
--sftp-dir /images
# パスフレーズ付き秘密鍵
lightfile-batch sftp \
--sftp-host sftp.example.com \
--sftp-user myuser \
--sftp-private-key ~/.ssh/id_rsa \
--sftp-passphrase mypassphrase \
--sftp-dir /imagesYAML設定ファイル:
batch:
fileSystem: sftp
dir: /images
sftp:
host: sftp.example.com
port: 22
user: myuser
privateKeyPath: ~/.ssh/id_rsa
privateKeyPassword: mypassphrase # パスフレーズ付き秘密鍵の場合--sftp-private-key には鍵ファイルのパスを指定します。YAMLでは、鍵ファイルのパスを privateKeyPath に、鍵の中身(PEM文字列)を直接書く場合は privateKey に指定します。
v6.0.8 までの不具合
v6.0.8 までは --sftp-private-key に渡した値を鍵の中身として読んでいたため、鍵ファイルのパスを指定しても認証できませんでした。v6.0.10 で修正しています。それ以前のバージョンでは、YAMLの privateKeyPath を使ってください。
ベースパスと処理対象ディレクトリ
SFTPでは場所を2段階で指定します。
| 指定 | コマンドライン | YAML | 意味 |
|---|---|---|---|
| ベースパス | --sftp-base-path v6.0.10+ | batch.sftp.basePath | 処理の起点。未指定ならログイン直後のディレクトリ |
| 処理対象ディレクトリ | --sftp-dir | batch.dir | ベースパスの下のディレクトリ。この下だけをたどる |
dirはベースパスからの相対パスです。先頭の/は無視されます(/imagesとimagesは同じ)- 指定したディレクトリが存在しない場合は、エラーで止まります
- 処理済みの記録(相対パス)とプロジェクトはベースパスを基準にしています。プロジェクトを決めるURLは
sftp://<user>@<host>:<port><basePath>です。dirを変えても、処理済みの記録はそのまま引き継がれます
コマンドライン:
# /var/www/html/uploads の下だけを処理する
lightfile-batch sftp \
--sftp-host sftp.example.com \
--sftp-user myuser \
--sftp-private-key ~/.ssh/id_rsa \
--sftp-base-path /var/www/html \
--sftp-dir uploadsYAML設定ファイル:
batch:
fileSystem: sftp
dir: uploads
sftp:
host: sftp.example.com
user: myuser
privateKeyPath: ~/.ssh/id_rsa
basePath: /var/www/htmlv6.0.8 までの挙動
v6.0.8 までは --sftp-dir と batch.dir が無視され、ベースパス(未指定ならログイン直後のディレクトリ)の下をすべて処理していました。v6.0.10 から、指定したディレクトリの下だけを処理します。
スキャンの並列数 v6.0.10+
SFTP のスキャンはディレクトリを1つ読むたびにサーバーとの往復を待ちます。ディレクトリが数十万ある木では、直列に読むとスキャンだけで何時間もかかります。v6.0.10 から、既定で4つのディレクトリを並列に読みます。
| コマンドライン | YAML | デフォルト |
|---|---|---|
--sftp-walk-concurrency <n> | batch.sftp.walkConcurrency | 4 |
lightfile-batch sftp \
--sftp-host sftp.example.com \
--sftp-user myuser \
--sftp-walk-concurrency 16YAML設定ファイル:
batch:
fileSystem: sftp
sftp:
host: sftp.example.com
user: myuser
walkConcurrency: 16- サーバーの同時接続や負荷が気になる場合は
1(直列)にしてください - ファイルの処理の並列数(
--concurrency)とは別の値です - 並列で読むので、ファイルを見つける順番は実行ごとに変わります。
--limitで件数を絞ったときに選ばれるファイルも変わることがあります