前回の投稿では `ssh` コマンドの基本的な使い方と便利なオプションを紹介しました。しかし、複雑なIPアドレス、ユーザー名、ポート番号を毎回入力するのは大変です。 そこで **SSH Config ファイル** を使えば、これらの手間を一度に解消できます。頻繁に利用するお気に入りのサーバーの接続情報を保存し、**エイリアス(Alias)** で簡単に接続できるようになります。 私自身、config ファイルの存在を知らなかった「完全初心者」の時期には、よく使うコマンドをそのまま `.bashrc` に alias として登録していました。config ファイルの書き方を知った後、いかに無駄な方法を使っていたかを痛感しました。 ![SSH config を知って感動する私の姿](/media/whitedec/blog_img/ssh_config_favorite_style.webp) --- ## SSH Config ファイルとは? {#sec-481141e7802b} **SSH Config ファイル** は SSH クライアントの動作をユーザーが定義できる設定ファイルです。このファイルに特定のホストに関する接続情報(ユーザー名、ポート、使用するキーなど)を事前に保存しておくと、後で接続する際に短いエイリアスだけで接続できます。 * **場所**:一般的にユーザーのホームディレクトリの `.ssh` フォルダ内に `config` という名前で存在します。SSH を初めてインストールしたばかりの場合、存在しないことがあります。その場合は作成してください。 * **ファイル作成**:もし `~/.ssh/config` ファイルが存在しない場合は、直接作成してください。**権限は必ず 600 にしてください。** ```bash 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` が自動で適用されます。 * `10.0.0.*`:`10.0.0.x` 形式の IP アドレスに接続する際に自動で `admin` ユーザーとデフォルト 22 番ポートが適用されます。 > 実際には `*` ワイルドカード方式をあまり使いません。サーバーごとに 1:1 で設定する方が管理しやすいです。
> **同じサーバーを別の設定でアクセスする場合もあるので**、その都度設定を追加し、レストランでメニューを選ぶようにエイリアスを選び、`ssh my-alias` と入力して接続する形にしています。 --- ![SSH 接続ボタンを押すとネットワークに魔法のように広がる画像](/media/whitedec/blog_img/ssh_config_network_magic.webp) ## Config ファイルの使い方 {#sec-e176d1ccdfce} Config ファイルに設定を保存したら、実際の接続はずっと簡単になります。上記例を基に試してみましょう。 ### 1. エイリアスで接続 {#sec-b0810f8f4908} エイリアスだけを使って SSH 接続コマンドを実行します。 * **`webserver` エイリアス使用**: ```bash 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` エイリアス使用**: ```bash ssh devbox Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev': developer@devbox-domain:~ $ ``` >(この接続と同時に、ローカルの 8000 番ポートが `dev.example.com` の 80 番ポートへ転送されます) --- ## Config ファイルを使うメリット {#sec-2c234f7e8725} * **便利さ**:長く複雑な SSH コマンドを短いエイリアスに置き換えることで入力ミスを減らし、時間を節約できます。 * **生産性**:頻繁に接続するサーバーを素早く行き来でき、作業効率が向上します。 * **管理のしやすさ**:すべての接続設定を一箇所で管理でき、保守が容易です。例えばサーバーの IP が変更されても Config ファイルを修正するだけで対応できます。 * **セキュリティ**:重要情報(例:キー ファイルのパス)をコマンド履歴に残さずに済みます。 --- ## まとめ {#sec-9c659c3d712e} SSH Config ファイルは、SSH を使用するすべての開発者とシステム管理者にとって必須のツールです。このファイルを活用して、SSH 接続をより便利で効率的にしましょう。`~/.ssh/config` ファイルを開き、あなた自身のエイリアスを作成してみてください! SSH に関する他の投稿もぜひご覧ください!右側の検索欄で「ssh」と検索すると、SSH 関連のさまざまな記事が見られます。 疑問があればいつでもコメントで質問してください!