前回の投稿では ssh コマンドの基本的な使用法や便利なオプションについて見てきました。しかし、毎回複雑なIPアドレス、ユーザー名、ポート番号などを入力するのは面倒なことです。そこで SSH Configファイル を活用すれば、この煩わしさを一度に解消できます。まるでブックマークのように、頻繁に使用するサーバー接続情報を保存して エイリアス(Alias) で簡単に接続できる魔法のファイルです。

SSH configをブックマークのように使用する開発者のイラスト


SSH Configファイルとは何ですか?

SSH Configファイル は、SSHクライアントの動作をユーザーがカスタマイズするための設定ファイルです。このファイルに特定のホストに対する接続情報(ユーザー名、ポート、使用するキーファイルなど)をあらかじめ保存しておくことで、後で接続する際に短いエイリアスだけで接続可能になります。

  • 位置: 通常、ユーザーのホームディレクトリ内の .ssh フォルダーに config という名前で存在します。
    • 例: ~/.ssh/config
  • ファイル作成: もし ~/.ssh/config ファイルが存在しない場合は、自分で作成すれば良いです。

    bash touch ~/.ssh/config chmod 600 ~/.ssh/config # セキュリティのため、読み書き権限は所有者にのみ付与


Configファイル作成ルール

Configファイルは単純なテキストファイルで、各ホストに対する設定は Host キーワードで始まり、ブロック形式で作成されます。

基本構造

Host [エイリアス]
    [オプション1] [値1]
    [オプション2] [値2]
    ...
  • Host [エイリアス]: このブロックの開始を示し、使用するエイリアス(Alias)を定義します。このエイリアスはSSHコマンドに使用します。エイリアスの代わりに実際のホストアドレス(IPまたはドメイン)を直接入力することも可能です。ワイルドカード文字(*?)も使用できます。

  • インデント: Host 以下のオプションはインデントする必要があります。空白やタブを使用しても良いですが、一貫性を保つことが望ましいです。

  • オプション: Host 以下には、そのエイリアスで接続する際に適用されるさまざまなSSHオプションを一覧で記載します。これらのオプションは以前に ssh -オプションという形で使用したものと同様です。

よく使われるオプション

オプション 説明 例の値
HostName 実際に接続するサーバーのIPアドレスまたはドメイン名 192.168.1.100 または example.com
User リモートサーバーに接続するユーザーアカウント名 ubuntu, ec2-user, root
Port リモートサーバーのSSHポート番号(デフォルトは22) 2222
IdentityFile 接続時に使用する秘密鍵ファイルのパス ~/.ssh/id_ed25519_myserver
ForwardAgent SSHエージェントフォワーディングを有効にする(Agent Forwarding, ssh-agent使用時) yes
StrictHostKeyChecking ホストキーの検査を厳格に行うかどうか(yes推奨) no(初期テスト時に一時的に使用)
PortForwarding ポートフォワーディングを許可するかどうか yes
LocalForward ローカルポートフォワーディングの設定(-Lオプションと同じ) 8080 localhost:80
ServerAliveInterval サーバーが生きているか確認するインターバル(秒単位) 60 (接続が切れないように)
ServerAliveCountMax サーバー確認失敗時の接続を切る前の再試行回数 3

SSH Configファイル作成例

よく接続するいくつかのサーバーに対する設定を ~/.ssh/config ファイルに追加してみましょう。

# 最初のサーバー: ウェブサーバー(エイリアス: 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-prodaws-devで接続すると、UserIdentityFileの設定が自動的に適応されます。 HostNameaws-prodで接続時に prodになります(後で ssh aws-prodコマンドで使用)。

  • 10.0.0.*: 10.0.0.x形式のIPアドレスに接続する際に自動的に adminユーザーとデフォルトの22ポートが適応されます。


SSH接続ボタンを押すとネットワークに広がる魔法のような画像

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ポートに接続されます)
  • aws-prod(ワイルドカードエイリアス)使用:
    ssh aws-prod
    Enter passphrase for key '/home/youruser/.ssh/aws_ec2_key.pem':
    ec2-user@aws-prod-hostname:~ $

注意: aws-prodのようにホスト名を特に指定していないワイルドカード Host の場合、HostNameオプションを明示的に指定するか、コマンドラインでホスト名を指定する必要があります。上記の aws-* の例では HostNameが指定されていないため、実際に ssh aws-prodを実行するとSSHクライアントはprodをホスト名として解釈しようとします。より明確に使用するためには、Host prod-serverのようにエイリアスとHostName prod.example.comをマッピングするのが一般的です。


Configファイル使用の利点

  • 便利さ: 長く複雑なSSHコマンドを短いエイリアスに置き換えることで、入力エラーを減らし、時間を節約できます。
  • 生産性: よく接続するサーバーを迅速に行き来できるため、作業効率が向上します。
  • 管理の容易さ: 接続関連の全ての設定を一カ所で管理できるため、保守が容易です。例えば、サーバーのIPアドレスが変更されてもConfigファイルだけ修正すればよいです。
  • セキュリティ: 重要な情報(例:キー ファイルのパス)をコマンドヒストリーに残さなくて済みます。

おわりに

SSH Configファイルは、SSHを使用するすべての開発者やシステム管理者にとって必須のツールです。このファイルを活用することで、あなたのSSH接続体験をより便利で効率的にすることができます。 ~/.ssh/configファイルを開いて、あなた自身のエイリアスを作ってみてください!

SSHに関連した他の投稿もぜひ読んでみてください!右側の検索窓で「ssh」と検索すると、SSHに関するさまざまな記事を探すことができます。

疑問がある場合は、いつでもコメントで質問してください!