2011-04-16

複数の public key を .ssh/config で管理する

複数の public key (公開鍵) を仕方なく作ってしまった。こういう時、相手サーバーによって使う private key (秘密鍵) を指定してアクセスしないといけない。.ssh/config に設定を加えると、サーバーごとに利用する key を切り替えてくれる。

key の生成

まず key の生成する。一般的な key の作り方は過去エントリー参照のこと。

ssh-keygen で複数の public key を作る。今回はタイプの違う 2 つの鍵を作った。-f オプションで鍵ファイルのファイル名を指定できる (デフォルトは .ssh/id)。

$ ssh-keygen -t dsa -f .ssh/id_dsa
$ ssh-keygen -t rsa -f .ssh/id_rsa

作った public key は相手ホストへコピー。

.ssh/config の書式

.ssh/config を次の様に書く

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_dsa

Host gitenterprise
  HostName gitent-scm.com
  User foo
  IdentityFile ~/.ssh/id_rsa

ssh でログインする場合、ssh githubssh gitenterprise という風に「Host」名を指定する。すると、HostName, User, IdentityFile が自動的に選ばれる。これは scp コマンドや sftp コマンドでも同じ。

解項目の説明
Host
ホスト名。HostName が指定されていない時は、この値が使われる。設定の区切りとしても使われる。
HostName
本当のホスト名。省略可。省略した場合は、Host の値が HostName として使われる。省略しない場合、Host はニックネームの代わりに利用可能 (ssh nickname という具合に)
Port
ポート番号
User
ログイン・ユーザー
IdentityFile
秘密鍵ファイルへの PATH

あとがき

本来の使い方は、public key を一つ生成。複数のホストにその public key をコピー。同じ passphrase で複数ホストにログイン。ログインするホストごとに「鍵」を作らなくて便利。という筈。

ところが、ホストによって鍵の種類が違い、複数の public key が必要になることがある。こういう時、.ssh/config を設定しておくと便利。

なお、ホストによってユーザー名が違う場合も .ssh/config が使える。例えば下記の様な設定をしておけば、同じ public key でログイン名にユーザーを変更する必要もない。また、ホスト名も全て入力しなくて済むので楽。

Host cupcake
  HostName cupcake.com
  User foo

Host donut
  HostName donut.info
  User bar

ref

関連エントリー

No comments:

Post a Comment