0. 前提
環境
- Mac OSX
- Ruby(gemが使える)
sshの設定ファイルを複数に分けたい
- 通常、sshの接続先の設定は
~/.ssh/config
という名のファイルに記述される。 - 接続ホスト数が増えるほど、
~/.ssh/config
の中身は混乱をきたす。 - 複数人で共通のssh接続先を共有する場合、
~/.ssh/config
の中身を「部分的に」共有したい場合がある。 - そんな時、ssh設定ファイルが複数に分けられたら、便利ですよね!
というわけで、弊社片岡氏が作成したコマンドsshx
の導入手順と使い方を本ブログでは紹介します。
1. 導入手順
1-1. インストール
gem install sshx
1-2. プレーンsshからの移行処理
sshx hostname
ここまでやると、~/.sshx
というディレクトリが生成され、中身は
$ ls ~/.sshx/
config ssh_config
となっている。
~/.sshx/ssh_config
の中身は、sshxインストール前の~/.ssh/config
の中身と全く同じになっている。
代わりに、~/.ssh/config
の中身は、~/.sshx/
配下の設定ファイルにより自動生成される。
(つまり、sshxインストール後は~/.ssh/config
を直接いじることは2度とない。いじりたければ~/.sshx/ssh_config
をいじればよい)
1-3. ~/.sshx/config
の中身
下記のようにすれば良い。
NamespaceSeparator -
EnableAlias true
SshPath /usr/bin/ssh
- NamespaceSeparator:ネームスペースの区切り文字
- EnableAlias:sshに対してsshxのエイリアスを貼るかどうか
- SshPath:プレーンsshへのパス
1-4. 複数ファイルを設定ファイルとして置く
~/.sshx/
配下に設定ファイルを置くことで、これらを~/.ssh/config
に自動的に反映させることが出来る。
シロクでは各プロジェクトごとにsshのconfigファイルを共通で管理しており、その置き先にシンボリックリンクを貼ることで、~/.sshx/
配下に設定ファイルを擬似的に置いている。
ln -s /path/to/sshx_config ~/.sshx/hoge_config
(注1) 間違えてシンボリックリンクを貼ってしまった場合
unlink ~/.sshx/hoge_config
とすればシンボリックリンクを消せる。
(注2) hoge_config
の中身例
NameSpace hoge-prd
Host web
HostName xxxxx.xxxxx.com
User ec2-user
Port 22
StrictHostKeyChecking no
IdentityFile ~/.ssh/hoge.pem
Host batch
HostName yyyyy.yyyyy.com
User ec2-user
Port 22
StrictHostKeyChecking no
IdentityFile ~/.ssh/hoge.pem
NameSpace hoge-stg
Host web
HostName zzzzz.zzzzz.com
User ec2-user
Port 22
StrictHostKeyChecking no
IdentityFile ~/.ssh/hoge.pem
Host batch
HostName wwwww.wwwww.com
User ec2-user
Port 22
StrictHostKeyChecking no
IdentityFile ~/.ssh/hoge.pem
1-5. source
コマンドで上記を反映 & pemを置く
source ~/.bashrc
をすれば、上記が反映される。
あとは、hoge.pem
をチームメンバーから受け取り、~/.ssh/
配下に置けば、めでたく
ssh hoge-prd-web
ssh hoge-stg-batch
などといったコマンドでサーバにアクセスできるようになる。
【参考URL】
▼設定ファイル分割や、コマンド補完が使える拡張sshコマンドを公開しました。
http://blog.katty.in/4936