SCPとSFTPの違い

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回は、SCPとSFTPの違いについて紹介したいと思います。
日頃、webサーバなどを運用する際に、FTPクライアントソフトなどを使用して、
ファイルをアップロードする機会が多いかと思います。

しかし、FTPはデータを送信する際に、データが暗号化されないため、
セキュリティ的には、よくありません。

そのため、最近では「WinSCP」などのクライアントソフトを用いて、SCPやSFTPプロトコルで
ファイル転送を行うことが多いかと思います。
また、サーバ間でのファイルのやりとりに、SCPコマンドなどを使用されることも多いかと思います。

普段何気に、クライアントソフトを使っていると、あまり深く考えずに、SCPやSFTPを
使用しているかと思いますが、FTPと違うことはなんとなくわかるけれども、そもそも、
「SCPやSFTPって何が違うのか」、一度は疑問を持たれた方もいるのではないでしょうか。

両者の違いについては、以下のサイトでわかりやすく紹介されています。

http://www.atmarkit.co.jp/ait/articles/0606/27/news135_2.html
共通する点としては、以下になります。

【共通点】

・SSHプロトコルを使用している。
…そのため、サーバへのアクセスに対して、Firewallなどでポートフィルタリングで制限を掛けていても、
22番ポートが開いていれば、アクセス可能です。

・SSHを使用しているので、認証情報とデータの両方が暗号化される。
…セキュリティが確保されます。

・パスワード認証だけでなく、秘密鍵を用いての通信が可能
・GUIベースのクライアントソフト、コマンドベースのどちらでも使用可能。
異なる点としては、主なものは以下になります。

【相違点】

◆SCP
・転送の再開ができない。
・SFTPに比べて高速(と言われている)
・フォルダの送信はできない。(クライアントソフトを用いれば可能)

◆SFTP
・転送を中断しても、途中から再開できる。
・SCPよりも転送速度が遅い
また、両者ともOpenSSHサーバの機能を使用しますが、使用するためには、以下の設定が必要です。

【必要な設定】

◆SCP
・Linux OSのクライアント側でSCPを実行するには、openssh-clientsが必要になります。
「yum install openssh-clients」などでインストールします。

◆SFTP
・SSHサーバ(OpenSSH)で、以下の設定が有効になっている必要があります。
「/etc/ssh/sshd_config」に以下の記述が必要です。

Subsystem sftp /usr/libexec/openssh/sftp-server
…コメントアウトすると無効になります。
両者とも、コマンドベースで使用可能ですが、使い方は異なります。

【使用方法】

◆SCP
…基本的に、送信元と送信先を指定して、ファイルを送信するイメージになります。

書式1:scp コピー元ファイル [ユーザ名@] コピー先ホスト:[コピー先ファイル名]

書式2:scp [ユーザ名@]コピー元ホスト:コピー元ファイル名 コピー先ファイル名

【主なオプション】
-P…パーミッションなどを保持したままコピーする。
-r…ディレクトリ内を再帰的にコピーする。
-i…公開鍵認証用の秘密鍵ファイルを指定する

使用例:# scp /etc/hosts sv3.example.jp:/tmp
…ローカルホストの/etc/hostsを、リモートホストのsv3.example.jpの/tmp以下にコピーする。

使用例:# scp sv3.example.jp:/etc/hosts .
…リモートホストsv3.example.jpの/etc/hostsを、カレントディレクトリにコピーする。

使用例:# scp data.txt fred@sv3.examle.jp:
…リモートホストsv3.example.jpのfredユーザのホームディレクトリに、ローカルホストの
data.txtファイルをコピーしている。

 

◆SFTP
…FTPのように、SFTPサーバへログインして、ファイルを送信したり、受信したりできます。
リモートホストの操作が可能なため、サーバ上のディレクトリを移動したり、特定のディレクトリ内に
どんなファイルが存在するのか、確認することができます。

書式:sftp [オプション] [ログイン名]@[ホスト名]

【主なオプション】
-b バッチファイル…バッチファイルに記述したコマンドでファイルを転送する。
-i 秘密鍵ファイル…秘密鍵ファイル(identityファイル)を指定する。
-l 制限…ファイル転送に使用する帯域を制限します。Kbit/sで指定する。
-o…ssh形式(ssh_config)のオプションを指定します。例えば、ポート番号は「sftp -oPort=24」で指定する。
-1…SSHのプロトコルバージョン1を使用する。
-2…SSHのプロトコルバージョン2を使用する。
-4…IPv4を使用する。
-6…IPv6を使用する。

使用例:# sftp root@192.168.0.1
Connecting to 192.168.0.1…

root@192.168.0.1’s password:
sftp>
…サーバにログインして使用します。

使用例:sftp> lls
Desktop Maildir anaconda-ks.cfg epel-release-5-4.noarch.rpm install.log ins
…リモートホストのディレクトリ内の確認が可能です。

使用例:sftp> put test1.txt
…クライアントからリモートマシンへtest1.txtを転送します

使用例:sftp> get test2.txt
…リモートマシンからtest2.txtを取得します

使用例:sftp> quit
…sftpコマンドを終了します

■参考
http://ameblo.jp/null-hogehoge/entry-11512489358.html
http://d.hatena.ne.jp/tako222/20090811/1249991947
http://www.atmarkit.co.jp/ait/articles/0606/27/news135_2.html
http://cns-guide.sfc.keio.ac.jp/2004/2/6/3.html

sftp – 安全なファイル転送 – Linuxコマンド


以上