scp コマンド|SSH を利用したファイル転送

コマンドリファレンス

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 OPTIONssh の接続オプションを指定scp -o StrictHostKeyChecking=no file.txt user@host:/tmp/
-4 / -6IPv4 / 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回限りのファイルコピーに向いていますが、用途によっては rsyncsftp の方が適しています。

scprsyncsftp
用途1回限りのファイルコピー定期的な差分同期・バックアップ対話的なファイル操作(閲覧・削除・リネーム含む)
差分転送なし(常に全体転送)あり(変更分だけ転送)なし(都度指定したファイルを転送)
転送の再開不可可能(--partial可能(reput 等、クライアント依存)
対話操作不可不可可能(lscdrm などをその場で実行)
構文のシンプルさ高いやや複雑普通(FTPに近い操作感)

大きなディレクトリの同期や差分更新が必要な場合は rsync、リモートのファイルを対話的に探索・整理したい場合は sftp を検討してください。なお scp のプロトコル自体は非推奨とされているため、スクリプトでの継続利用を前提とする場合は rsyncsftp への移行も視野に入れておくと安心です。

よくある質問(FAQ)

scp と rsync、どちらを使うべき?

1回限りのファイルコピーなら scp で十分です。定期的な同期やバックアップ、差分だけ転送したい場合は rsync が適しています。

scp でディレクトリごとコピーするには?

-r オプションを付けて scp -r ディレクトリ user@host:/path/ のように実行します。中身が多い場合は圧縮転送の -C を併用すると速くなることがあります。

scp は非推奨と聞いたが、使ってはいけないの?

OpenSSH の scp プロトコル自体は非推奨とされていますが、多くのディストリビューションでは SFTP プロトコルへ自動的に切り替えて動作するため、通常の利用では引き続き使えます。ワイルドカード展開などスクリプトの挙動に依存する場合は、今後を見据えて rsyncsftp への移行も検討してください。詳しくはscp を使ってきた人向け|今後は SFTP・rsync を選ぶ理由で解説しています。

scp の転送速度が遅いときは?

大きなファイルを転送するときは -C オプションで圧縮転送を有効にすると速くなる場合があります。頻繁に同期する用途では、差分転送ができる rsync の方が総合的に高速です。

scp で転送先の同名ファイルは上書きされる?

はい、確認なしに上書きされます。cp -i のような上書き確認オプションは無いため、重要なファイルを上書きする前は事前にバックアップを取るか、コピー先でファイル名を変更してください。

関連コマンド

  • ssh : リモートサーバへ安全に接続するコマンド
  • sftp : SSH を利用した FTP ライクな対話型ファイル転送コマンド
  • rsync : 差分転送や再開機能に優れたファイル同期ツール。SSH経由での安全な同期が可能。
  • cp : ローカルファイルコピー

備考

  • scp は OpenSSH に含まれていますが、最近はより柔軟な rsyncsftp の利用が推奨される場合もあります。
  • -r を使うときは誤操作でディレクトリ全体を上書きしないように注意が必要です。
  • 転送速度やネットワーク負荷を考慮するなら rsync -avz の方が効率的な場合があります。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント