Cloud9でcloneしたローカルリポジトリからGithub上のリモートリポジトリへのpush方法
①経緯
スクールの課題の中で、「GitHub上で作成したリポジトリをCloud9にcloneしてファイルを作成し、pushしましょう。」という内容のものがありました。今までIntelliJで作成したローカルリポジトリをGitHubに共有する手法を用いてきたので、cloneはあまり使用してきませんでした。そんな中でpushがうまくいかずに積みまくったので自分用に備忘録として書いておきます。
②問題のポイント
まずは問題のポイントまで順を追って説明します。
ここの手順は失敗に終わりますので③まで飛ばしてもOKです。
2-1.リポジトリの作成
まずはGitHub上でリポジトリを作成します。
「Your repositories」の「New」から作成しましょう。
特にこれといった操作は必要ないですが、今回は「Public」のリポジトリを作成します。
2-2.リポジトリのclone→push
作成したリポジトリの「HTTPS の url」をコピーしましょう。
コピーしたurlをCloud9上のターミナルでcloneします。
$ git clone < HTTPS の url >
今回はGitHubの指定通りの方法でpushまで進めてみましょう。
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin < HTTPS の url >
git push -u origin main
上記のコマンドはREADME.mdを作成し最初のコミットを行うのが目的なのですが、おそらく最後のgit pushを行った際に、名前とパスワードの入力が求められます。
私の場合、ここで名前とパスワードを入力してもpushが拒否されました。エラーメッセージを見てみると、「GitHubでは2021年8月13日以降、パスワード認証はサポートされていません。代わりに、アクセストークンを使用してリモートリポジトリに認証する必要があります。」的な文章が表示されました。ここで色々と試してみましたが結局pushすることはかないませんでした。もちろん方法はあると思いますが、私の場合うまくいかな過ぎて「よし、最初からやろう!」となりました。
③解決の方法
結論からいうとSSHキーを作成する方法がすんなりいけたような気がします。
以下で順に操作を書いていきます。
3-1.SSHキー作成の準備
cd ~/.ssh //SSH鍵を保存するためのフォルダーに移動します。
ssh-keygen //SSH鍵を生成するためのコマンドを実行します。途中でパスフレーズを入力するよう求められますが、パスフレーズを使用しない場合はそのままEnterキーを押してください。
cat ~/.ssh/id_rsa.pub //作成したSSH鍵の公開鍵を表示するためのコマンドを実行します。
最後のコマンドで表示される長い文字列がSSHキーを作成するうえで必要になります。先頭から文末から1つ目の空白までをコピーしましょう。この公開鍵をGitHub等のリモートリポジトリに登録することで、SSH接続によるリモートリポジトリへのアクセスが可能になります。
3-2.SSHキーの作成
GitHub上でSSHキーを作成しましょう。
アイコンの「Settings」→「SSH and GPG keys」へと移動し、「New SSH key」を選択しましょう。「title」には自分がわかりやすい名前を付けましょう。「Key type」は特に設定は行いませんでした。「Key」の箇所に先ほど発行した長い文字列を入力しましょう。ここまで入力して「Add SSh key」を押せばSSHキーの完成です。
3-3.リポジトリのclone→push(リベンジ)
SSHキーを作成したので再度cloneまで行っていきましょう!...といっても手順は上記の2-2.と基本的には変わりません。
$ git clone < SSH の url >
そう、使用するurlがSSH用に変わっただけです。
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin < SSH の url >
git push -u origin main
今回は問題なくpushが成功すると思われます。
④まとめ
今回はSSHキーの発行による認証についてまとめてみました。
あくまで自分の場合このようにすればうまくいった、という感じなので「もっと簡単な方法あるよ!」とか「間違ってるよ!」などあればご指摘いただけると幸いです。