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 directorywebterm.appこのサイト
ターミナル応用
特定場面で役立つコマンドを学ぶ
learn.webterm.app別のサイト
