はじめまして、コンテンツ開発事業部の大瀧です。
横断的に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