はじめに
学習初心者にとって「サーバー」と言われても、馴染みがないと実感がわきにくいことと思います。
私自身、聞いたことはあっても実際どんなもの?と思っていました。本格的なバックエンドエンジニアとしてサーバーの理解なしに活躍することはできないと思い、練習用にサーバーを準備しました。
サーバといっても、よく写真に出てくるような大きな物理マシンではなく、小型マシンRaspberry Pi 4(以後、ラズパイと表記)を用意しました。
本記事では、Raspberry Pi 4 に OS をインストールするところから、Mac からラズパイへ SSH 接続できるように設定する手順までを、基本的なポイントを押さえながらまとめています。
以下の記事にUbuntu Serverをインストールする手順をまとめましたので、OSのインストールがまだの方はこちらを参考にしてみてください。
https://qiita.com/mabo23/items/3054fdf172df03cc7305
ラズパイとは
Raspberry Pi(ラズベリーパイ)は、イギリスの教育財団によって開発された、手のひらサイズの小型コンピュータです。
見た目は基板むき出しですが、HDMIやUSB、LAN端子などがあり、LinuxベースのOSが動作する本格的なマシンです。
もともとは教育目的(プログラミングやコンピュータの学習)で開発されたものですが、今では趣味やIoT、さらには自宅サーバとしても人気のようです。
サーバに使える理由
- Ubuntu ServerのようなLinuxベースのOSが動作する
- 有線LANポートがあることによる安定通信の実現
- 小型・省電力で常時稼働に向いている
- 外部ストレージやネットワークとの接続が可能
ラズパイとMacをSSH接続する手順
1. ラズパイの準備
1-1. Ubuntu Server をインストールしたラズパイを用意する
1-2. ラズパイをネットワークに接続する(今回は有線LAN)
※実際にはLANケーブルを使って、WifiルーターのLANポートに有線接続しました。
1-3. ラズパイをモニターに接続して起動する
1-4. 初回起動時にユーザー設定を行ってログインする
1-5. SSH サーバーが有効になっているか確認・起動する
Ubuntu Server を microSD にインストールすると自動的にSSHサーバー(openssh-server)がインストールされます。
ただし、このSSHサーバーは起動しているかどうかがわからないため、以下のコマンドで確認します。
sudo systemctl status ssh
※systemctlは、Linuxのsystemd(システムデーモン)」という仕組みを操作するためのコマンドです。Linuxシステムの起動・停止やサービス管理(サーバーの起動や停止、状態確認など)を行ないます。
※デーモン: バックグラウンドで常に動いているプログラムのことを指し、メモリ上に常駐しています。ユーザーが直接操作しなくてもシステムの起動時から動き続けて、特定の処理を待ち受けたり実行したりします。d
は daemon の略です。
上記のコマンドを実行して、以下のいずれかの結果が得られます。
- active (running) → 起動中
- inactive → 停止中
- enabled → 自動起動設定済み
- disabled → 自動起動なし
このとき、SSHが動いていないとわかった場合、以下のコマンドを実行し、SSHをスタートさせます。
sudo systemctl start ssh
起動時に、自動的に立ち上がるようにしたい場合は以下のコマンドを実行します。
sudo systemctl enable ssh
これらの操作によって、SSHサーバーが有効になります。
2. ラズパイのIPアドレスを確認
モニターにコマンドプロンプトが表示されるので、以下のコマンドでIPアドレスを調べます。
ip a
上記のコマンドの結果として以下のような情報が出力されます。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether b8:27:eb:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
inet6 fe80::ba27:ebff:fe12:3456/64 scope link
ここで、Wifiルーター内のDHCPから動的にIPアドレスが割り当てられていることが
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
から判断できます。(dynamic)
※ eth0: 有線LAN接続のネットワークインターフェース名のこと
3. 固定IPの設定
このまま動的IPを使ってSSH接続ができますが、この動的IPは接続の都度変わっている可能性があり、次回ログイン時には異なるIPアドレスに変わってしまい、接続できなくなる可能性があります。
実際、試験的に一度ラズパイの電源をOFFにし、再度ONにした際、SSH接続できないという結果になりました。
そのため、SSH接続を安定させるために、固定IPを手動で設定することが個人的におすすめです。
3-1. 設定ファイルの作成
sudo vim /etc/netplan/01-netcfg.yaml
ファイル名に番号(例:01-xxx.yaml)をつけることで、他の設定ファイルよりも優先的に読み込まれるようにできます。
また、明示的なファイル名にすることで、どの設定が適用されているかを把握しやすくなります(設定の管理や確認がしやすくなります)。
※ /etc/netplan/ について
-
/etc
"et cetera" の略で、Linuxの設定ファイルを置く標準ディレクトリです。 -
netplan
Ubuntu Server(特に18.04以降)では、ネットワーク設定を netplan という仕組みで管理しています。
netplan は YAML形式の設定ファイルを用いて、IPアドレスの割り当て、デフォルトゲートウェイ、DNS、ルーティングなどのネットワーク設定を定義します。
設定ファイルは /etc/netplan/ 配下に置かれ、netplan apply
コマンドを実行することで反映されます。
3-2. YAML形式で固定IP情報を記述
network:
version: 2
renderer: networkd # systemd-networkdを使ってネットワーク設定を反映
ethernets:
eth0: # 有線LANインターフェース(通常ラズパイのLANポート)
dhcp4: no # DHCP(動的IP)を使わない → 固定IPにする
addresses:
- 192.168.0.X/24 # 固定IPアドレス(手動指定、Xは1〜254の任意)
nameservers:
addresses: [8.8.8.8, 1.1.1.1] # GoogleとCloudflareのDNSサーバー
routes:
- to: default
via: 192.168.0.1 # デフォルトゲートウェイ(通常はルーターのIP)
【各用語の意味】
- dhcp4: no → DHCPによる動的IPではなく、固定IPにしたい
- addresses: → 具体的な静的IPアドレスを指定
※ Wi-FiルーターのDHCPによる自動割り当ての範囲(例えば1〜99など)とかぶらないように、IPアドレスの末尾(ホスト部の数字)は3桁(100〜254など)に設定することをおすすめします。 - routes: → どの経路でインターネットに出るか(デフォルトゲートウェイ)を指定
- nameservers: → インターネット上の名前解決(DNS)を明示的に設定
※ DNSを設定する理由
DHCPを使っていない(dhcp4: no)場合、DNSも自動では設定されず、固定IPと同時にDNSも手動で設定する必要があるため。
GoogleとCloudflareのDNSサーバーは、無料で誰でも利用できるパブリックDNS(公開DNS)であり、信頼と実績があることから、設定に適していると言えます。
3-3. 設定を保存
3-4. 設定を反映させるコマンドを実行
以下のコマンドを実行し、設定を反映させます。
sudo netplan apply
3-5. 設定の確認
以下のコマンドを実行し、以下のような出力例が出力されていた場合、設定完了です。
ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether b8:27:eb:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::ba27:ebff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever
inet 192.168.0.100
のように、自分が設定した番号のIPアドレスがある場合、設定は成功です。
4. 実際にMacからUbuntu Serverに接続
4-1. MacBookのターミナルを開く
4-2. 以下のコマンドを実行する
ssh ユーザー名@ラズパイの固定IPアドレス
(例)
- 固定IPアドレス:192.168.1.100
- Ubuntu Server のユーザー名:ubuntu(デフォルトユーザー)
ssh ubuntu@192.168.1.100
初回接続時は以下のような警告が表示されますが、yes と入力して進めます。
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
パスワードを聞かれたら、ラズパイ側の Ubuntu のパスワードを入力します。
【確認事項】
- ラズパイの電源が入っているか
- 同じネットワーク(Wi-Fi/LAN)に接続されているか
- ファイアウォールやルーターの設定でポート22がブロックされていないか
- Ubuntu側でSSHが有効になっているか(通常 openssh-server をインストールすればOK)
これらに問題がなければ、MacBookからラズパイにSSH接続できるようになります。
もし、openssh-server がインストールされていなければ、以下のコマンドでインストールできます。
sudo apt install openssh-server
5. 接続成功!
接続が成功するとラズパイのシェル画面が表示され、Macから直接ラズパイを操作できるようになります。
※ ラズパイは電源をONにして、ネットワークに繋がっている状態にしていれば、いつでもMacからSSH接続が可能になります。そのため、以降は電源をONにするだけで接続できます。
まとめ
本記事では、Ubuntu Server をインストールしたラズパイをルーターにLANケーブルで有線接続し、同一LAN内のMacからSSH接続できるようにするまでの手順をまとめました。
これにより、インターネットを介さずとも、ローカルネットワーク内での擬似的なリモートログインが実現できました。
ただし、毎回のリモートログイン時に Ubuntu のユーザー名やIPアドレス、パスワードを入力するのは手間がかかります。
次回の記事では、この手間を省き、より簡単にリモートログインできる方法について紹介します。
最後までお読みいただきありがとうございました。
参考・画像引用元URL