【ssh接続】Linuxのscpコマンドのオプションや使い方を解説

scpコマンドとは

scpコマンドとは、Tera-term等でssh接続したローカルマシンから、他のリモートマシンにファイルやディレクトリをコピーする際に使用するLinuxのコマンドです。

同じマシン上でファイルをコピーするなら「cp」コマンドを使用しますが、別のマシンにファイルをコピーする際には「scp」を使用します。SSHプロトコルを使用します。

scpコマンドの書式

$ scp <オプション> <コピーファイルのパス> <[ユーザ名]@[宛先のIP]:[宛先のパス]>

scpコマンドのオプション

scpコマンドのオプションは以下となります。

scpコマンドのオプション
  • -p
    パーミッションやコピー元ファイルのタイムスタンプを保持してコピーする。
  • -P <ポート番号>
    ポート番号を指定してファイルをコピーする。
  • -r
    ディレクトリを丸ごと再帰的にコピーする。
  • -i <秘密鍵>
    秘密鍵ファイルを指定してコピーします。
    コピーする際にパスワードが聞かれなくなります。

scpコマンドの使い方

実際にscpコマンドの使い方を解説していきます。

前提条件
  • ローカルマシン(送信元)
    ・仮想マシン名 : TEST_1
    ・OS : CentOS 8
    ・IP : 192.168.10.99/24
    ・ファイルのパス : /tmp
    ・ファイル名 : test.txt
  • リモートマシン(宛先)
    ・仮想マシン名 : TEST_2
    ・OS : Red Hat 8
    ・IP : 192.168.10.10/24
    ・ファイルのパス : /tmp
    ・ファイル名 : test_ver2.txt

まずは良く使用するローカルからリモートにファイルをコピーします。
基本的にタイムスタンプ等の差分を発生させる必要性はないので、「-p」オプションを使用することが多いです。

ローカルからリモートへのコピー

ローカルにあるファイルをリモートに持っていきます。
コピーを行うローカルのファイル名は「test.txt」とします。

[root@TEST_1 ~]# cd /tmp/
[root@TEST_1 tmp]# pwd
/tmp
[root@TEST_1 tmp]# ls -la
合計 4
drwxrwxrwt.  3 root root  99  4月 26 23:57 .
dr-xr-xr-x. 17 root root 244  9月  9  2020 ..
-rw-r--r--   1 root root  44  7月 31 23:11 test.txt
[root@TEST_1 tmp]# scp test.txt root@192.168.10.10:/tmp
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is SHA256:6YEMMShuKlaWbYzkjh+ujog8GafgR381rSNtq3CMPhA.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
root@192.168.10.10's password:
test.txt                                                                                                                   100%    3     0.4KB/s   00:00
[root@TEST_1 tmp]#
上記の解説

scpコマンドは9行目です。他は事前に必要なものや補足説明を記載しています。

  • 1行目
    /tmpディレクトリに移動します。
  • 2行目
    自分がどこにいるかを確認します。
    /tmpに移動できていることを確認します。
  • 4行目
    ファイルを一覧で表示しています。
    8行目にある「test.txt」があることを確認します。
  • 9行目
    scpコマンドを入力しています。
    /tmp内のtest.txtをリモートマシンに送信しています。
  • 12行目
    始めてsshで繋ぐ際は、「繋いでもいいか?」と聞かれるので問題なければ「yes」を入力してください。「no」にすると、scpでファイルが送れません。
    14行目にリモートマシンのパスワードを聞かれているので入力します

リモートの仮想マシン「TEST_2」にコピーされているか確認します。

[root@TEST_2 ~]# cd /tmp/
[root@TEST_2 tmp]#
[root@TEST_2 tmp]# ls -la
合計 4
drwxrwxrwt.  8 root root 143  7月 31 23:19 .
dr-xr-xr-x. 17 root root 244  8月 19  2021 ..
-rw-r--r--   1 root root  44  7月 31 23:14 test.txt
[root@TEST_2 tmp]#
上記の解説
  • 1行目
    /tmpディレクトリに移動します。
  • 3行目
    ファイルを一覧で表示しています。
    7行目にある「test.txt」があることを確認します。

以上でscpコマンドでファイルをローカルからリモートにコピーすることが出来ました。

リモートからローカルへコピー

先ほどとは逆に、リモートにあるファイルをローカルに持っていきます。
コピーを行うリモートのファイル名は「test_ver2.txt」とします。

[root@TEST_1 ~]# cd /tmp/
[root@TEST_1 tmp]# pwd
/tmp
[root@TEST_1 tmp]# ls -la
合計 4
drwxrwxrwt.  3 root root  99  4月 26 23:57 .
dr-xr-xr-x. 17 root root 244  9月  9  2020 ..
-rw-r--r--   1 root root  44  7月 31 23:11 test.txt
[root@TEST_1 tmp]# scp root@192.168.10.10:/tmp/test_ver2.txt /tmp/.
root@192.168.10.10's password:
test_ver2.txt
[root@TEST_1 tmp]# ls -la
合計 8
drwxrwxrwt.  8 root root 207  7月 31 23:39 .
dr-xr-xr-x. 17 root root 244  9月  9  2020 ..
-rw-r--r--   1 root root  44  7月 31 23:11 test.txt
-rw-r--r--   1 root root  44  7月 31 23:39 test_ver2.txt
[root@TEST_1 tmp]#
上記の解説

scpコマンドは9行目です。他は事前に必要なものや補足説明を記載しています。
確認コマンドは12行目です。

  • 1行目
    /tmpディレクトリに移動します。
  • 2行目
    自分がどこにいるかを確認します。
    /tmpに移動できていることを確認します。
  • 4行目
    ファイルを一覧で表示しています。
    「test_ver2.txt」がないことを確認しています。
  • 9行目
    scpコマンドを入力しています。
    リモートマシンの/tmp内のtest_ver2.txtをローカルマシンに送信しています。
    10行目にリモートマシンのパスワードを聞かれているので入力します。
  • 12行目
    ファイルを一覧で表示しています。
    17行目に「test_ver2.txt」ファイルがあることを確認できます。

以上でscpコマンドでファイルをリモートからローカルにコピーすることが出来ました。