1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

Windowsでsftpを使う

ASCII.jp / 2024年12月15日 10時0分

 UNIX由来のコマンドとしてftp(file transfer program、コマンド名は小文字で表記する)がある。これは、FTP(File Transfer Protocol。通常プロトコル名は大文字にする)を利用し、ファイルの転送をするものだ。

 一般的には、ftpクライアントとftpデーモン(ftpdなど デーモンは、バックグラウンドで動作するプログラムでWindowsのサービスに相当する)をFTPで接続して操作する。ファイルシステムは、ftpサーバー側でアクセスするため、クライアントと異なるファイルシステム、たとえば、WindowsとLinuxなどの間でもファイル転送が正しくできる。

 sftp(secure file transfer program)は、SSHが作るクライアントサーバー間の暗号化通信経路を使って、SFTP(Secure File Transfer Protocol)を動かす。

 sftpコマンドは、UNIXのftpを参考にしているため、ほぼ似たコマンド体系を持つ。このため、ftpに慣れたユーザーなら利用に戸惑うことはないだろう。

 SSHでは、当初からscp(secure cp)コマンドが搭載されていた。scpは、UNIXのファイルコピーコマンドであるcpをSSHで暗号化したものだ。ただし、相手はSSHサーバーになる。ローカル内でのscp利用は無意味である。

 以下の表は、sftpの(サブ)コマンドを分類したもの。

SFTP

 sftp/ftpは、起動したのち、サブコマンドを使ってファイル転送操作をする。ただし、ファイルにコマンドを並べた「マクロ」を使うこともできる。ここでは、主要なコマンドのみ解説する。サブコマンドは、大きく、sftpコマンド、ファイル転送コマンド、リモートファイルシステム操作、ローカルファイルシステム操作の4つに分類できる。

SFTPの基本的な使い方

 通常は、sftpコマンドを起動したら、サブコマンドを使って、ファイル転送をする。この操作は、利用できるコマンドがsftpのものに限定されるが、基本的には、bashなどのシェル上でのファイル操作と変わらない。

 sftp内では、ローカル側に対するファイル関連サブコマンド(llsやlcdなど)と、リモート側に対するサブコマンド(lsやcdなど)がある。基本的には、ローカル用サブコマンドは、小文字のL(“l~”)で始まり、リモート側のコマンドには小文字のLは付かない。イメージ的には、リモート側でファイル操作をしており、ローカル側の操作が特別扱いされている。

 なお、ローカル側での操作は、シェルに抜けることができる「シェルエスケープ」機能がある。これにより、ローカル側で、普通にコマンドが利用でき、たとえば、転送前にファイルの整形するなどの操作も可能だ。

 転送は、put(ローカルファイルをアップロード)、get(リモートファイルのダウンロード)コマンドを使う。標準では、サブディレクトリやその中のファイルを含めたディレクトリ構造を転送しない。ディレクトリ構造を転送したい場合には「-R」オプションを指定する。また、-pフラグを指定することで、ファイルのパーミッションと最終更新日時もコピーされる。

 -fフラグを使うことで、ファイルの転送後にfsyncコマンド(ファイルシステムの更新)もしくは同等の機能が起動される。一般にファイルシステム処理は非同期になされるため、ファイルの転送直後のファイル関連の処理(たとえば、lsコマンドや転送したスクリプトの実行など)では、ファイルシステムが更新されておらず、旧ファイルへのアクセスになってしまうことがある。

 fsyncは、非同期で未実行となっている処理を起動し、ファイルシステムを最新状態にする。なお、何らかの原因でput/getコマンドが中断されたとき、reput/regetコマンドで、再開させられる。

sftpを起動する

 sftpコマンド自体に指定する主なオプションを以下の表に示す。

SFTP

 オプションは、IPv4やIPv6利用の強制やマクロファイルの指定などがある。接続先は、SSHと同じく「ユーザー@サーバー」で指定でき、「-A」オプションを使うことで、ssh-agentを使ってログインできる。このあたりは、sshクライアントと同じ。また、いくつかのオプションは、引数がsshクライアントに直接渡される。

 また、リモート側のファイルパスなとが明らかであれば、scpコマンドでファイルが転送できる。慣れているなら、こちらの方がコマンド1行で済むため、効率がいい。前述のように、scpコマンドはsftpを利用して実装されているため、セキュリティ的にも問題はない。

 scpコマンドは、

scp␣[オプション]␣ソースファイル␣ターゲットファイル

とする。ソースファイル、ターゲットは、以下の形式で指定する。

[<ユーザー名>@]<ホスト名>:[<ファイルパス>]

 また、scpコマンドのオプションは、以下の表に示す。

SFTP

 scpはデフォルトでは、SFTPの機能を利用して動作するため、多くのオプションが共通になっている。ただし、古いscpプロトコルを使うこともできる。これは、古いマシンなどで新しいバージョンのsshが利用できない場合などに利用する。

 sshで接続できるホストなら、sftp/scpが必ず利用できる。コマンドラインで実行するため、エクスプローラーなどGUIでリモートファイルシステムをアクセスするよりも高速にファイル転送できる。

 準備としてはsshで接続できるようにしておくだけだ。事前に試しておけば、何かあったときに、高速にファイルコピーができ、助かることがある。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください