この記事のポイント
scpはopenssh-clientに含まれ、Ubuntu 24.04 では OpenSSH 9.6p1 が標準搭載rsyncはapt install rsyncで追加でき、差分転送・中断再開・除外パターンに対応- 定期バックアップや大容量ファイルの同期には、毎回全体をコピーする
scpよりrsyncが圧倒的に速い - Ubuntu 9.0 以降の
scpは内部的に SFTP プロトコルを使用(旧来の SCP プロトコルとの互換性あり) - パスワード入力なしで使うには、事前に SSH 鍵ペアを生成して登録しておくのが定石
Ubuntu でリモートサーバーにファイルを転送するとき、scp と rsync の2つが定番です。「どっちを使えばいいの?」という疑問は、実際に動かしてみると答えが見えてきます。
本記事では Ubuntu 24.04 LTS の Docker コンテナで両コマンドを実際に動かし、コマンドの実出力・インストール方法・主要オプションを丁寧に解説します。VPS でファイルを管理したい方にもそのまま使える内容です。
注意
本記事のコマンドは Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04)で検証しています。Ubuntu 22.04 では OpenSSH のバージョンが異なります(記事内の比較表を参照)。
目次
- scp と rsync の違い:どちらを使うべきか
- scp のインストールと基本的な使い方
- scp の主要オプションと実行例
- rsync のインストール
- rsync の基本的な使い方
- rsync の便利なオプション(–exclude・–delete・–dry-run)
- SSH鍵ペアを使ってパスワードなしで転送する
- Ubuntu 22.04 vs 24.04 バージョン比較
- よくあるエラーと解決策
- まとめ
scp と rsync の違い:どちらを使うべきか
まず「scp か rsync か」という疑問に答えておきます。一言でいうと、1回限りの小ファイルコピーは scp、バックアップや大容量の定期同期は rsync です。

最大の違いは「差分転送」の有無です。rsync は前回転送からの差分だけを送るため、2回目以降の転送が劇的に速くなります。実際、同じファイルを2回 rsync した場合、2回目は sent 156 bytes(メタ情報のみ)で完了します。scp は毎回ファイル全体を転送するため、大きなファイルを定期的に同期するには向きません。
scp のインストールと基本的な使い方
手順1:openssh-client を確認する
Ubuntu 24.04 では openssh-client がデフォルトでインストールされており、scp はその中に含まれています。Docker コンテナの場合のみ別途インストールが必要です。
実測で確認できた通り、scp は openssh-client パッケージ(バージョン 1:9.6p1-3ubuntu13.16)に含まれています。インストールされていない場合は次のコマンドで追加します。
手順2:scp の基本構文を理解する

scp の基本的な構文は以下の通りです。
書式は scp [オプション] コピー元 コピー先 で、リモートの指定は ユーザー名@ホスト:パス の形式です。SSH のポート番号を変更している場合は -P 2222(大文字の P)で指定します。これは ssh コマンドの -p(小文字)と異なるので注意が必要です。
ポート指定は大文字の -P
ssh コマンドのポート指定は -p(小文字)ですが、scp では -P(大文字)です。これは詰まりやすいポイントです。例:scp -P 2222 file.txt user@host:/path/
scp の主要オプションと実行例
実測で確認した scp の使用できるオプション一覧(scp 2>&1 の実出力)は以下のとおりです。
| オプション | 説明 | 使用例 |
|---|---|---|
-P port |
接続ポートを指定(デフォルト22) | scp -P 2222 file.txt user@host:/path/ |
-r |
ディレクトリを再帰的にコピー | scp -r mydir/ user@host:/path/ |
-i identity_file |
使用する秘密鍵を指定 | scp -i ~/.ssh/id_ed25519 file.txt user@host:/path/ |
-v |
詳細な接続情報を表示(デバッグ用) | scp -v file.txt user@host:/path/ |
-q |
進捗バーを非表示(スクリプト内向け) | scp -q file.txt user@host:/path/ |
-C |
転送時に圧縮(低速回線向け) | scp -C largefile.tar user@host:/path/ |
-O |
旧来のSCPプロトコルを強制使用 | scp -O file.txt user@host:/path/ |
rsync のインストール
rsync は Ubuntu 24.04 にデフォルトでは含まれていないため、apt でインストールします。
Ubuntu 24.04 では rsync 3.2.7(パッケージ版 3.2.7-1ubuntu1.5)がインストールされます。これは実際に Docker コンテナで docker run --rm ubuntu:24.04 を実行して取得した実測値です。
rsync の基本的な使い方
①ローカル間でのファイル同期
まずリモートなしのローカル転送で動作を確認できます。
オプション -a はアーカイブモード(パーミッション・タイムスタンプ・シンボリックリンク等を保持)、-v は詳細表示です。実測では file1.txt(「ファイル1: テスト」)と file2.txt(「ファイル2: サンプル」)が正常に転送されました。
②リモートサーバーへの転送(SSH経由)

-z オプションは転送時に圧縮をかけます。テキストファイルや HTML/CSS など圧縮しやすいファイルに効果的です。SSHのポートを変更している場合は -e 'ssh -p 2222' を追加します。
rsync の便利なオプション(–exclude・–delete・–dry-run)

rsync の真価は組み合わせオプションにあります。実際にコンテナで動かした結果を見てみましょう。
①特定ファイルを除外する(–exclude)
実測では *.log と *.bak が正常に除外され、app.py と config.yaml のみが転送されました。複数の除外パターンはそれぞれ --exclude を繰り返すか、--exclude-from=.rsyncignore でファイルにまとめることもできます。
②同期元にないファイルを削除する(–delete)
–delete は慎重に使うこと
--delete はコピー先にあってコピー元にないファイルを削除します。誤った方向に rsync を実行すると、大切なファイルが消えてしまいます。必ず先に --dry-run で確認してから本番実行してください。
③実行前にプレビューする(–dry-run)
実測では (DRY RUN) という文字列が末尾に表示され、実際にはファイルが変更されていないことが確認できました。--delete と --dry-run のセットで「何が削除されるか」を事前確認するのが安全です。
SSH鍵ペアを使ってパスワードなしで転送する
scp・rsync どちらも、SSH でパスワードを毎回入力するのは面倒です。SSH 鍵認証を設定すれば、スクリプトからも安全にファイル転送できます。

手順1:ed25519 鍵を生成する
実際のコンテナ実行で生成された鍵のフィンガープリントは上記の通りです。-t ed25519 は現在最も推奨される鍵タイプで、RSA 4096bit より高速・安全です。
手順2:公開鍵をリモートサーバーに登録する
Ubuntu 22.04 vs 24.04 バージョン比較
Ubuntu 22.04 と 24.04 の両 Docker イメージで実測した比較です。

注目すべき点は OpenSSH のバージョン差です。Ubuntu 22.04 は OpenSSH 8.9p1、Ubuntu 24.04 は OpenSSH 9.6p1 と大きく更新されています。OpenSSH 9.0 でデフォルトのプロトコルが変わった(SCP プロトコル → SFTP プロトコル)ため、古いサーバーとの接続で問題が起きる場合は scp -O オプションで旧プロトコルに戻せます。
rsync のバージョンは両方とも 3.2.7 で共通ですが、パッケージのリビジョン番号が異なります(22.04: 3.2.7-0ubuntu0.22.04.7、24.04: 3.2.7-1ubuntu1.5)。
よくあるエラーと解決策
①「scp: Connection closed」が出る
解決策
-v オプションを付けて詳細ログを確認してください。多くの場合、SSH 鍵の認証失敗またはリモートの sshd 設定の問題です。ssh user@host で先に接続できるか確認します。
②「rsync: command not found」が出る
rsync は Ubuntu 24.04 にデフォルト非搭載です。上記コマンドで解決します。なお、リモートサーバー側にも rsync が必要なので、両方のマシンにインストールしてください。
③「scp: Not a regular file: /path/dir」が出る
ディレクトリを転送しようとして -r オプションを忘れた場合のエラーです。scp -r /path/dir/ user@host:/path/ のように -r を追加します。
④「rsync: [sender] read error: Connection reset by peer」が出る
リモートサーバー側のネットワーク切断、または SSH 接続タイムアウトが原因です。大容量ファイルの転送中は --timeout=300(秒)を付けて接続タイムアウトを延ばすと改善することがあります。また、中断した転送を再開するには --partial オプションを使います。
まとめ
Ubuntu 24.04 での scp・rsync の使い方を実測データとともに解説しました。ポイントをまとめます。
- scp(OpenSSH 9.6p1)は
openssh-clientに含まれ、Ubuntu にデフォルト搭載。1回限りのファイルコピーに向く - rsync 3.2.7 は
apt install rsyncで追加。差分転送・除外・削除同期・中断再開と高機能 - Ubuntu 9.0 以降の scp はデフォルトで SFTP プロトコルを使う。旧サーバーとの互換問題は
-Oで解決 - パスワードなし転送には ed25519 鍵ペアを生成して
ssh-copy-idで登録するのが定石 --deleteは事前に--dry-runで確認してから本番実行すること
VPS を借りてファイルを管理する場合、rsync によるバックアップ自動化(cron との組み合わせ)が非常に便利です。
VPSを使ったサーバー運用に興味が出てきたら、各社のスペックと料金を実測ベンチで比較した記事も参考にしてください。



コメント