それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ssh の秘密鍵をサーバー毎にかえる方法

SSH秘密鍵を使い分けたい。

git サーバーや自宅サーバーや、さくらVPSAmazonクラウド・・・そしてお仕事のサーバーなど SSHサーバーが多くなってくると鍵の管理が面倒になったりします。

サーバーごとに秘密鍵を変えることが出来る

ssh コマンドを使う際に、コマンドのオプションで鍵を指定することが出来る。

ssh -i  path/to/my/private_key.file myserver

でも面倒くさい・・・鍵を毎回指定するのが面倒だ。

そして ssh 設定をつかう github や SourceTreeなどのアプリケーションだと起動オプションで鍵を指定することが出来ない。

ssh 設定を使う

ssh には ~/ssh/config という設定ファイルがある。

このファイルを使えば、サーバー毎、鍵毎に設定と変えることが出来る。

Host 192.168.2.1
   Hostname 192.168.2.1
   IdentityFile ~/.ssh/router.key

SourceTreeなどのユーザーのSSH設定を読み込んでくれるアプリケーションを使う場合でも大丈夫

ssh 設定の例

複数の鍵とユーザー名を設定で切り分ける。

Host my-rooter
   Hostname 192.168.2.1
   IdentityFile ~/.ssh/router.key

Host my-rooter-root
   Hostname 192.168.2.1
   IdentityFile ~/.ssh/my-root.key
   user root

こう書いておけば、

takuya:~ @ ssh 192.168.2.1   # ~/.ssh/id_rsa かつ user takuya
takuya:~ @ ssh my-router     # ~/.ssh/router.key  かつ user takuya
takuya:~ @ ssh myrouter-root   # ~/.ssh/my-root.key かつ  user root

このように、サーバーの用途毎に名前をつけておき、ユーザー名や使う秘密鍵を指定することが出来る。

設定例

gitlab / github.com の場合

 Host github-work
   hostname github.com
   identityfile /users/takuya/.ssh/github-work

github /gitlab の場合は git@hostname/username/reponame となっていて、すべてのユーザーは git ユーザーでアクセスししている。 github 側で登録済みの公開鍵からユーザーを識別している感じ。

gitlab で使う鍵を指定する

 Host gitlab.example.com
   hostname gitlab.example.com
   identityfile ~/.ssh/gitlab-ssh-priv.key
 Host git.1.example.com
   hostname git.1.example.com
   identityfile ~/.ssh/git-priv.key

gitlab 毎に使う鍵を変えるなども出来る。

設定をまとめたい

hostalias を使う

Host mine
     HostAlias my01.example.com
     HostAlias my02.example.com
     HostAlias my03.example.com

こうしておけば、順番に試してくれたり。

他にできる設定

.ssh/config はかなりいろいろな設定ができる。

SSH接続時に同時にVPNを作成したり、 SSH接続時にポートを指定したり

詳しくは man

man ssh_config

参考書籍

OpenSSH

OpenSSH[実践]入門 Software Design plus

OpenSSH[実践]入門 Software Design plus