頑張らないために頑張る

ゆるく頑張ります

`scp`の基本

Posted at — Oct 29, 2023

概要

scpコマンドは、ローカルマシンとリモートマシンの間で、ファイルをセキュアにコピーするためのコマンドです。場合によっては、ラズパイに対しても使うことがあるかもしれません。自分はよく使います。

基本的な使い方

このコマンドの基本的な形式は以下のとおりです。

scp 送信元のファイル 送信先のアドレス

基本はこの形なのですが、リモートとという「相手」がいることと認証を行う都合上、実際はもう少しごちゃごちゃした書き方になります。

scp ユーザー名@リモートホストのアドレス:リモートのファイルパス ローカルのディレクトリパス

たとえば「リモートのファイルをローカルのフォルダへコピーする」場合、上記のように入力します。たしかに「送信元のファイル」と「送信先のフォルダ」を指定していますが、ユーザー名や相手のアドレスを入力したりするので、まぁ、ぱっと見がちょっとごちゃごちゃしがちだと思います・・・思わない?

上記のコマンドを実行すると、パスワードの入力画面が表示されるはずです。パスワードを入力し承認されると、そのままファイルの転送が開始されます。ファイルの転送が終了次第、プロンプトが戻ってきます。

基本のコマンド例

たとえば、リモートのRaspberry Pi(以下、ラズパイ)の /home/user/file.txt をローカルの ~/downloads/ ディレクトリにコピーする場合は、次のように入力します。

scp pi@raspberrypi.local:/home/user/file.txt ~/downloads/

逆に、ローカルのファイルをリモートのラズパイにコピーする場合は、次のように入力します。

scp ~/downloads/file.txt pi@raspberrypi.local:/home/user

オプション

scpコマンドでは、オプションを指定できます。代表的なところを挙げます。

たとえば、ポート2222を指定してリモートホストの /home/user/docs ディレクトリ全体をローカルにコピーする場合は、次のようにします。

scp -r -P 2222 user@remote:/home/user/docs ~/localdocs

利用シーン

このコマンドは、以下のようなシーンで利用できます。

とくに「セキュアに転送したいよー」っていうときに利用すると思います。というか、他にないよね?

メリットとデメリット

このコマンドのメリットは以下の通りです。

一方で、デメリットとしては次の点があります。

たとえば、リモート側のラズパイが何らかの理由でSSHを無効化している、とします。この場合は、ラズパイとの間でscpが利用できません。SSHを有効化すれば利用できるようになりますが、scpのためだけにSSHを有効化するのもなんだかなぁという感じです。

現状は非推奨にだったり中身が変わったり

scpは何十年も前のものであり、セキュリティ上のリスクや問題を抱えています。そのため、Linuxディストリビューションは、rsyncのような別のコマンドを使ってもらうためにscpコマンドを非推奨にするか、sftpプロトコルを使用する新しいバージョンのscpを作成することを提唱しています。

実際、Red Hatは中身がsftpであるscpコマンドを作成しています。これは、scpコマンドを実行するとデフォルトでsftpのプロトコルを使って通信します。ちなみに、新たに追加された-Oオプションを使用することで、従来通りの方法を利用することもできます。他のディストリビューションでは、scpの使用については議論の余地があるかと思います。とは言え、迫り来る不確実性を考慮すると、rsyncに移行し始めるのが賢明かもしれません。

参考

  1. Secure copy protocol
  2. OpenSSH SCP deprecation in RHEL 9: What you need to know
  3. How to Use the scp Command on Linux
  4. Linux SCP Command Explained: Securely Copy & Transfer Files {13 Examples}
  5. Deprecated Linux Commands You Should Not Use Anymore (And Their Alternatives)
comments powered by Disqus