こんにちは、インフラエンジニアの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のパッケージをインストールするだけです。
SSHサーバーはファイルを転送する先のサーバーにインストールして下さい。
sshのインストールはapt-getコマンドを使用します。以下のように実行しましょう。
apt-get install ssh
コマンドを実行すると、以下のようにインストールが進みます。
SSHサーバーがインストールできたら、sshコマンドを使用してアクセスできるか確認しましょう。
ssh user@192.168.1.1
ssh [ユーザー名]@[IPアドレス]
SSHサーバーは様々な設定ができますが、今回はユーザーで認証できるまでのデフォルト設定です。
SSHサーバー構築の詳しい内容はこちらの記事で紹介しています。
関連:【Linux】SSHの設定方法を詳しく解説!サーバーをリモートからSSHで接続してみる
scpコマンドの使い方
では、ここからが本題です。
scpコマンドを使用してファイルを送信しましょう。
scpコマンドの文法
scpコマンドの使い方は以下の通りです。
scp [コピー元のファイル] [コピー先のファイル]
ファイルの指定方法は、リモート先の場合、ファイルの先頭に”[ユーザー名]@[IPアドレス]:“を付けます。このユーザ名とIPアドレスはSSHのユーザー認証で使う情報です。
続いて、実際にscpコマンドを実行してみましょう。
scpコマンドの実例
ここからは、scpコマンドの実例です。
scp test.txt user@192.168.1.1:/home/user/test.txt
こちらのコマンドでは、自分のPCのtest.txtを相手先[192.168.1.1]のサーバーに転送しています。ファイルは、相手先の/home/user/test.txtに転送されます。
相手先から自信のPCにコピーする場合
では、相手先のファイルから自分のPCにコピーする場合はどのようにしたら良いのでしょうか?
答えは、送信元のファイル名にユーザー名とIPアドレスを付けることです。以下のように実行します。
scp user@192.168.1.1:/home/user/test.txt ./
上記の例では、相手先(192.168.1.1)の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コマンドには、様々なオプションがあります。
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を使用します。 |
ディレクトリを転送する場合は、”-r”オプションを使用する
ディレクトリを転送する場合、”-r”オプションを使用します。以下のように実行しましょう。
scp -r directory user@192.168.1.1:/path/directory
上記の例では、自信のdirectoryディレクトリを相手の/path/directoryに転送しています。
ポートを指定する場合は、”-P”オプションを使用する
相手先のポート番号を指定する場合は、”-P”オプションを指定します。
scp -P 2222 file.txt username@destination_server:/path/to/destination
上記の例では、相手先の2222番へ接続しています。通常、sshは22番ポートですが、セキュリティの関係でポート番号を変えている場合があります。このような場合に”-P”オプションを使用します。
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コマンドはファイルのやり取りをする際に便利なコマンドなので覚えておきましょう。
さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。
「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」
そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!
入門から中級まで初心者でもわかりやすく学習を進めることができます。
- 【Linux入門講座1】ディレクトリと相対パス、絶対パス
- 【Linux入門講座2】ファイルの操作方法
- 【Linux入門講座3】ファイルのアクセス権限
- 【Linux入門講座4】ファイルの編集~vimの使い方をマスターする~
- 【Linux入門講座5】ユーザーとグループ
- 【Linux入門講座6】ネットワーク
- さらに講座あり
↓InfraAcademyの講座の一部です。
上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。
インフラエンジニアに必要な知識が学習できます。
参考:Linuxのコマンド練習用サイトのInfraAcademyを作成しました。【Linuxのコマンドをブラウザで練習しよう】