はじめに
scpコマンドをどこから実行すれば良いのか分からず、
- リモート側 ➡ ローカル側に転送するときはリモートから
- ローカル側 ➡ リモート側に転送するときはローカルから
というように、「コピー元にいる側から実行するもの」と思い込み、失敗してしまうことがありました。
理論上は下の図の通り、計4通りの方法が実行可能です。しかし、実際は①と②のようにローカルから実行する場合が圧倒的に多いです(③と④が非推奨となる理由は後述)。

※黒塗りされているところが実行場所
本記事では一般的に使われる①と②の実行例と、③と④の失敗例についてまとめます。
scpコマンドとは
SSHプロトコルを利用して、リモートホスト-ローカルホスト間、またはリモートホスト同士でファイルを安全にコピー(転送)するコマンドです。
基本的な構文
- ローカルからリモート
scp [コピー元ファイルパス] [ユーザー名]@[IPアドレス]:[リモートコピー先ディレクトリ]
- リモートからローカル
scp [ユーザー名]@[IPアドレス]:[コピー元ファイルパス] [ローカルコピー先ディレクトリ]
オプションで-i(秘密鍵)や-P(ポート番号の指定)などを指定するときは、scpの後ろに指定します。
コマンド実践例
実行にあたり、まずは以下を準備しました。
- ローカルの
C:\work直下にlocal_file1.txt
C:\work のディレクトリ
2025/11/20 09:49 <DIR> .
2025/11/18 12:03 15 local_file1.txt
1 個のファイル 15 バイト
1 個のディレクトリ 317,677,858,816 バイトの空き領域
- リモートの
/home/miz/work直下にremote_file1.txt
miz@ubuntu:~/work$ pwd
/home/miz/work
miz@ubuntu:~/work$ ls
remote_file1.txt
①ローカルのファイルをリモートにコピーする(ローカルから実行)
ローカルに準備したlocal_file1.txtをリモートにコピーします。
C:\work>scp C:/work/local_file1.txt miz@<IPアドレス>:/home/miz/work/
local_file1.txt 100% 15 7.3KB/s 00:00
C:\work>
リモートからlocal_file1.txtが転送されていることが確認できます。
miz@ubuntu:~/work$ ls
local_file1.txt remote_file1.txt
②リモートのファイルをローカルにコピーする(ローカルから実行)
リモートに準備したremote_file1.txtをローカルにコピーします。
C:\work>scp miz@<IPアドレス>:/home/miz/work/remote_file1.txt C:/work
remote_file1.txt 100% 13 3.2KB/s 00:00
C:\work>
ローカルからremote_file1.txtが転送されていることが確認できます。
C:\work のディレクトリ
2025/11/20 09:55 <DIR> .
2025/11/18 12:03 15 local_file1.txt
2025/11/20 09:55 13 remote_file1.txt
2 個のファイル 28 バイト
1 個のディレクトリ 317,664,489,472 バイトの空き領域
【失敗例】③④ローカル ⇄ リモート(リモートから実行)
はじめに、非推奨と述べた③④を実行してみます。
構文は、以下のようになります。
- ローカルからリモート
scp <ローカルユーザー名>@<ローカルIP>:[コピー元ファイルパス] [リモートコピー先ディレクトリ]
- リモートからローカル
scp [コピー元ファイルパス] <ローカルユーザー名>@<ローカルIP>:[ローカルコピー先ディレクトリ]
③ローカルのファイルをリモートにコピーする(リモートから実行)
miz@ubuntu:~/work$ scp <ローカルユーザー名>@<ローカルIP>:/mnt/c/work/local_file2.txt /home/miz/work/
ssh: connect to host <ローカルIP> port 22: Connection timed out
➡ Connection timed outが出て失敗
④リモートのファイルをローカルにコピーする(リモートから実行)
scp /home/miz/work/remote_file2.txt <ローカルユーザー名>@<ローカルIP>:/mnt/c/work/
ssh: connect to host <ローカルIP> port 22: Connection timed out
➡ 同じくConnection timed outが出て失敗
③④でリモートからscpコマンドを実行したときに失敗した理由は、ローカル側(Windows)がssh接続を受け付ける設定になっていないためです。scpコマンドはSSHプロトコルを利用してファイルを転送するため、ssh接続できる状態である必要があります。しかし、Windowsではデフォルトでsshサーバーが無効になっており、設定をしない限りリモート側から Windowsへssh接続することができません。 その結果、今回のように Connection timed out というエラーが発生してしまうのです。
まとめ
ローカル➡リモート、リモート➡ローカルのどちらの転送であっても、基本的にscpコマンドはローカルから実行する方が一般的で簡単です。