scpコマンド

ネットワーク上のホスト間でSSHを使用してデータ転送を行い、ファイルを安全にコピーします。

概要

scp(secure copy)はSSHの暗号化接続を介してホスト間でファイルを転送します。cpコマンドと同様に動作しますが、リモートシステムとの間でファイルをコピーすることができます。このコマンドは認証、暗号化、ファイル転送を一度の操作で処理するため、安全なファイル転送のための便利なツールです。

オプション

-r

ディレクトリ全体を再帰的にコピーします。

$ scp -r documents/ user@remote:/home/user/backup/
user@remote's password: 
file1.txt                                 100%  123     1.2KB/s   00:00    
file2.txt                                 100%  456     4.5KB/s   00:00

-P

SSH接続に異なるポートを指定します(注:sshが小文字のpを使用するのとは異なり、大文字のPを使用します)。

$ scp -P 2222 file.txt user@remote:/home/user/
user@remote's password: 
file.txt                                  100%  789     7.8KB/s   00:00

-p

元のファイルから更新時刻、アクセス時刻、モードを保持します。

$ scp -p important.conf user@remote:/etc/
user@remote's password: 
important.conf                            100%  321     3.2KB/s   00:00

-C

転送中に圧縮を有効にします。

$ scp -C largefile.zip user@remote:/home/user/
user@remote's password: 
largefile.zip                             100%  10MB    5.0MB/s   00:02

-q

静かモード - 進捗メーターと警告/診断メッセージを無効にします。

$ scp -q confidential.pdf user@remote:/home/user/
user@remote's password:

-i

公開鍵認証のためのアイデンティティファイル(秘密鍵)を指定します。

$ scp -i ~/.ssh/mykey.pem file.txt user@remote:/home/user/
file.txt                                  100%  789     7.8KB/s   00:00

使用例

リモートサーバーにファイルをコピーする

$ scp document.txt [email protected]:/home/user/documents/
[email protected]'s password: 
document.txt                              100%  1234     12.3KB/s   00:00

リモートサーバーからファイルをコピーする

$ scp [email protected]:/home/user/report.pdf ./
[email protected]'s password: 
report.pdf                                100%  5678     56.7KB/s   00:01

2つのリモートホスト間でコピーする

$ scp [email protected]:/files/data.txt [email protected]:/backup/
[email protected]'s password: 
[email protected]'s password: 
data.txt                                  100%  2345     23.4KB/s   00:00

複数のファイルを一度にコピーする

$ scp file1.txt file2.txt user@remote:/destination/
user@remote's password: 
file1.txt                                 100%  123     1.2KB/s   00:00
file2.txt                                 100%  456     4.5KB/s   00:00

ヒント:

SSHの設定を使用してコマンドを簡略化する

~/.ssh/configファイルにホストが定義されている場合、完全なホスト名とユーザー名を入力する代わりにホストエイリアスを使用できます。

ファイル名の特殊文字をエスケープする

スペースや特殊文字を含むファイル名を指定する場合は、引用符を使用するかバックスラッシュでエスケープしてください。

公開鍵認証を使用する

SSHキーを設定して、転送ごとにパスワードを入力する必要をなくしましょう。これはより安全で便利です。

帯域幅制限

低速接続で大きなファイルを転送する場合は、-lオプションを使用して帯域幅の使用量(Kbit/s単位)を制限できます。

よくある質問

Q1. scpは通常のcpとどう違いますか?

A. scpはSSHを介して異なるホスト間でファイルを安全にコピーするのに対し、cpは同じシステム上でローカルにファイルをコピーするだけです。

Q2. 中断された転送を再開できますか?

A. いいえ、scpは中断された転送の再開をサポートしていません。その機能が必要な場合は、代わりにrsyncの使用を検討してください。

Q3. ディレクトリ全体をコピーするにはどうすればよいですか?

A. -r(再帰的)オプションを使用します:scp -r /source/directory user@remote:/destination/

Q4. scpは安全ですか?

A. はい、scpは認証と暗号化にSSHを使用するため、信頼されていないネットワーク上でファイルを転送するのに安全です。

Q5. なぜscpの転送が遅いのですか?

A. -Cオプションを使用して圧縮を有効にするか、ネットワーク状態を確認してみてください。小さなファイルが多数ある大きなディレクトリの場合は、最初にtarを使用してアーカイブを作成することを検討してください。

参考文献

https://man.openbsd.org/scp.1

改訂履歴