WinSCPからAWS Transfer FamilyのS3にファイル転送時のエラー回避方法を教えて下さい
困っていた内容
AWS Transfer Family の S3 に対して、WinSCP でファイル転送等をしようとした際に下記のようなエラーが表示されます。
解決策を教えて下さい。
エラー
ファイル
ファイル名
のアップロードは成功しましたが、パーミッション/タイムスタンプの設定中にエラーが発生しました。問題が解決しない場合は、パーミッションの設定・タイムスタンプの設定を無効にするか、パーミッション設定時のエラーを無視するように設定してください。
サポートされていない操作です エラー コード: 8 (US-ASCII) からのエラー メッセージ: SETSTAT unsupported
どう対応すればいいの?
AWS Transfer Family にて SETSTAT エラーを回避するために、 ENABLE_NO_OP
を設定してください。
1, 現在ご利用のサーバーが "SetStatOption": "DEFAULT"
になっていることを確認します。
- 【s-SFTPホスト名】には、『s-』から始まる AWS Transfer Family のホスト名へ変更してください。
実行するコマンド
aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails
実行例
$ aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails { "PassiveIp": "AUTO", "TlsSessionResumptionMode": "ENFORCED", "SetStatOption": "DEFAULT" }
2, SETSTATコマンドを無効化します。
実行するコマンド
aws transfer update-server --server-id 【s-SFTPホスト名】 --protocol-details SetStatOption=ENABLE_NO_OP
実行例
$ aws transfer update-server --server-id 【s-SFTPホスト名】 --protocol-details SetStatOption=ENABLE_NO_OP { "ServerId": "【s-SFTPホスト名】" }
3, SETSTATコマンドが無効化されているかを確認します。
"SetStatOption": "ENABLE_NO_OP"
になっていれば変更完了です。
実行するコマンド
aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails
実行例
$ aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails { "PassiveIp": "AUTO", "TlsSessionResumptionMode": "ENFORCED", "SetStatOption": "ENABLE_NO_OP" }
再度、WinSCPで AWS Transfer Family の S3 にファイルをアップロードすると回避されている事を確認し、以上で設定変更の完了です。
原因
setstatエラーを回避 - クライアントを使用してファイルを転送する
一部の SFTP ファイル転送クライアント(WinSCP等)は、ファイルをアップロードする場合に、SETSTAT などのコマンドを使用して、タイムスタンプやアクセス権限などを含んだリモートファイルの属性を変更しようとすることがあります。
ただし、これらのコマンドは Amazon S3 などのオブジェクトストレージシステムと互換性がありません。
この非互換性が原因で、これらのクライアントからファイルをアップロードする際に、ファイルが正常にアップロードされた場合でもエラーが発生する可能性があります。
Q&A
Q, 設定変更後は、再起動の必要はありますか? A, いいえ。不要です。
Q, 設定を戻すには、どうしたら良いですか? A, 下記コマンドを実行で戻すことが可能です。
aws transfer update-server --server-id 【s-SFTPホスト名】 --protocol-details SetStatOption=DEFAULT