何をするか?
SSH 鍵を使って複数の SSH サーバーに接続する場合、1 つの SSH 鍵ファイルを使い回すこともできますが、場合によっては SSH サーバーごと(SSH ユーザーごと)に鍵ファイルを使い分けたいこともあるかもしれません。 ここでは、SSH サーバーごとの SSH キーを用意する方法を説明します。
鍵ファイルを作成する
例えば、ConoHa VPS
に maku
というユーザーで SSH 接続するための SSH キーを作成するとします。
一般的に SSH のキーペアは ~/.ssh
ディレクトリ以下に保存しますが、次のような感じで接続先ごとにディレクトリ (<接続先>-<ユーザー>
) を作ると管理しやすくなります(ファイル名で表現することもできます)。
~/.ssh/conoha-maku/id_rsa
… 秘密鍵~/.ssh/conoha-maku/id_rsa.pub
… 公開鍵
# SSH キーペア用のディレクトリを作成
$ mkdir -p -m 0700 ~/.ssh/conoha-maku
# SSH キーペアを作成
$ ssh-keygen -t rsa -f ~/.ssh/conoha-maku/id_rsa
公開鍵を SSH サーバーに登録
SSH キーで SSH 接続するには、接続先の SSH サーバーの ~/.ssh/authorized_keys
に公開鍵を登録しておく必要があります。
この作業は、ssh-copy-id
コマンドを使うと簡単に済ませられます(参考: ssh-id-copy で SSH の公開鍵をリモートホストに登録する)。
$ ssh-copy-id -i ~/.ssh/conoha-maku/id_rsa.pub maku@xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
は接続先のアドレスを示しています。
これで、次のように SSH キーで接続できるようになります。
$ ssh -i ~/.ssh/conoha-maku/id_rsa maku@xxx.xxx.xxx.xxx
接続先ごとに使用する SSH キーを切り替える
ここまでの設定で、SSH キーを使った接続はできるようになっているのですが、毎回秘密鍵のパスやユーザー名などを入力するのは面倒です。
このような場合は、~/.ssh/config
ファイルを作って、エイリアス名を使って SSH 接続できるようにしておくと便利です(Windows の場合は %USERPROFILE%\.ssh\config
です)。
上記のように設定しておくと、次のようなコマンドで簡単に SSH 接続できるようになります。
$ ssh conoha-maku
あとは、同様の手順を接続先の SSH サーバーごとに繰り返せば OK です。
~/.ssh/config
の設定方法の詳細は、man ssh_config
で確認できます。
Host
行のエイリアス名には任意の名前を設定できますが、<ホスト名>-<ユーザー名>
のような感じにしておくと分かりやすいです。
ここでは conoha-maku
という名前を付けました。
次のように、スペース区切りで複数のエイリアス名を設定しておくこともできます。
Host conoha-maku conoha
セキュリティ的に微妙かもしれませんが、Dropbox などで SSH キーを管理しておくと、いろんな環境から SSH 接続できるようになるので便利です。
IdentityFile ~/Dropbox/share/appdata/ssh/conoha-maku/id_rsa
(おまけ)シェルの alias じゃダメなの?
bash の alias
などで、次のように定義しておけば同じことが簡単に実現できるのでは?と思うかもしれません。
これでもよいのですが、~/.ssh/config
で接続設定をしておけば、内部的に SSH を使ったツールでもその設定を利用できます。
例えば、下記の config
ファイルは GitHub 用の接続設定です(GitHub に SSH 接続するときのユーザー名は必ず git
になることに注意)。
この設定を、Git の設定ファイルから次のように参照することができます。