Linuxコマンド一覧

scpコマンド|サーバーとファイルをやりとりする

__ __ _ _____
\ \ / /__| |_|_ _|__ _ __ _ __ ___
\ \ /\ / / _ \ '_ \| |/ _ \ '__| '_ ` _ \
\ V V / __/ |_) | | __/ | | | | | |
\_/\_/ \___|_.__/|_|\___|_| |_| |_| |_
 
scp を試すためのサンドボックスです。実機のファイルには影響しません。
user@webterm:~/project$
 

scp は SSH の経路を使ってファイルを送受信するコマンドです。送る・取ってくるの書き分け、ディレクトリごと送る `-r`、ポートを指定する `-P` を、ブラウザ上のターミナルで打ちながら確認できます。

最終更新: 2026-09-11

書式

scp [オプション] 元 先

リモート側は ユーザー@ホスト:パス の形で書きます。

まず打ってみる

鍵の設定が済んでいないと、そもそも通りません。

$ scp app.tar.gz deploy@server.example.com:/home/deploy/
deploy@server.example.com: Permission denied (publickey).

scp は SSH の経路をそのまま使います。 鍵を作り、相手に渡すところまでは ssh と同じ手順です。 鍵の保存先とパスフレーズは、3回とも Enter で既定のまま進めます。

$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:E4zOftaLf+dh7GxvLirKdf4udrfP+YfuPgkqepnXRuQ user@webterm
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|       o         |
|      . o        |
|     o   .  .    |
|      o S  o     |
|     .   o  E.   |
|      . ooo+..+o |
|       +=o++*+Oo=|
|      .o+=o=o&XX@|
+----[SHA256]-----+
$ ssh-copy-id deploy@server.example.com
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_ed25519.pub"

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'deploy@server.example.com'"
and check to make sure that only the key(s) you wanted were added.

送る

右側がリモートなら、送信です。

$ scp app.tar.gz deploy@server.example.com:/home/deploy/
app.tar.gz                     100%     8     0.0KB/s   00:00

進捗の行が出れば成功です。 届いたかどうかは、リモートで ls を1つ実行すれば分かります。

$ ssh deploy@server.example.com ls
app.tar.gz

取ってくる

左側をリモートにすると、受信になります。

$ scp deploy@server.example.com:/home/deploy/app.tar.gz downloaded.tar.gz
app.tar.gz                     100%     8     0.0KB/s   00:00
$ ls
app.tar.gz  config.yml  dist/  downloaded.tar.gz

元 先 の順は変わりません。 リモートの位置が右か左かだけで、送信と受信が切り替わります。

ディレクトリごと送る

そのまま渡すと断られます。

$ scp dist deploy@server.example.com:/home/deploy/
dist: not a regular file

-r を付けると中身ごと送れます。

$ scp -r dist deploy@server.example.com:/home/deploy/
index.html                     100%    12     0.0KB/s   00:00
app.js                         100%    15     0.0KB/s   00:00
$ ssh deploy@server.example.com ls
app.tar.gz  dist/

ポートを指定する

$ scp -P 2222 config.yml deploy@server.example.com:/home/deploy/
config.yml                     100%    11     0.0KB/s   00:00

大文字の -P です。 ssh は小文字の -p なので、ここだけ食い違います。

実務での使いどころ

scp は、手元とサーバーの間でファイルを1回だけ動かすときに打つコマンドです。

場面打ち方
成果物をサーバーに送るscp app.tar.gz deploy@server:/home/deploy/
ログを手元に取ってくるscp deploy@server:/var/log/app.log ./
ディレクトリごと送るscp -r dist deploy@server:/var/www/
ポートが違うサーバーへscp -P 2222 app.tar.gz deploy@server:/home/deploy/
繰り返し同期するrsync -av dist/ deploy@server:/var/www/

1回きりなら scp、何度も同期するなら rsync、と使い分けます。

つまずきやすいところ

: を忘れると、ただのコピーになります。

$ scp app.tar.gz deploy@server.example.com
app.tar.gz                     100%     8     0.0KB/s   00:00
$ ls
app.tar.gz  config.yml  deploy@server.example.com  dist/  downloaded.tar.gz

deploy@server.example.com という名前のファイルが手元にできました。 送れたように見えて送れていないので、: の有無は打つ前に確かめてください。

ポートは大文字の -P です。 小文字の -p は「更新日時を保つ」という別の意味になります。

ディレクトリには -r が要ります。

元のファイルが無ければ、そう言われます。

$ scp nothing.txt deploy@server.example.com:/home/deploy/
nothing.txt: No such file or directory

手を動かして覚える

webterm.appこのサイト

learn.webterm.app別のサイト

>_WEBTERM LEARN

WebTerm Learn|1つのコマンドから、使える状態へ

コマンドは単体で覚えるより、実際の作業の流れの中で使うほうが身につきます。順番に積み上げていくコースがあります。

コースを見る

関連するコマンド

ssh / rsync / ssh-keygen / tar

よくある質問

送るときと取ってくるときで、書き方はどう違いますか?
どちらも `scp 元 先` の順です。リモート側を `user@host:パス` の形で書くので、その位置が右なら送信、左なら受信になります。
ポートの指定が ssh と違うのはなぜですか?
scp では大文字の `-P` です。`ssh` は小文字の `-p` なので、ここだけ食い違います。よくある打ち間違いです。
ディレクトリを送れません。
`-r` が要ります。付けないと `not a regular file` と言われます。
Permission denied (publickey) と出ます。
scp は SSH の経路を使うので、鍵の設定が済んでいないと通りません。`ssh` でログインできる状態を先に作ってください。
rsync との違いは何ですか?
scp は毎回まるごと送ります。rsync は差分だけを送るので、大きなディレクトリを繰り返し同期するなら rsync が向いています。