scpコマンドとは
scpコマンドとは、Tera-term等でssh接続したローカルマシンから、他のリモートマシンにファイルやディレクトリをコピーする際に使用するLinuxのコマンドです。
同じマシン上でファイルをコピーするなら「cp」コマンドを使用しますが、別のマシンにファイルをコピーする際には「scp」を使用します。SSHプロトコルを使用します。
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コマンドでファイルをリモートからローカルにコピーすることが出来ました。
$ scp <オプション> <コピーファイルのパス> <[ユーザ名]@[宛先のIP]:[宛先のパス]>