SSHとSCP · 1 min read · Nov 22, 2025

Linuxでのログインにセキュアシェル(SSH)を使用し、データ転送にセキュアコピー(SCP)を使用する

SSHはセキュアシェルの略です。これは暗号化されたリモートログインプロトコルです。一度各ノードに設定されると、そのネットワーク内のさまざまな他のノードと通信するために使用できます。

SSHの主な利点は次のとおりです:

  • SSHはRSA暗号化アルゴリズムを使用して公開鍵と秘密鍵を生成し、侵入を非常に困難にします。
  • SSHはリモートログインプロトコルであるため、ノートパソコンに設定できます。つまり、ノートパソコンを使用してRaspberry Piクラスターにワイヤレス接続できます。
  • SCP(セキュアコピー)やSFTP(セキュアファイル転送プロトコル)などのプロトコルはSSHの上で動作するため、ファイルやフォルダを直接1つのノードから別のノードに転送できます。
  • SSHは一度のログインをサポートします。これは、最初にログインするときにのみ資格情報を入力する必要があることを意味します。2回目以降のログインでは必要ありません。

まず、SSHキーを生成することから始めましょう。SSHを使用するには、データ転送が行えるように2つ以上のノード間でキーを生成する必要があります。暗号化にはRSAを使用します。1つのノードでキーを生成し、そのノードには秘密鍵または秘密の鍵があります。同じノードは、データをこのノードに送信したい他のノードに送信される公開鍵も生成します。データを送信したいノードで次のコマンドを実行します。このノードを「マスターノード」と呼び、他のノードを「ワーカーノード」と呼びます。

cd ~  
ssh-keygen --t rsa --C "raspberrypi@raspberrypi"

これらの2つのコマンドは、キーを保存するためのデフォルトの場所を/home/pi/_ssh/id_rsaに設定します。

パスフレーズを求められた場合は、パスフレーズを空白のままにします。これが完了したら、次のステップは公開鍵をワーカーノードに送信することです。したがって、ワーカーノードがネットワークに接続されていることを確認してください。次に、ワーカーノードで暗号化キーを設定できますので、使用するIPアドレスはワーカーノードのIPアドレスです。マスターノードで次のコマンドを実行します。

cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir .ssh;cat >> .ssh/authorized_keys"

SSHキーが生成されたら、マスターノードから送信されたキーを持つ他のノードにログインできます。そのためには、次のコマンドを使用します。

ssh [email protected]

上記のコマンドでは、「pi」はユーザーを示します。デフォルトでは、すべてのRaspbianを使用するPIはユーザーが「pi」であり、「192.168.3.216」は私のクライアントのIPです。これを変更して、クライアントPIのIPアドレスを表す必要があります。

これにより、パスワードが求められます。ログインすると、入力したすべてのコマンドはそのノードで実行され、マスターではなく、出力はマスター自体に表示されます。SSHは、他のノードで直接コマンドを実行するためにも使用できます。たとえば、異なるノードのホスト名を変更するには、以下の形式でこのコマンドを使用します。

ssh [email protected] 'sudo echo "cilent001" | sudo nano /etc/hostname'  
ssh [email protected] 'sudo echo "cilent002" | sudo nano /etc/hostname'  
ssh [email protected] 'sudo echo "cilent003" | sudo nano /etc/hostname'

上記のように、SSHを使用して他のノード/PIに実際にログインすることなくコマンドを実行できます。次の例は、IPアドレス192.168.3.216のノードを安全にシャットダウンする方法を示しています。

ssh [email protected] 'sudo poweroff'

以下の図は、SSHを使用してワーカーノード(192.168.3.216)にログインし、ワーカーノードからマスターノードに制御端末を戻す方法を示しています。

上記の図に示されているように、ワーカーノードへのログインは直接行われ、最初のログイン時を除いてパスワードの入力は必要ありません。しかし、端末の制御がマスターノード(192.168.3.215)に戻るたびに、ログイン資格情報を入力する必要があります。このようにして、マスターは常に外部の脅威から保護されています。

したがって、SSHを介して他のノードにコマンドを発行した後、データを複数のノードに送信する必要がある状況があるかもしれません。ノードの数が少ない場合は、各ノードに手動でログインし、ディスプレイとキーボードに接続してファイルを送信できます。しかし、クラスターのサイズが大きい場合、これは非常に非効率的な方法です。より簡単な方法は、SCPを使用してファイルを送信することです。次のコマンドを使用してSCPをインストールします。

sudo apt-get install scp

一部のLinux OSにはSCPがプリインストールされている場合がありますが、私たちが使用していたRaspbianにはありませんでした。単一のファイルを送信するための一般的なコマンドは次のとおりです。

scp (ローカルデバイスのファイルのパス) [email protected] (リモートの場所のパス)

例:

scp /pi/example.c [email protected] /pi/project

ここで、データを送信するリモートデバイスはIPアドレスで認識されます。ディレクトリ内の多くのファイルを再帰オプション(-R)を使用して送信できます。たとえば:

scp -r /pi/project [email protected] /pi/project

上記のコマンドは、ローカルホストの/pi/project内のすべてのファイルを、IPアドレスで識別されたリモートホストの再帰フォルダに転送します。

以下の画像は、さまざまなsshおよびscpコマンドを示しています。現在のフォルダの内容をリストすることから始まり、次に「scp」を再帰的に呼び出して、現在のフォルダ内のすべてのファイルを別のノードのフォルダに転送します。その後、他のノードにログインし、scpが目的地に内容を正常に転送したことを示します。

SCPは、転送を特定の条件に合わせるためにいくつかのオプションと共に使用できます。以下はいくつかのオプションです:

  • “-p”オプションを使用して、元のファイルから変更時間、アクセス時間、およびモードを保持できます。例: scp -p test.c [email protected]:~/ ここで、ファイル”test.c”のアクセス時間、アクセスモード、および最終変更時間は、宛先ノードでも保持されます。
  • SCPは、ファイルをネットワークを介して宛先に送信する前に圧縮することを許可します。これは、転送するファイルが非常に大きい場合に非常に便利で、圧縮することで送信速度が向上します。これを行うには、”-C”オプションを使用します。例: scp -pC test.c [email protected]:~/ ここでは、複数のオプションを使用でき、両方の機能がコマンドに適用されます。
  • ソケットプログラミングは、ポートを介してデータを送受信することを含み、SCPは特定のポートを介してリモートホストにデータを送信するために使用できます。これは、”-P”オプションを使用して行うことができます。例: scp -P 21938 test.c [email protected]:~/ ここでは、データを送信するために使用されるポートは1938です。
  • ファイルの転送状況を知りたくない場合もあります。上の画像のように、大量のファイルがある場合は、転送状況をオフにすることが理にかなっています。”-q”オプションを使用してこれを行うことができます。例:
scp -rq ~/files [email protected]:~/files

ここでは、filesという名前のフォルダの内容が別のノードのfilesフォルダに転送されますが、ステータスバーやデバッグメッセージはすべて無効になり、表示されません。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。