なんでハマったのか
まず、この話の発端ですが、プログラミングスクールのカリキュラムに沿って作った公開鍵、秘密鍵の名前がデフォルトのid_rsaで、githubの登録名がpracticeとかなんとか。
すごくこだわりの強い性格が災いして
・秘密鍵・公開鍵にちゃんと名前をつけてあげたい!
・github上の登録名もしっかりしたい
と思い立って、作り直し、名前を変えたところエラー頻発。
かなりチームメンバーに迷惑をかけてしまいました…
同じようなこだわりの強い性格の人の助けになれたらと思い、メモしておきます。
要約
1.鍵に名前をつけるときは
Enter file in which to save the key (/Users/you/.ssh/id_rsa):
/Users/自分のPCのユーザ名/.ssh/つけたい名前
と絶対パスでつけてあげる
2.gitの仕様上、リモートリポジトリに接続するとき、デフォルトの
id_rsaを探しに行ってしまうので、ssh鍵と同じフォルダに
Host github.com
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/github_rsa
TCPKeepAlive yes
IdentitiesOnly yes
っていうファイルを作って、今回はリモートがgithubの場合ですが、
ここに接続するための鍵があるよ!って教えてあげないといけない
3.windowsかつPowershellの人はさらに
chmod 0600 つけた名前
でパーミッション許可してあげる。
と、いう感じです。
ここからの流れは長いので、
読みたい人は見てね
前提条件
・現在スクールでvagrant,VirtualBox,Ruby on Railsを用いて開発中
・vagrantの起動、railsサーバーの起動、gitコマンド等はすべて
Powershellを用いて行っている
◎ハマリポイント1
Powershellに下を打ち込んでディレクトリの移動。
cd ~/.ssh
ここに作る意味は、gitがssh鍵を探しに行くデフォルトのフォルダがここだから。
ちなみに、vagrant内での.sshフォルダはvagrant upコマンドを打ち込んだときにターミナル or Powershellに表示される
default: /home/vagrant/work => ほにゃらら
ほにゃららの部分のディレクトリ下にできますよん
んで、
ssh-keygen -t rsa -b 4096 -C "githubに登録しているメールアドレス"
-t rsa = rsaというタイプの鍵にしますよ~
-b 4096 = 4096bitの長の鍵にしますよ~(デフォルトは2048bit。長いとセキュリティ向上するよ)
-C "" = 公開鍵の内容のしっぽにコメントが付くんだけど、その内容を""の中身にするよ~(メールアドレスにするのがスタンダードなんやて。)
という意味。
その後
Enter file in which to save the key (/Users/you/.ssh/id_rsa):github_rsa
で名前をつけたのですがこれが間違い、、、
英語読解力がなさすぎるんですが、in which to save(どこに保存する?)的な意味なので、
Enter file in which to save the key (/Users/you/.ssh/id_rsa):
/Users/自分のPCのユーザ名/.ssh/github_rsa
と打ち込まなくてはならなかったんですよね、、、
これは私が単純に説明書読まないタイプの子なのが悪いです
◎ハマリポイント2
それでも消えないエラー。
Permission denied (publickey).
ここで私は思ったのですが、id_rsa(デフォルトの名前)のときはうまくいってたんだよな~、ということは名前をつけたことでエラーを吐いてるのか。(そりゃそう)
調べてみたら要約の通りで、gitの仕様上デフォルトの名前のid_rsaを探しに行くので、ない!作ってないやんけ!て言われる。
なので、.ssh下にconfigというファイル名で以下を記述
Host github.com
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/github_rsa
TCPKeepAlive yes
IdentitiesOnly yes
これでgithub_rsaを探しに行くようになってくれます。
◎ハマりポイント3
まだ消えないエラー。さすがにメンタルが弱る。今度は内容が違う。
Bad owner or permissions on C:/Users/*****/.ssh/config
これはwindowsユーザーかつPowershellを使ってる人だけに起こるみたいで、秘密鍵とconfigファイルを一緒のディレクトリに入れてるとこのエラー吐くとか。
(詳しくは引用見て欲しい)
秘密鍵を.sshと違うディレクトリに移動すれば解決らしいけど、
configの中身書き直すのめんどくさいし、
chmod 0600 github_rsa
で権限を与えました。
以上!長かったね、きれいにまとまってなくてごめんなさい。
エンジニアとしてまだ仕事してるわけじゃないので、間違っているところがあったら編集リクエスト?なりコメントなりお願いいたします
参考にした記事
お前らのSSH Keysの作り方は間違っている
https://qiita.com/suthio/items/2760e4cff0e185fe2db9
GitHubユーザーのSSH鍵6万個を調べてみた
https://hnw.hatenablog.com/entries/2014/07/05
Win10のSSHでBad owner or permissions
https://qiita.com/ryota23/items/8d2745c3b275e8ec7ea8
秘密鍵を使った SSH 接続時に WARNING: UNPROTECTED PRIVATE KEY FILE! と表示されて接続できない
https://support.amimoto-ami.com/en/articles/934049-%E7%A7%98%E5%AF%86%E9%8D%B5%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F-ssh-%E6%8E%A5%E7%B6%9A%E6%99%82%E3%81%AB-warning-unprotected-private-key-file-%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84