github, heroku等で個人用途にも関わらず 特に理由もなくSSH鍵をそれぞれ個別に作成してしまっていたので デフォルトの~/.ssh/id_rsa(.pub)で統一してしまいたいの巻。

乱造されたSSH鍵…

不要なものは削除して統一したい

1
2
3
4
5
6
7
8
9
~/.ssh % ll
config github_rsa github_rsa.pub heroku_rsa heroku_rsa.pub known_hosts
~/.ssh % cat config
Host github
  HostName github.com
  Port 22
  User git
  IdentityFile ~/.ssh/github_rsa
...(略)

SSH Key Pairの作成

ssh-keygenで特にオプション指定しないで作成すると2048bitのRSA鍵が生成される。

1
2
3
% ssh-keygen -C "comment"
Enter file in which to save the key (/Users/contee/.ssh/id_rsa): (Enter)
(パスフレーズの入力)

-Cで入力したコメントがgithubのGUI等で確認できるので入力しておくとよい。

sshコマンドの-iオプションで秘密鍵のファイルを指定しない場合は ~/.ssh/id_rsaを読み込んでくれるのでファイル名もデフォルトのままで都合が良い。

パスフレーズを設定しておくと秘密鍵自体も暗号化した形で保存されるので ファイル覗かれても少し安心。もし変更したい場合は、

1
ssh-keygen -p -f <identity>

で一度設定したパスフレーズを変更できる。これはあくまでローカルマシンに保存されている 秘密鍵に対する変更なのでリモートで何かしないといけないわけではない。

GitHubにSSH Keyを登録しなおす

Generating SSH keys

今まで利用していた鍵に代わって、ブラウザでPersonal settings > SSH Keys > Add SSH Keyから画面に従って公開鍵を登録。 pbcopyでクリップボードを利用すると楽。登録するとGitHubからnew public key addedなメールが届く。

1
pbcopy < ~/.ssh/id_rsa.pub

公開鍵認証で接続できるかテストしてみる。

1
ssh git@github.com

パスフレーズの入力ダイアログが表示されるので入力。

1
2
Hi contee213! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

こんな感じのメッセージが表示されればOK.

この時点でssh-add -lを実行すると秘密鍵がssh-agentに登録されているはず。

1
2
% ssh-add -l
2048 <fingerprint> /Users/user/.ssh/id_rsa (RSA)

HerokuにSSH Keyを登録しなおす

Managing Your SSH Keys

Heroku Toolbeltはインストール済として…

1
2
3
$ heroku keys
=== joe@example.com Keys
ssh-dss AAAAB8NzaC...DVj3R4Ww== adam@workstation.local

現在登録されているKeyを確認の上、除去

1
2
$ heroku keys:remove adam@workstation.local
Removing adam@workstation.local SSH key... done

もしくは全消去して

1
$ heroku keys:clear

あらためて登録する。

1
$ heroku keys:add

どれを追加するのか聞かれるので ~/.ssh/id_rsaに該当する番号を選択する。

登録できたら接続できるかテスト。

1
ssh git@heroku.com

ssh-add -l~/.ssh/id_rsaが登録されているのであれば パスフレーズは聞かれない。

何回もパスフレーズ入力するの面倒くさい

-Kオプション付けてkeychainに登録するのはどうだろう。

1
ssh-add -K

man ssh-addによれば-K

1
2
3
-K      When adding identities, each passphrase will also be stored in your keychain.
             When removing identities with -d, each passphrase will be removed from your
             keychain.

良さげな感じ。

VPSにSSH接続した状態でGitHub, HerokuにSSH接続

ssh -Aするか~/.ssh/configForwardAgent yesを指定してあげれば ローカルマシンの秘密鍵を利用してリモートマシンでSSH公開鍵認証できて便利ね。

エネルギー尽きた。

Comments