Ruby On Railsチュートリアルをやってる。WindowsにUbuntuを入れられるようになってるので、インストールして、環境を整えた。
Ruby On Railsチュートリアルの、Gitでプロジェクト管理をするところで、公開鍵を設定するところで問題が起きた。
事の顛末と問題解決方法を書こうと思う。
チュートリアルではBitbacketを使っている。Bitbacketでは、無料プランでもプライベートに設定できるのに対して、Githubでは公開のみだったかららしい。
今では、Githubでも無料でプライベートに設定できる。ただし、チュートリアルには載ってないので、自分でやった。
鍵を作成する。
ssh-keygen
と打ち込んで、あとはリターンを押しまくると、.sshというフォルダの中にid_rsaとid_rsa.pubというのができる。この内id_rsa.pubをGithubに登録する。
cat id_rsa.pub
とすると、表示されるので、コピーして、
GithubのサイトのSetting>SSH and GPG key>SSH keysに行く。
そこのNew SSH keyをクリックして、Keyのところに先程のコピーした鍵を貼り付ける。Add SSH keyをクリックすると登録される。
ホーム画面に戻って、RepositoriesのNewをクリックする。
Repository nameは、Railsで作ったアプリケーションの名前、Public/PrivateはPrivate(ここが昔は有料だった) ほかはそのままでCreate Repositoryをクリックする。
すると、セットアップの方法が出てくるので、チュートリアル的には
…or push an existing repository from the command lineを選択。
git remote add origin git@github.com:hogehoge/hello_app.git
git push -u origin master
をする。ここで問題が発生した。
git push -u origin master
をすると、
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
Permissions 0777 for '~/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "~/.ssh/id_rsa": bad permissions
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
と表示される。鍵がセキュリティ的にいけない状態らしい。
LinuxとかMacだと、chmod 600 ~/.ssh/id_rsa
でいいのだけど、Windows10は何度やっても777になってる。
原因は、最初に、カレントディレクトリをC:の下に作って移動させたので、鍵のディレクトリが鍵作成時にデフォルトでそのカレントフォルダの中に作成された。C:(カレントディレクトリ)/.ssh/id_rsa となっていた。
ここは、Windowsだと、パーミッションをコントロールできない位置のようだ。
ファイルのプロパティから権限を変えてみたがだめで、他のところに移動して、シンボリックリンクを貼ってみたがそれでもだめだった。
最終的には、鍵を再び作成して、パスを/home/以下に作るとうまくいった。
ssh-keygen
を実行するときに、以前はそのままリターンを押したので、デフォルトでカレントディレクトリに作られ、問題が起こった。
カレントディレクトリを変えなかったら、この問題は起きないかもしれない。
追記:
後日つなげようとしたら、繋がらなくなった。
(カレントディレクトリ)/.sshに、configファイルを作って、
Host github.com
User ユーザー名
IdentityFile (鍵へのパス)
を書き込んだ。その後、configファイルのパーミッションを変更する。
プロパティ/セキュリティの自分が使ってるユーザー名のアクセス許可を読み取りと変更のみにする。アクセス許可の範囲を絞るのがポイントだ。
すると、鍵を読み取るようになって、gitにつながるようになった。
上の.(カレントディレクトリ)/.sshに鍵を作って、鍵のパーミッションを設定するのに再びトライしたが、こちらはどうしてもできなかった。600とかの設定ができない。