セキュアなファイル転送方法にscpとsftpがある. 両者には一長一短あるが,最大の違いはファイル転送途中で中断された際の対処である. scpは再度始めからデータを転送し直す必要があることに対し,sftpは中断前の状態,すなわち転送半ばの状態から転送を再開できる点だ.今回はsftpコマンドでファイルを転送する際の,中断,再開をした時の挙動を確認した.

概要


セキュアにファイルのやりとりをする方法にはscpとsftpがある. 近年,scpは非推奨とのことでsftpが推奨されているが,主にこの二つの違いは以下の点である

  • scp … 機能が少なく軽量.ファイル転送中に通信が途切れた際には途中再開ができない
  • sftp … 機能が豊富,ファイル転送途中に通信が途切れても,途中から転送の再開が可能

ファイルのサイズがそれなりに大きいと,転送途中で通信が途切れると悲しいことこの上ない. 恥ずかしながらこれまでサーバー作業におけるファイルの転送はscpで事足りており,sftpを触る機会がほぼなかったが,最近仕事でsftpサーバーを立てる必要が出たため,scpと比べ秀でている点であるファイル転送の中断,再開を試すことにした.

環境


  • Ubuntu 18.04 LTS

目的


sftpでファイル転送を中断,再開した際にファイル転送が中断前から再開されることを確認する.

確認


転送ファイルの作成

転送するファイルを作成する.試しに10GBのファイルを用意する.

# dd if=/dev/zero of=test10g bs=1M count=10240

sftpサーバーの構築

このサイトを参考にサーバーを立て,用意したファイルをsftpで接続するユーザーのホームディレクトリに配置する.

ファイルの転送と中断,再開の様子

実際にファイルの転送を転送途中で中断させ,再開する.

sftp guestuser@localhost

sftp> ls 
--> test10gがあることを確認

sftp> get test10g
Fetching /incoming/test10g to test10g
/incoming/test10g                                               0%  263MB 262.5MB/s   00:38 ETA
...
...
...
/incoming/test10g                                               12%  353MB 261.3MB/s   00:37 ETA

--> Ctrl + Cで中断する
^Interrupt

sftp> reget test10g
Resuming /incoming/test10g to test10g
/incoming/test10g                                              13% 1393MB 256.2MB/s   00:34 ETA

途中で中断した際のファイル転送再開はregetコマンドを使用する.ちなみにgetコマンドの場合は最初から転送になるので注意する.見ての通り,regetコマンドを使用するとResumingのメッセージとともに転送が再開されていることが分かる.

まとめ


大きなファイルを転送する際には通信のトラブルで時間を無駄にしないよう,sftpを用いると幸せになれる.

参考