個人的.ssh/configの管理方法

はじめまして、コンテンツ開発事業部の大瀧です。 横断的にPJへ参加することが多く.ssh/configが肥大化してしまったので整理しました。 その管理方法について紹介しようと思います。

なおターミナルからsshコマンドを使用してログインする場合の設定になります。 Tera TermなどSSHクライアントを使用している場合は、SSHクライアント側で接続先の保存機能があると思いますのでそちらを使用していただけると。

.ssh/configの基本的な書き方

まずは.ssh/configの基本的な書き方について説明します。

通常sshコマンドでサーバーにログインするには以下のようにsshコマンドを実行します。

$ ssh -i [秘密鍵のpath] [ユーザー]@[ホスト名]

このコマンドを簡略化するためには.ssh/configに以下のように追記します。

Host pj1
    HostName     [ホスト名]
    Port         22
    User         [ユーザー名]
    IdentityFile [秘密鍵のpath]

これでHostに設定した名前で簡単にログインができるようになります。

$ ssh pj1

基本的にはこの5行を書けばいいので、あとはコピペで設定を量産するだけです。

Host pj1
    HostName     [ホスト名]
    Port         22
    User         [ユーザー名]
    IdentityFile [秘密鍵のpath]

Host pj2
    HostName     [ホスト名]
    Port         22
    User         [ユーザー名]
    IdentityFile [秘密鍵のpath]

Host pj3
    HostName     [ホスト名]
    Port         22
    User         [ユーザー名]
    IdentityFile [秘密鍵のpath]
$ ssh pj1
$ ssh pj2
$ ssh pj3

.ssh/configの整理

ここからが本題になります。

コピペで量産した結果肥大化してしまった.ssh/configの整理をしたいと思います。 そこでopensshのIncludeを使用して分割して管理します。 ちなみに自分の設定は現時点で59ホスト分の設定がありました。。

Include設定

分割した.ssh/configはconfig.dディレクトリ以下に保存し、そこから読み込むように設定します。 Host *ですべてのホストに対して共通の設定を行うこともできるので必要であればここに記述します。

Include config.d/*

Host *
    ServerAliveInterval 60
    TCPKeepAlive yes
    AddKeysToAgent yes
    IdentitiesOnly yes

ファイル構成

config.dディレクトリとid_rsa.dディレクトリを作成。

config.dディレクトリ 分割した設定をPJごとにまとめたファイルを保存するディレクトリ

id_rsa.dディレクトリ 秘密鍵を保存するディレクトリ

ファイル構成は以下のような感じになっています。

~/.ssh/
├── config
├── config.d
│   ├── config_pj1
│   ├── config_pj2
│   ├── config_pj3
│   └── config_pj4
├── id_rsa
├── id_rsa.d
│   ├── id_rsa_pj1
│   ├── id_rsa_pj2
│   ├── id_rsa_pj3
│   └── id_rsa_pj4
├── id_rsa.pub
└── known_hosts

これで一通りの設定が完了しました。 PJごとの管理になったので、ホストの追加削除、PJ開始終了時の対応も楽になりました。

応用編

最後に.ssh/configを使用した応用パターンを記載しておきます。

多段SSH

踏み台サーバー経由でサーバーにログインしたい場合には以下のような設定で対応ができます。

# 踏み台サーバー
Host proxy
    HostName     [ホスト名]
    Port         22
    User         [ユーザー名]
    IdentityFile [秘密鍵のpath]

# ログイン先サーバー
Host pj1
    HostName     [ホスト名]
    Port         22
    User         [ユーザー名]
    IdentityFile [秘密鍵のpath]
    ProxyCommand ssh proxy -W %h:%p

tecotec.co.jp