scp コマンドは、SSH を利用して リモートサーバとローカル間で安全にファイルをコピー するコマンドです。cp のような感覚で使えるため、サーバへのファイルアップロードやログのダウンロード、バックアップ取得によく使われます。
scpとは
scp は「secure copy」の略で、SSH の暗号化通信を使ってファイルを転送する OpenSSH 標準のコマンドです。パスワードや秘密鍵で認証したあと、通信内容が暗号化された状態でファイルがやり取りされるため、FTP のような平文プロトコルより安全にサーバ間コピーができます。
基本構文
scp [オプション] [コピー元] [コピー先]
コピー元・コピー先のどちらかを [ユーザー名@]ホスト名:パス の形式で指定するとリモートのファイルを表し、その形式を使わなければローカルのパスとして扱われます。
よく使う3パターン
① ローカル→リモートへコピー
scp file.txt user@example.com:/home/user/
ローカルの file.txt をリモートの /home/user/ にコピーします。
② リモート→ローカルへコピー
scp user@example.com:/var/log/syslog ./syslog
リモートの /var/log/syslog をカレントディレクトリに syslog として保存します。
③ ディレクトリごと転送(-r)
scp -r website/ user@example.com:/var/www/html/
-r オプションを付けると、ディレクトリの中身をまとめて再帰的にコピーできます。
よく使う操作 早見表
| やりたいこと | コマンド |
|---|---|
| ローカル→リモートへコピー | scp file.txt user@host:/path/ |
| リモート→ローカルへコピー | scp user@host:/path/file.txt ./ |
| ディレクトリごとコピー | scp -r dir/ user@host:/path/ |
| ポートを指定してコピー | scp -P 2222 file.txt user@host:/path/ |
| 秘密鍵を指定してコピー | scp -i ~/.ssh/id_rsa file.txt user@host:/path/ |
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-P PORT | 接続ポートを指定(デフォルト:22) | scp -P 2222 file.txt user@host:/tmp/ |
-i KEY | 秘密鍵ファイルを指定 | scp -i ~/.ssh/id_rsa file.txt user@host:/tmp/ |
-r | ディレクトリを再帰的にコピー | scp -r project user@host:/var/www/ |
-p | タイムスタンプ・パーミッションを保持 | scp -p file.txt user@host:/tmp/ |
-v | 詳細なデバッグ出力 | scp -v file.txt user@host:/tmp/ |
-C | 圧縮転送を有効化 | scp -C largefile.iso user@host:/tmp/ |
-q | 進行状況などを非表示にする | scp -q file.txt user@host:/tmp/ |
-o OPTION | ssh の接続オプションを指定 | scp -o StrictHostKeyChecking=no file.txt user@host:/tmp/ |
-4 / -6 | IPv4 / IPv6 を強制 | scp -4 file.txt user@host:/tmp/ |
上書き時の注意: scp は転送先に同名ファイルがあっても確認なしに上書きします。cp -i のような上書き確認オプションはないため、重要なファイルを転送する前は -p で日時を保持しつつバックアップを取る、または転送先のファイル名を変えるようにしてください。
応用的な使い方
複数ファイルをまとめて転送
scp file1.txt file2.txt user@example.com:/home/user/
スペース区切りで複数のファイルを一度に転送できます。
ワイルドカードでまとめて転送
scp *.log user@example.com:/var/log/backup/
ワイルドカードを使って、パターンに一致するファイルをまとめて転送できます。
ファイル名を変更しながらコピー
scp file.txt user@example.com:/home/user/renamed.txt
転送先にファイル名を指定することで、コピーと同時にリネームできます。
ポート指定してコピー
scp -P 2222 file.txt user@example.com:/tmp/
秘密鍵を指定してコピー
scp -i ~/.ssh/id_rsa backup.sql user@example.com:/home/user/
圧縮して高速転送
scp -C bigfile.iso user@example.com:/tmp/
リモートサーバ間でコピー
scp user1@host1.example.com:/data/file.txt user2@host2.example.com:/backup/
ローカルを経由してリモートサーバ間のファイル転送もできます。
エラー対処
エラー例(ホストが間違っている・接続拒否)
scp file.txt user@wronghost:/tmp/
出力例:
ssh: connect to host wronghost port 22: Connection refused
lost connection
ホスト名やIPアドレスの指定ミス、サーバ側のSSHサービス停止、ファイアウォールでのポート22ブロックが主な原因です。
エラー例(認証に失敗する)
scp file.txt user@example.com:/home/user/
出力例:
user@example.com: Permission denied (publickey,password).
ユーザー名や秘密鍵の指定ミス、鍵の権限(chmod 600)が原因になりがちです。原因の切り分け方はSSH接続できないときのチェックリストで詳しく解説しています。
エラー例(パス指定ミス)
scp file.txt user@example.com:/no/such/dir/
出力例:
scp: /no/such/dir/: No such file or directory
転送先のディレクトリが存在しない、またはタイプミスしている場合に発生します。scp はディレクトリを自動作成しないため、事前に ssh user@host mkdir -p /path/ などでディレクトリを用意しておく必要があります。
scp・rsync・sftp の使い分け
scp はシンプルな1回限りのファイルコピーに向いていますが、用途によっては rsync や sftp の方が適しています。
| scp | rsync | sftp | |
|---|---|---|---|
| 用途 | 1回限りのファイルコピー | 定期的な差分同期・バックアップ | 対話的なファイル操作(閲覧・削除・リネーム含む) |
| 差分転送 | なし(常に全体転送) | あり(変更分だけ転送) | なし(都度指定したファイルを転送) |
| 転送の再開 | 不可 | 可能(--partial) | 可能(reput 等、クライアント依存) |
| 対話操作 | 不可 | 不可 | 可能(ls・cd・rm などをその場で実行) |
| 構文のシンプルさ | 高い | やや複雑 | 普通(FTPに近い操作感) |
大きなディレクトリの同期や差分更新が必要な場合は rsync、リモートのファイルを対話的に探索・整理したい場合は sftp を検討してください。なお scp のプロトコル自体は非推奨とされているため、スクリプトでの継続利用を前提とする場合は rsync や sftp への移行も視野に入れておくと安心です。
よくある質問(FAQ)
1回限りのファイルコピーなら scp で十分です。定期的な同期やバックアップ、差分だけ転送したい場合は rsync が適しています。
-r オプションを付けて scp -r ディレクトリ user@host:/path/ のように実行します。中身が多い場合は圧縮転送の -C を併用すると速くなることがあります。
OpenSSH の scp プロトコル自体は非推奨とされていますが、多くのディストリビューションでは SFTP プロトコルへ自動的に切り替えて動作するため、通常の利用では引き続き使えます。ワイルドカード展開などスクリプトの挙動に依存する場合は、今後を見据えて rsync や sftp への移行も検討してください。詳しくはscp を使ってきた人向け|今後は SFTP・rsync を選ぶ理由で解説しています。
大きなファイルを転送するときは -C オプションで圧縮転送を有効にすると速くなる場合があります。頻繁に同期する用途では、差分転送ができる rsync の方が総合的に高速です。
はい、確認なしに上書きされます。cp -i のような上書き確認オプションは無いため、重要なファイルを上書きする前は事前にバックアップを取るか、コピー先でファイル名を変更してください。
関連コマンド
ssh: リモートサーバへ安全に接続するコマンドsftp: SSH を利用した FTP ライクな対話型ファイル転送コマンドrsync: 差分転送や再開機能に優れたファイル同期ツール。SSH経由での安全な同期が可能。cp: ローカルファイルコピー
備考
scpは OpenSSH に含まれていますが、最近はより柔軟なrsyncやsftpの利用が推奨される場合もあります。-rを使うときは誤操作でディレクトリ全体を上書きしないように注意が必要です。- 転送速度やネットワーク負荷を考慮するなら
rsync -avzの方が効率的な場合があります。
参考
- manページ: man7.org scp(1)
- OpenSSH: https://www.openssh.com/

コメント