自宅にサーバーを構築すると、設定変更やファイル編集のたびにサーバーの前に座る必要があるのでしょうか?
答えは「No」です。SSH(Secure Shell)を使えば、MacBookのターミナルから自宅LAN内のサーバーにセキュアに接続し、まるでそのサーバーを直接操作しているように作業できます。
本記事では、MacBookからNUCBox G3 Plus(Linuxサーバー)へSSH接続するための設定手順を、公開鍵認証の仕組みから~/.ssh/configによる快適接続設定までゼロから解説します。
Raspberry Piを使っている方も、同じ手順でSSH接続できます。
なぜこの機能を作ったのか?
自宅サーバーを構築していると、設定ファイルを修正したり、ログを確認したり、プログラムを更新したりと、サーバーを操作する機会が頻繁にあります。
毎回サーバーにモニターとキーボードを接続して操作するのは非常に手間がかかります。
SSHを使えば、MacBookのターミナルからリモートでサーバーを操作できるため、ソファに座ったまま、またはリビングのテーブルからでもサーバー管理ができるようになります。
また、VS Codeの「Remote SSH」拡張機能と組み合わせれば、サーバー上のファイルをMacのエディターで直接編集することも可能です。

サーバーの前まで行かなくても、MacBookのターミナルからサーバーをサクサク操作したい!
実現したいこと
- MacBookのターミナルから自宅LAN内のサーバーにSSH接続できる
- パスワード入力なしで、SSHキーだけで安全にログインできる(公開鍵認証)
ssh nucboxのような短いコマンドだけで接続できる(~/.ssh/config活用)- VS Code Remote SSH でサーバー上のファイルをMacで直接編集できる
- 複数のサーバー(NUCBox、Raspberry Pi等)への接続をまとめて管理できる
この記事でわかること
- SSH公開鍵認証の仕組み(秘密鍵・公開鍵・authorized_keysの関係)
- macOS標準のOpenSSHでSSH鍵ペアを生成する方法(ed25519)
- 公開鍵をサーバーに登録する方法(ssh-copy-id コマンド)
- ~/.ssh/config を使って接続を便利にする方法
- サーバー側のSSH設定(sshd_config)を確認・強化する方法
- macOSのキーチェーン連携で毎回のパスフレーズ入力を省略する方法
必要な準備と用意するもの
- MacBook(本記事はMacBook Air M2で確認。Intel Macも同じ手順)
- 自宅サーバー(本記事はNUCBox G3 Plus、IP: 192.168.68.89)
- Raspberry Piでも同じ手順で設定できます
- MacBookとサーバーが同じLAN内に接続されていること
- macOS(OpenSSHクライアントが標準搭載、追加インストール不要)
- Linux(Ubuntu / Debian系)サーバー
- openssh-server(SSH接続を受け付けるサーバー側ソフト)
- (オプション)VS Code + Remote SSH 拡張機能
完成イメージ
設定完了後は、MacBookのターミナルで以下のように入力するだけでサーバーに接続できます。
# ~/.ssh/config に設定済みなら、たったこれだけでサーバーに接続できる
$ ssh nucbox
# 接続後はサーバーのターミナルが使える
user@nucbox-g3-plus:~$ hostname
nucbox-g3-plus
user@nucbox-g3-plus:~$
また、VS Code の Remote SSH 拡張機能を使えば、サーバー上のファイルをMacのエディターで直接開いて編集することもできます。
システムの仕組み
SSH 公開鍵認証とは?
SSH接続には「パスワード認証」と「公開鍵認証」の2種類があります。本記事では、より安全な公開鍵認証を使います。
公開鍵認証の仕組み
① Mac側で「秘密鍵(自分だけが持つ)」と「公開鍵(サーバーに渡す)」のペアを生成する
② 公開鍵をサーバーの ~/.ssh/authorized_keys に登録する
③ 接続時に、サーバーが公開鍵を使って「数学的な問題」を出す
④ MacBook側が秘密鍵を使って正しく回答できれば認証成功
⑤ 秘密鍵はMac外に出ないため、パスワードを使わず安全にログインできる
[MacBook] [サーバー (NUCBox)]
| |
|-- 接続リクエスト ------------------>|
| |-- authorized_keys から公開鍵を取得
| |-- 乱数をMacの公開鍵で暗号化
|<-- 暗号化された「問題」 -----------|
|-- 秘密鍵で復号して回答 ----------->|
| |-- 回答を検証 → 一致すれば認証OK
|<-- 接続確立 ----------------------|
ed25519 vs RSA — どのアルゴリズムを使うか
ed25519(推奨)
現在推奨されている最新のアルゴリズムです。RSAに比べて鍵が短く、処理が速く、セキュリティも同等以上です。新規に鍵を作成するなら -t ed25519 を使いましょう。
RSAについて
古くから使われているアルゴリズムで、現在も広く使われています。既にRSA鍵でサーバーに接続済みであれば、そのまま使い続けても問題ありません。新規環境はed25519を推奨。
実装のポイント
パスワード認証を無効化する
公開鍵認証が設定できたら、サーバー側の sshd_config で PasswordAuthentication no にしてパスワード認証を無効化しましょう。ブルートフォース攻撃への耐性が大幅に上がります。
パスフレーズ付きの鍵を作成する
SSH鍵にパスフレーズを設定しておくと、仮にMacが盗まれても秘密鍵を悪用されにくくなります。macOSのキーチェーン連携(UseKeychain yes)と組み合わせれば、最初の一回だけパスフレーズを入力すればあとは自動で使えます。
注意:パスワード認証を無効にするタイミング
PasswordAuthentication no を設定する前に、必ずSSH鍵による接続が成功することを確認してください。順番を間違えると、サーバーにログインできなくなります(物理アクセスが必要になります)。
事前準備
サーバー側のSSHサーバーが動いているか確認する
サーバーに物理接続またはパスワード認証が有効な状態でSSH接続して、SSH サーバーの状態を確認します。
# openssh-server がインストールされているか確認
$ dpkg -l openssh-server
# SSH サービスが動作しているか確認
$ sudo systemctl status ssh
# ● ssh.service - OpenBSD Secure Shell server
# Loaded: loaded (/lib/systemd/system/ssh.service; enabled; ...)
# Active: active (running) ... ← "active (running)" であればOK
インストールされていない場合は以下でインストールします。
$ sudo apt update
$ sudo apt install openssh-server
$ sudo systemctl enable ssh
$ sudo systemctl start ssh
サーバーのIPアドレスとユーザー名を確認する
# サーバーのIPアドレスを確認
$ ip addr show | grep "inet " | grep -v 127.0.0.1
inet 192.168.68.89/24 brd 192.168.68.255 scope global eth0
# ログイン中のユーザー名を確認
$ whoami
user
サーバーIPを固定する
Decoルーターの「アドレス予約」機能(MACアドレスベースのIP固定)を使って、サーバーのIPアドレスを固定しておきましょう。IPが変わるたびにSSH設定を修正する手間が省けます。本記事の環境では 192.168.68.89 を固定IPとして使用しています。
実装方法
① MacBook側でSSH鍵ペアを生成する
MacBookのターミナル(ターミナル.app または iTerm2)を開いて、SSH鍵ペアを生成します。
# ed25519 形式で SSH 鍵ペアを生成する
$ ssh-keygen -t ed25519 -C "mac-to-homeserver"
# 保存先を聞かれる(デフォルトのままEnterでOK)
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519): [Enter]
# パスフレーズを設定する(推奨。空でもOKだが、設定した方が安全)
Enter passphrase (empty for no passphrase): [パスフレーズを入力]
Enter same passphrase again: [同じパスフレーズを再入力]
# 鍵が生成された
Your identification has been saved in /Users/username/.ssh/id_ed25519
Your public key has been saved in /Users/username/.ssh/id_ed25519.pub
生成された鍵ファイルを確認します。
$ ls -la ~/.ssh/
-rw------- 1 username staff 411 id_ed25519 ← 秘密鍵(絶対に外部に出さない)
-rw-r--r-- 1 username staff 102 id_ed25519.pub ← 公開鍵(サーバーに登録する)
秘密鍵(id_ed25519)は絶対に他人に渡さない
秘密鍵はパスポートのようなものです。メールやチャットで送ったり、クラウドストレージにアップロードしたりしてはいけません。公開鍵(.pubファイル)はサーバーに渡しても安全です。
② 公開鍵をサーバーに登録する
ssh-copy-id コマンドを使うと、公開鍵をサーバーに自動で登録できます。
このとき、サーバーのパスワード認証が有効になっている必要があります。
# ssh-copy-id でサーバーに公開鍵を登録する
# 書式: ssh-copy-id -i ~/.ssh/id_ed25519.pub <ユーザー名>@<サーバーIP>
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.68.89
# サーバーのパスワードを入力する(この一回だけ)
user@192.168.68.89's password: [サーバーのパスワード]
# 登録成功のメッセージ
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@192.168.68.89'"
ssh-copy-id が使えない場合(手動登録)
サーバーに直接アクセスできる場合は、手動でも登録できます。
Mac側で cat ~/.ssh/id_ed25519.pub の出力内容をコピーして、サーバー側の ~/.ssh/authorized_keys にテキストとして貼り付けます(1行1鍵)。ファイルのパーミッションは chmod 600 ~/.ssh/authorized_keys にしてください。
③ まずSSH接続を確認する
鍵の登録が完了したら、接続を確認します。
# フルコマンドでSSH接続テスト
$ ssh user@192.168.68.89
# パスフレーズを設定した場合は入力が求められる(Macのキーチェーンに保存可能)
Enter passphrase for key '/Users/username/.ssh/id_ed25519': [パスフレーズを入力]
# 接続成功!サーバーのターミナルが使える
user@nucbox-g3-plus:~$
接続成功の確認ポイント
プロンプトが user@サーバー名:~$ に変わったら接続成功です。exit または Ctrl+D でサーバーから切断できます。
④ サーバー側のSSH設定を強化する(sshd_config)
SSH鍵での接続が確認できたら、サーバー側でパスワード認証を無効化してセキュリティを強化します。
$ sudo nano /etc/ssh/sshd_config
以下の項目を確認・設定します(# がある行はコメントアウトされているので外すか、新しく追記します)。
# rootでのSSHログインを禁止する(重要)
PermitRootLogin no
# 公開鍵認証を有効にする
PubkeyAuthentication yes
# パスワード認証を無効にする(鍵の登録が完了してから設定すること!)
PasswordAuthentication no
# キーボードインタラクティブ認証も無効にする
KbdInteractiveAuthentication no
設定を保存したら、SSHサービスを再起動して設定を反映させます。
$ sudo systemctl restart ssh
# 現在のSSHセッションを切断せずに、別のターミナルから接続確認してから設定を確定させる
重要:sshd 再起動後は別ウィンドウで接続確認する
設定変更後は、現在のSSHセッションを閉じずに、MacBookの別のターミナルウィンドウを開いてSSH接続できることを確認してください。接続できなかった場合は、現在のセッションから設定を修正できます。
⑤ ~/.ssh/config を設定して接続を快適にする
毎回 ssh user@192.168.68.89 と入力するのは手間がかかります。~/.ssh/config ファイルを作成すると、ssh nucbox だけで接続できるようになります。
$ nano ~/.ssh/config
# NUCBox G3 Plus(メインサーバー)
Host nucbox
HostName 192.168.68.89
User user
IdentityFile ~/.ssh/id_ed25519
AddKeysToAgent yes
UseKeychain yes
# Raspberry Pi 5(必要なら追加)
Host raspi5
HostName 192.168.68.109
User pi
IdentityFile ~/.ssh/id_ed25519
AddKeysToAgent yes
UseKeychain yes
# 共通設定(全Hostに適用)
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
各設定項目の意味は以下のとおりです。
| 設定項目 | 意味 |
|---|---|
Host | 接続名のエイリアス(ssh nucbox で使う名前) |
HostName | 実際のIPアドレスまたはホスト名 |
User | SSHログインユーザー名 |
IdentityFile | 使用する秘密鍵のパス |
AddKeysToAgent yes | ssh-agentに鍵を追加(パスフレーズの再入力を省略) |
UseKeychain yes | macOSのキーチェーンにパスフレーズを保存(Mac専用) |
ServerAliveInterval | 切断防止のためのkeep-alive送信間隔(秒) |
設定ファイルのパーミッションを適切に設定します。
$ chmod 600 ~/.ssh/config
⑥ macOSのキーチェーンにパスフレーズを登録する
パスフレーズを設定した場合、毎回入力するのは手間がかかります。macOSのキーチェーンに登録すると、初回のみの入力で済みます。
# ssh-agentに秘密鍵を追加してmacOSのキーチェーンに保存する
$ ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# パスフレーズを1回だけ入力する
Enter passphrase for /Users/username/.ssh/id_ed25519: [パスフレーズ]
Identity added: /Users/username/.ssh/id_ed25519 (mac-to-homeserver)
macOS Ventura以降について
macOS Ventura(13.0)以降では ssh-add -K は非推奨になり、ssh-add --apple-use-keychain を使います。どちらも同じ機能です。
動作確認
SSH接続の最終確認
# エイリアスで接続できるか確認
$ ssh nucbox
# 接続成功
user@nucbox-g3-plus:~$
# ホスト名・ユーザー名・IPを確認
user@nucbox-g3-plus:~$ hostname
nucbox-g3-plus
user@nucbox-g3-plus:~$ whoami
user
user@nucbox-g3-plus:~$ ip addr show | grep "inet " | grep -v 127
inet 192.168.68.89/24 ...
# 切断
user@nucbox-g3-plus:~$ exit
logout
Connection to 192.168.68.89 closed.
パスワード認証が無効になっているか確認する
# -o で認証方法を鍵のみに限定して接続テスト(パスワード認証が無効になっているか確認)
$ ssh -o PreferredAuthentications=publickey nucbox
user@nucbox-g3-plus:~$ ← 成功すればOK
# パスワードのみで試みると拒否されることを確認
$ ssh -o PreferredAuthentications=password user@192.168.68.89
user@192.168.68.89: Permission denied (publickey). ← パスワード認証が無効になっている
(オプション)VS Code Remote SSH での接続
VS Code に「Remote - SSH」拡張機能をインストールすると、~/.ssh/config の設定を使ってサーバー上のファイルをGUIで編集できます。
- VS Code を開き、拡張機能(Ctrl+Shift+X)で「Remote - SSH」を検索してインストール
- 左下の「><」アイコン → 「Connect to Host...」→
nucboxを選択 - 新しいウィンドウが開き、サーバー上のファイルをMacのVS Codeで直接編集できる
Remote SSH × VS Code は最強の開発環境
サーバー上のPythonスクリプトやNginx設定ファイルを、VS CodeのGUI上で快適に編集できます。ターミナルも統合されているため、編集→実行→確認のサイクルが格段に楽になります。
トラブルシューティング
Q: Permission denied (publickey) と出て接続できない
A: 以下を確認してください。
① サーバーの ~/.ssh/authorized_keys に公開鍵が正しく登録されているか(cat ~/.ssh/authorized_keys)
② authorized_keys のパーミッションが 600 になっているか(chmod 600 ~/.ssh/authorized_keys)
③ ~/.ssh/ ディレクトリのパーミッションが 700 になっているか(chmod 700 ~/.ssh)
④ ~/.ssh/config の IdentityFile が正しい秘密鍵を指しているか
Q: ssh: connect to host 192.168.68.89 port 22: Connection refused
A: サーバー側でSSHサービスが起動していない可能性があります。サーバーに物理接続して sudo systemctl start ssh を実行してください。またはUFWなどのファイアウォールでポート22がブロックされていないか確認してください。
Q: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! と出た
A: サーバーを再インストールするなどして、サーバーのSSHホスト鍵が変わった場合に表示されます。Mac側の ~/.ssh/known_hosts から対象IPの行を削除してから再接続してください。
$ ssh-keygen -R 192.168.68.89
まとめ
本記事では、MacBookから自宅LAN内のサーバーへSSH接続する方法を解説しました。
- macOS には OpenSSH クライアントが標準搭載されており、追加インストール不要
ssh-keygen -t ed25519で安全なSSH鍵ペアを生成できるssh-copy-idコマンドで公開鍵を簡単にサーバーへ登録できる- サーバー側で
PasswordAuthentication noにすることでセキュリティを強化できる ~/.ssh/configを使えばssh nucboxだけで接続できて非常に快適- macOSのキーチェーン連携でパスフレーズの毎回入力を省略できる
- VS Code Remote SSH を使えばGUIでサーバーのファイルを編集できる
これでサーバーの前に座らずとも、ソファや自室のMacBookからサーバーを操作できるようになりました。
次のステップとして、外出先からもSSH接続できるように、ポート転送や外部からのアクセス設定を追加すれば、どこからでも自宅サーバーを管理できる環境が整います。

