こんにちは、インフラエンジニアのryuです。
今回は、scpコマンドを使用してファイルを送信する方法を解説します。scpとは、サーバー間でSSHのプロトコルを使用して安全にファイルを送信するコマンドです。SSHサーバーを構築して、scpコマンドを使ってみましょう。オプションやコマンド失敗時の対処方法も併せて解説します。
目次
scpコマンドでファイルを送信する方法

「サーバー間でファイルを安全に転送する方法は・・・?」
「scpコマンドを使いましょう」
サーバー間でファイルを転送したいけど、どうやったらいいの?
と、お困りの方のために、今回は”scp”コマンドについて解説したいと思います。
scpコマンドとは、sshプロトコルを使用してファイルを転送するコマンドです。コマンド1つでファイルの転送ができるため、とても便利なコマンドです。
今回はscpコマンドの使い方を1から解説します。内容は以下の通りです。
- SSHサーバーを準備する
- scpコマンドでファイルを送信する
- scpコマンドのオプション解説
- scpの仕組みを解説
初心者の方でも分りやすく1から解説します。では、早速やってきましょう!
SSHサーバーを準備する
まず、scpコマンドを使うための準備をします。SSHサーバーの構築です。
先ほど、scpコマンドとはsshプロトコルを使用してファイルを転送すると、いいました。まずは、SSHサーバーの構築から行います。
SSHサーバーの構築方法
SSHサーバーの構築方法は簡単です。linuxにパッケージをインストールするだけです。
SSHサーバーはファイルを転送する先のサーバーにインストールして下さい。
こちらのコマンドでインストールできます。
apt-get install ssh

SSHサーバーがインストールできたら、sshコマンドを使用してアクセスできるか確認しましょう。
ssh user@192.168.1.1
ssh [ユーザー名]@[IPアドレス]
SSHサーバーは様々な設定ができますが、今回はユーザーで認証できるまでのデフォルト設定です。
SSHサーバー構築の詳しい内容はこちらの記事で紹介しています。
scpコマンドの使い方
では、ここからが本題です。
scpコマンドを使用してファイルを送信しましょう。
scpコマンドの文法
scpコマンドの使い方は以下の通りです。
scp test.txt user@192.168.1.1:/home/user/test.txt
scp [コピー元のファイル] [コピー先のファイル]
ファイルの指定方法は、リモート先の場合、ファイルの先頭に”[ユーザー名]@[IPアドレス]:“を付けます。このユーザ名とIPアドレスはSSHのユーザー認証で使う情報です。
こちらのコマンドでは、自分のPCから、相手先[192.168.1.1]のサーバーにtest.txtファイルを転送する動作になります。
では、相手先のファイルから自分のPCにコピーする場合はどのようにしたら良いのでしょうか?答えは、送信元のファイル名にユーザー名とIPアドレスを付けることです。
scp user@192.168.1.1:/home/user/test.txt ./
ちなみに、”./”は現在自分のいるディレクトリ(カレントディレクトリ)を指定しています。カレントディレクトリに、相手先のtest.txtファイルをコピーします。
linuxでscpコマンドを使ってみる
では、実際にlinuxでscpコマンドを使ってみましょう。
まず、”test.txt”ファイルを作成しましょう。
touch test.txt
このファイルを転送先のサーバーにscpコマンドをつかってコピーします。
scp test.txt user@192.168.1.1:/home/user/test.txt

こちらの画像では、自分自身にSSHサーバーを構築しています。このアドレスを転送先に変えれば、転送先にファイルを送ることができます。
SCPコマンド実行時にエラーが出た場合の対処法
コマンド実行時以下のようなエラーが出たら、SSHサーバーの構築に失敗しているか、転送先に通信ができていません。
ssh: connect to host 192.168.54.1 port 22: Resource temporarily unavailable
lost connection
もう一度SSHの設定を見直してみましょう。もし、修復できない場合はSSHサーバーの再インストールも検討してみましょう。
linuxからwindowsにscpコマンドでファイル転送する
次にlinuxからwindowsにscpコマンドでファイル転送する方法です。
WindowsにSSHサーバーをインストールすればよいですが、設定が面倒なので、WindowsにWSLをインストールして、そこにSSHサーバーをlinuxと同じように設定しましょう。
Windowsの仮想サーバーにlinuxを構築し、そこに向けてファイル転送を行います。
WSLでlinuxサーバーを構築する方法はこちらの記事で解説しています。

WSLを構築したら、そこにSSHサーバーを構築して、scpコマンドでファイル転送してみましょう。手順は先ほど解説した通りです。
scpコマンドのオプション解説
scpコマンドには、様々なオプションがあります。
参考程度に載せておくので興味ある方は、いろいろと試してみてください。
-C | 通信を圧縮します。 |
-i 秘密鍵ファイル | 秘密鍵ファイル(identityファイル)を指定します。初期設定は、SSHバージョン1は、~/.ssh/identity、SSHバージョン2は、~/.ssh/id_rsa と ~/.ssh/id_dsa。 |
-P ポート番号 | ポート番号を指定します。 |
-p | コピー元の更新時間とモードを維持します。 |
-r | ディレクトリ内を再帰的にコピーします。 |
-1 | SSHのプロトコルバージョン1を使用します。 |
-2 | SSHのプロトコルバージョン2を使用します。 |
-4 | IPv4を使用します。 |
-6 | IPv6を使用します。 |
scpコマンドの仕組みとは?
scpコマンドは、SSHというプロトコルを使用して安全にファイル転送を行っています。その仕組みを簡単に解説したいと思います。
SCPで使われているSSHとは?
では、sshプロトコルとは何なのでしょうか?知らない方のために少し解説します。
SSHとは、Secure Shell(セキュアシェル) の略でサーバーを遠隔で操作するものです。暗号化技術で安全に操作することができます。
つまり、SSHを使うことで暗号化されて、遠隔のサーバーを操作できるということです。そのため、ファイル転送も可能になります。
scpはなぜ安全なのか?
scpはなぜ安全にファイルを転送できるのかというと、公開鍵暗号化方式で通信を暗号化しているからです。鍵を使用して暗号化することで、鍵を持っていない人は、暗号化されたデータを見ることができなくなります。
公開鍵暗号方式の詳しい説明は下記の記事でしているので、興味のある方はご覧ください。
【図解】共通鍵暗号方式の仕組みとは?【初心者向けに詳しく解説】
scpコマンドまとめ
最後にまとめです。
scpコマンドとはSSHプロトコルを使用して安全にファイルを送信するlinuxのコマンドでした。
使い方は、SSHサーバーを構築して、以下のようなコマンドを実行します。
scp test.txt user@192.168.1.1:/home/user/test.txt
scp [コピー元のファイル] [コピー先のファイル]
scpコマンドはファイルのやり取りをする際に便利なコマンドなので、ぜひ使い方をマスターしてみましょう。
ファイルのやり取りについては、、共有フォルダを準備してするやり方もあります。こちらの記事も参考にしてください。
以上で終わります。ありがとうございました。