かつて、リモートホストとのファイル転送に利用されていた「rcp」コマンドは、通信内容が暗号化されずそのまま(平文)で送信されるため、安全上の問題がありました。しかし現在では、SSH(Secure Shell)を使う「SCP(Secure Copy)」により、ユーザー認証からデータ転送まで高度なセキュリティを実現できます。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、リモートホストとのファイル転送を安全に実行する「scp」コマンドを紹介します。
なお、本連載では、執筆時点の最新版Red Hat Enterprise Linux(RHEL)およびCentOS環境で動作を確認しています。また、今回の用法事例はIPv4(Internet Protocol version 4)ネットワークを前提にしています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。
データ転送のプロトコルに「SSH(Secure Shell)」を利用し、ファイルコピーを行います。機能としては、リモートシステム間でファイルコピーするためのコマンド「rcp」と同等ですが、SSHによる暗号化を施すことで、ユーザー認証とデータ転送の両方で安全性を確保します。
セキュリティ面はSSHと同等で、認証手順および認証に利用する共通鍵暗号/パスフレーズを共有できます。そのため、利用に際しては「ssh-keygen」コマンドで公開鍵/秘密鍵を作成するなどの準備が必要です。ファイアウオールなどでアクセス制限を設けている場合でも、SSHサーバーが使用するポート(一般的には22番)が開いていれば利用可能です。
基本的な書式は、UNIX系OSで一般的な「cp」および「rcp」コマンドに準じた形式になっています。
オプションを考慮しない場合、最初の引数にコピー元(オリジナル)ファイルを、2番目の引数にコピー先(複製)ファイルを指定して、コマンドを実行します。ただし、コピー元/コピー先にリモートホスト(SSHサーバー)を指定できるところが、cpコマンドと決定的に異なる点です。
なお、同じくSSHを用いたファイルコピーを行うコマンドには「sftp」がありますが、scpはrcpおよびcpコマンドと同等の機能を持つことから、バッチ処理に適しています。sftpと比較すると転送速度で有利とされますが、一方では中断した転送を再開できないというデメリットがありますので留意しておきましょう。
scpコマンドの主なオプションは表1の通りです。
オプション | 意味 |
---|---|
-1 | SSHプロトコルV1を使う |
-2 | SSHプロトコルV2を使う |
-4 | IPv4アドレスのみを使う |
-6 | IPv6アドレスのみを使う |
-B | バッチモード(パスワードを尋ねない) |
-C | データを圧縮する |
-P | 接続するポート番号を指定する |
-c | 暗号方式を指定する |
-i | 秘密鍵ファイルを指定する |
-l | 使用するネットワーク帯域を制限する(単位:Kbps) |
-p | オリジナルの最終修正時刻やパーミッションを保つ |
-r | ディレクトリを再帰的にコピーする |
-v | 冗長表示モード |
手元(ローカル)のファイルをSSHサーバー(リモート)へコピーする場合には、最初の引数にローカルファイル、2番目の引数に「ユーザー名@アドレス:」の形式でリモートホストを指定します。SSHサーバーに公開鍵が登録されている場合はそのまま、未登録の場合はパスワード認証が行われます。
リモートホストのコロン(:)以下には、転送先のディレクトリパスを指定します。コロン以下を省略した場合には、リモートホストのホームディレクトリ直下(Linuxの場合/home/ユーザー名/****)へコピーされます。
以下のコマンド実行例では、「hamster.jpg」というファイルを、「192.168.12.9」のユーザー名「shinobu」のホームディレクトリにコピーしています。
$ scp hamster.jpg shinobu@192.168.12.9: hamster.jpg 100% 2086KB 2.0MB/s 00:00
リモートのファイルをローカルにコピーする場合は、最初の引数に「ユーザー名@アドレス:パス」の形でファイルの所在地を指定し、2番目の引数にローカル側のパスを指定します。ワイルドカードを展開する場合は、「shinobu@192.168.12.9:"~/*.jpg"」のように、コロン以降をダブルクォートでくくります。
以下のコマンド実行例では、「192.168.12.9」のユーザー名「Shinobu」の~/Docs/arc.zipをカレントディレクトリ(.)にコピーしています。
$ scp shinobu@192.168.12.9:Docs/arc.zip . arc.zip 100% 8954 8.7KB/s 00:00
ディレクトリ全体をコピーする場合は、再帰的コピーを行う「-r」オプションを指定します。
以下のコマンド実行例では、再帰的コピーを行うオプション「-r」と、パーミッションを維持したままコピーするためのオプション「-p」を組み合わせ、「192.168.12.9」のユーザー「shinobu」のホームディレクトリ直下にある「PDFs」ディレクトリを、ローカルのカレントディレクトリにコピーしています。
$ scp -pr shinobu@192.168.12.9:PDFs . MF201205_078-081.pdf 100% 3849KB 962.3KB/s 00:04 MF201206_082-085.pdf 100% 4748KB 1.2MB/s 00:04 MF201207_094-097.pdf 100% 3741KB 1.2MB/s 00:03 MF201210_084-089.pdf 100% 2587KB 862.5KB/s 00:03
Copyright © ITmedia, Inc. All Rights Reserved.