バッチなどでファイルのやり取りを安全に実行するには? scpコマンド:ネットワーク管理の基本Tips
かつて、リモートホストとのファイル転送に利用されていた「rcp」コマンドは、通信内容が暗号化されずそのまま(平文)で送信されるため、安全上の問題がありました。しかし現在では、SSH(Secure Shell)を使う「SCP(Secure Copy)」により、ユーザー認証からデータ転送まで高度なセキュリティを実現できます。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、リモートホストとのファイル転送を安全に実行する「scp」コマンドを紹介します。
なお、本連載では、執筆時点の最新版Red Hat Enterprise Linux(RHEL)およびCentOS環境で動作を確認しています。また、今回の用法事例はIPv4(Internet Protocol version 4)ネットワークを前提にしています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。
scpコマンドの概要
データ転送のプロトコルに「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
- 無線LANのパスフレーズを暗号化するには? wpa_passphraseコマンド
- 無線LANにWPAで接続するには? wpa_supplicantコマンド
- このポートで実行中のプロセスはどれ? lsofコマンドの使い方
- ルーティングテーブルの設定をテストするには? routeコマンド
- DHCPサーバーと連携してIPアドレスを設定するには? dhclientコマンド
- NICの無効化/有効化、再起動を行うには? ifdown/ifupコマンド
- SSHサーバーの公開鍵管理を効率化するには? ssh-keyscanコマンド
- サーバーの時刻合わせコマンド、ntpdateはどのサーバーを参照すべき?
- 連番ファイルをダウンロードして他のコマンドに渡すには? curlコマンドの使い方
- 無線LAN接続の設定を操作するには? iwconfigコマンドの使い方
- 端末からアクセスポイントの情報を調べるには? iwlistコマンド
- HTTP/HTTPSでまとめてデータを取得するwgetコマンドとは?
- サーバーリソースのリアルタイム監視ができる便利ツール、dstatコマンドとは?
- SSHを介してファイル転送を行うには? sftpコマンド
- バッチなどでファイルのやり取りを安全に実行するには? scpコマンド
- SSHサーバーにログインするには? sshコマンド
- SSHでリモートホストに接続する前にやっておくと便利なことは? ssh-keygenコマンド
- あのホストまでの経路や通信ボトルネックを調べるには? tracerouteコマンド
- IPアドレスを指定してMACアドレスを調べるには? arpingコマンド
- NetworkManagerをコマンドラインから操作するには? nmcliコマンド
- 「192.168.0.100/24」のネットワークアドレスを即答するには? ipcalcコマンド
- サーバーとの通信状況を確認するには? ネットワークの速度を測るには? pingコマンド
- ネットワークデバイスを設定/状態確認するには? ifconfigコマンド
- MACアドレスを調査するには? arpコマンド
- IPアドレスやホスト名を調べるには? hostコマンド
- netstatコマンドとは?
- DNSサーバーが正常に動作しているかどうか確認するには? digコマンド
Copyright © ITmedia, Inc. All Rights Reserved.