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/userscpコマンドでは、オプションを指定できます。代表的なところを挙げます。
たとえば、ポート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に移行し始めるのが賢明かもしれません。