Edited at

~/.ssh/configについて

More than 1 year has passed since last update.


.ssh/configとは

.ssh/configとは、ssh経由でのリモートサーバーの接続する際に利用される設定ファイルです。


.ssh/configを書くと何が嬉しいか

たとえばですが、sshコマンドでリモート接続する際の一般的な記述は以下のようになります。

# 一般的な接続方法

ssh hoge.example.com

# ユーザー名を指定する場合は以下
ssh ユーザー名@hoge.example.com

 シンプルな接続の場合は上記のような簡易な記述で済むのでそんなに面倒臭くないですが、ポート番号がデフォルト(22)では無い場合、公開鍵認証で、鍵がデフォルトの名前ではなかったりした場合、コマンドが複雑になってしまいます。

# ポート名を指定する場合

ssh ユーザー名@ホスト名 -p ポート番号

# 公開鍵認証の場合
ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前

# ポート名及び、公開鍵認証の場合
ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前 -p ポート番号

こんな時に.ssh/configは役立ちます。

Host 任意の接続名(hoge)

HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile 鍵へのPATH(例えば~/.ssh/hoge.key)

このような設定を書いていると

ssh hoge

このような記述で接続出来るようになります。

私はHostの任意の接続名にプレフィックスとしてアンダーバーを2個付けています。Hostの補完が効いて便利です。(zshの場合。bashは知らない)

アンダーバーを2個つけてタブを押すと補完がでる

ssh __[TAB]
__hoge __fuga
__bar

また、せっかく接続したのに一定時間操作しないとサーバーから接続が切断されてしまったりする事があります。

こんな時に.ssh/configは役立ちます。


.ssh/config

# サーバーへ定期的(今回は60秒毎)に生きている報告をする(全体的に記述を有効にする場合は先頭辺りに書いておくといい)

ServerAliveInterval 60

# 個別に有効にしたい場合は、個別の設定に行を開けないで追記しておくといい
Host 任意の接続名(hoge)
HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile 鍵へのPATH(例えば~/.ssh/hoge.key)
ServerAliveInterval 60


と設定した後で

ssh hoge

で接続すると、自動でssh_agentが生きている報告をするので、接続が切断されなくなります。

 簡単に接続出来て、細かい所に気配りが出来るなんて便利なので、使うしかないですよね。


.ssh/configで困ること[追記あり]


設定ファイルが分割出来ない

追記内容


まず、以下のコマンドをそっと実行してみてください。

$ ssh -V

戻ってきたバージョンが 7.3p1 以降の場合は、.ssh/config でincludeキーワードが利用できますので、そちらの検討をするのがいいかもしれません。

その場合、以下のURLが参考になるかと思います。

(追記ここまで)


 書くと大変便利になるのですが、.ssh/configは一つの設定ファイルで分割ができないので、接続先が増えていくと設定ファイルの管理がとたんに面倒になります。


なので設定ファイルを分割してみた

設定ファイルが分割出来ると何が嬉しいかというと、


  • 1つ1つの設定ファイルの行数を短く押さえられるので管理が若干楽になります

  • プロジェクト毎に設定ファイルを分割出来るので、プロジェクトメンバーで共有できたりするしれません

  • 終わったプロジェクトや使わなくなった設定を削除しやすくなるので、設定ファイルに使わなくなった設定が残りづらくなります

この問題にはいろいろな方が立ち向かっているので、以下のURLなどが参考になります。

自分の場合は、

の記事の方法が手軽なので利用させてもらっています。(tmufさんありがとうございます)

手順としては、以下のようになります。


  • 鍵の置き場所と分割した設定ファイルの置き場所を作成します

$ mkdir ~/.ssh/keys

$ mkdir ~/.ssh/conf.d
$ chmod 700 ~/.ssh/keys ~/.ssh/conf.d


  • 分割した設定ファイルを~/.ssh/conf.dに鍵を~/.ssh/keysに配置します

$ ls -al ~/.ssh/keys ~/.ssh/conf.d

~/hoge/.ssh/conf.d:
config <-- 共通の設定を書く用の設定ファイル
# -- 以下個別の設定ファイル --
hoge.conf
fuga.conf
bar.conf
foo.conf

~/.ssh/keys:
# -- それぞれの鍵 --
hoge.key
fuga.key


  • .zshrcなどにsshの設定を結合する用のコマンドエイリアスを作成します


.zshrc

alias ssh-config-update="cat ~/.ssh/conf.d/common-config ~/.ssh/conf.d/*.conf > ~/.ssh/config"



  • .zshrcなどを再読み込みして、~/.ssh/configを更新します(~/.ssh/configは書き換えられてしまうので、注意が必要です)

$ source ~/.zshrc

$ ssh-config-update

こんな感じで、比較的手軽に設定ファイルを分割出来るようになります。


まとめ

.ssh/configは便利なので、アクセスする接続先が多い方は是非利用してみて下さい。

zshはとてもいいです。