前回の投稿では ssh コマンドの基本的な使い方と便利なオプションを紹介しました。しかし、複雑なIPアドレス、ユーザー名、ポート番号を毎回入力するのは大変です。
そこで SSH Config ファイル を使えば、これらの手間を一度に解消できます。お気に入りのように頻繁に使うサーバーの接続情報を保存し、エイリアス(Alias) で簡単に接続できるようになります。
私自身、config ファイルの存在を知らなかった「完全初心者」の時期には、よく使うコマンドをそのまま .bashrc に alias として登録していました。config ファイルの書き方を知った後で、どれだけ無駄な方法を使っていたかが分かりました。

SSH Config ファイルとは?
SSH Config ファイル は SSH クライアントの動作をユーザー定義する設定ファイルです。このファイルに特定のホストに関する接続情報(ユーザー名、ポート、使用するキーなど)を事前に保存しておくと、後で接続する際に短いエイリアスだけで接続できます。
-
場所:一般的にユーザーのホームディレクトリの
.sshフォルダ内にconfigという名前で存在します。ssh を初めてインストールしたばかりなら存在しない場合があります。その場合は作成します。 -
ファイル作成:もし
~/.ssh/configファイルが無ければ、直接作成します。権限は必ず 600 にしてください。
touch ~/.ssh/config
chmod 600 ~/.ssh/config # セキュリティのため権限設定は必須!
```
---
## Config ファイルの書き方 {#sec-a6ba2fff88f5}
Config ファイルはシンプルなテキストファイルで、各ホストに関する設定は `Host` キーワードで始まり、ブロック形式で記述します。
#### 基本構造
Host [エイリアス] [オプション1] [値1] [オプション2] [値2] ...
* **`Host [エイリアス]`**:このブロックの開始を示し、使用する **エイリアス(Alias)** を定義します。エイリアスの代わりに実際のホストアドレス(IPまたはドメイン)を直接入れることも可能です。ワイルドカード文字(`*`、`?`)も使用できます。
* **インデント**:`Host` の下のオプションは **インデント** する必要があります。空白やタブを使っても構いませんが、一貫性を保つことが重要です。
* **オプション**:`Host` の下には、そのエイリアスで接続する際に適用されるさまざまな SSH オプションを列挙します。これらは以前 `ssh -オプション` 形式で使用したものと同じです。
### よく使うオプション {#sec-488803d47bdf}
| | | |
| --- | --- | --- |
| **オプション** | **説明** | **例** |
| `HostName` | 実際に接続するサーバーの IP アドレスまたはドメイン名 | `192.168.1.100` または `example.com` |
| `User` | リモートサーバーに接続するユーザー名 | `ubuntu`、`ec2-user`、`root` |
| `Port` | リモートサーバーの SSH ポート番号(デフォルトは 22) | `2222` |
| `IdentityFile` | 接続時に使用する秘密鍵ファイルのパス | `~/.ssh/id_ed25519_myserver` |
| `ForwardAgent` | SSH エージェント転送を有効にする(`ssh-agent` 使用時) | `yes` |
| `StrictHostKeyChecking` | ホストキー検証を厳格にするかどうか(`yes` 推奨) | `no`(初期テスト時に一時的に使用) |
| `PortForwarding` | ポート転送を許可するか | `yes` |
| `LocalForward` | ローカルポート転送設定(`-L` オプションと同等) | `8080 localhost:80` |
| `ServerAliveInterval` | サーバーが生存しているか確認する間隔(秒単位) | `60`(切断防止) |
| `ServerAliveCountMax` | サーバー確認失敗時に接続を切断する前の再試行回数 | `3` |
---
## SSH Config ファイルの作成例 {#sec-92c9daf3ee29}
頻繁に接続するいくつかのサーバーの設定を `~/.ssh/config` ファイルに追加してみましょう。
```ini
# 第一サーバー:ウェブサーバー(エイリアス:webserver)
Host webserver
HostName 192.168.1.100
User ubuntu
Port 2222
IdentityFile ~/.ssh/id_ed25519_webserver # ウェブサーバー専用キー使用
# 第二サーバー:開発サーバー(エイリアス:devbox)
Host devbox
HostName dev.example.com
User developer
IdentityFile ~/.ssh/id_rsa_dev # RSA キー使用
# このサーバーに接続する際にローカル 8000 ポートをリモートサーバーの 80 ポートへ転送
LocalForward 8000 localhost:80
# 第三サーバー:すべての AWS EC2 サーバー(エイリアス:aws-*)
Host aws-*
User ec2-user
IdentityFile ~/.ssh/aws_ec2_key.pem
# 接続が切れないように定期的にシグナルを送る
ServerAliveInterval 60
ServerAliveCountMax 3
# 特定 IP 範囲に対する一般設定(エイリアス:10.0.0.*)
Host 10.0.0.*
User admin
Port 22
説明:
webserver:192.168.1.100サーバーにubuntuユーザーで2222番ポートとid_ed25519_webserverキーを使って接続できます。devbox:dev.example.comサーバーにdeveloperユーザーでid_rsa_devキーを使って接続し、ローカル 8000 番ポートをリモート 80 番ポートへ転送します。aws-*:aws-で始まるすべてのエイリアスに適用される設定です。例えばaws-prodやaws-devで接続するとUserとIdentityFileが自動で適用されます。HostNameはaws-prodで接続時にprodになります(後でssh aws-prodコマンドで使用)。10.0.0.*:10.0.0.x形式の IP アドレスに接続する際に自動でadminユーザーとデフォルト 22 番ポートが適用されます。
実際には
*ワイルドカード方式をあまり使いません。サーバーごとに 1:1 で設定する方が管理しやすいです。
同じサーバーを別の設定でアクセスする場合もあるので、その都度設定を追加し、レストランでメニューを見て料理を選ぶようにエイリアスを選んでssh my-aliasのように注文する形にしています。

Config ファイルの使い方
Config ファイルに設定を保存したら、実際の接続はずっと簡単になります。上記例を基に試してみましょう。
1. エイリアスで接続
エイリアスだけを使って SSH 接続コマンドを実行します。
webserverエイリアス使用:
ssh webserver
Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver':
ubuntu@webserver-ip:~ $
このコマンドは内部的に
ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100と同等に動作します。
devboxエイリアス使用:
ssh devbox
Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev':
developer@devbox-domain:~ $
(同時にローカル 8000 番ポートで接続すると dev.example.com の 80 番ポートへ接続されます)
Config ファイルを使うメリット
- 便利さ:長く複雑な SSH コマンドを短いエイリアスに置き換えることで入力ミスを減らし、時間を節約できます。
- 生産性:頻繁に接続するサーバーを素早く行き来でき、作業効率が向上します。
- 管理のしやすさ:すべての接続設定を一箇所で管理でき、保守が容易です。例えばサーバーの IP が変更されても Config ファイルだけを修正すれば済みます。
- セキュリティ:重要情報(例:キー ファイルのパス)をコマンド履歴に残さずに済みます。
まとめ
SSH Config ファイルは、SSH を使用するすべての開発者とシステム管理者にとって必須のツールです。このファイルを活用して、SSH 接続体験をより便利で効率的にしましょう。~/.ssh/config ファイルを開き、あなた自身のエイリアスを作成してみてください!
SSH に関する他の投稿もぜひご覧ください!右側の検索欄で「ssh」と検索すると、SSH 関連のさまざまな記事が見られます。
疑問があればいつでもコメントで質問してください!