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
に移行し始めるのが賢明かもしれません。