LoginSignup
Pocketroppo
@Pocketroppo

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【初心者】GitとGitHubの連携が失敗します

Q&AClosed

解決したいこと

プログラミング初心者です。
GitとGitHubを連携し、Githubからクローンしようとしていますが、エラーメッセージが出てうまく行きません。

発生した問題

SSHで公開鍵認証をしようとして、公開鍵と秘密鍵を作成し、公開鍵をGitHubに登録しました。
クローンをしようと、Ubuntuのターミナルに
「sudo git clone git@github.com:(自分のユーザー名)/assessment.git

(レポジトリ名がassessment)と入力すると、

Cloning into 'assessment'...
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.

というメッセージが表示され、失敗してしまいます。

試したこと

どうしていいのかわからなかったので、エラーメッセージで検索したブログ記事に書いてあった、
「ssh -T git@github.com」というコマンドを試したところ、秘密鍵を設定したときに作ったパスワードを入力することを求められ、

The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi (自分のユーザー名)! You've successfully authenticated, but GitHub does not provide shell access.

こういうメッセージが出てきて、成功した雰囲気が出ているのですが、
再度クローンを試してみようとすると、上のエラーメッセージが出るので失敗しているようです。

解決策を教えていただけるとありがたいです。よろしくお願いいたします。

0

1Answer

クローンする際に使うURIは,HTTPのものではなくSSHのものを利用してください.

スクリーンショット 2022-12-05 18.11.06.png

https://github.com/~~~ではなくgit@github.com:~~~の方です.

0

Comments

  1. @Pocketroppo

    Questioner
    ご回答ありがとうございます。
    すみません。投稿するときに誤ってペーストしたようです。
    実際には「sudo git clone git@github.com:(自分のユーザー名)/assessment.git
    」と入力しています。
    紛らわしいので、質問も編集します。
  2. @Pocketroppo

    Questioner
    ありがとうございます。
    sudoなしで実行してみたところ、「fatal: could not create work tree dir 'assessment': 許可がありません」と返ってきました。
    また、いただいたURLはリンク切れのようです。
  3. もしかして,すでにassessmentディレクトリがあったりしますか?もしくはそもそも権限のないディレクトリでcloneしようとしていませんか?
    mkdir abc
    などがそもそも可能なのでしょうか.不可能であればご自身の管理権限の範囲内でcloneしてください.

    リンクは
    https://docs.github.com/en/authentication/troubleshooting-ssh/error-permission-denied-publickey
    でした.1文字多かったようです.
  4. @Pocketroppo

    Questioner
    assessmentディレクトリは確認しましたがありません。
    mkdirはsudoをつければ可能です。

    教えていただいたリンクのページに書いてあることをすべて試してみました。
    その中で、
    $ ssh -vT git@github.com
    と入力したとき、
    ...
    debug1: identity file /home/sakura/.ssh/id_rsa type 0
    debug1: identity file /home/sakura/.ssh/id_rsa-cert type -1
    debug1: identity file /home/sakura/.ssh/id_ecdsa type -1
    debug1: identity file /home/sakura/.ssh/id_ecdsa-cert type -1
    ...
    このような文字列が表示されたのですが、identity fileの行の末尾に-1が並んでおり、SSHが使用するファイルが見つけられなかったということのような気がします。
    ちなみに、公開鍵のfingerprintとGitHubに置いてあるSSHキーは一致しています。
    何度も質問してすみません。
  5. sudoをつければ可能,ということはもうこのようなディレクトリでcloneしようとすることをやめるか,鍵の権限を管理者権限にするかのいずれかで解決できそうです.

    問題1 - Permission denied (publickey).
    は,鍵の所有者の違い(sudoでsuper userが鍵を使おうとしたこと)によるエラーで
    問題2 - fatal: could not create work tree dir 'assessment'
    はディレクトリを作ろうとするユーザの権限エラー(super userなら可能であるという状態)です

    どのユーザでやっていくか明確にし,そのユーザにあった鍵やディレクトリを利用してください.

    選択肢1 - 問題1観点で解決する
    super userが使える鍵を利用する(sudo ssh-keygenとかで鍵を作ったりchmodで適切に変更する)
    選択肢2 - 問題2観点で解決する
    sudo をつけなくてもディレクトリ作成ができる場所で git clone する(こっちで解決するのが普通.sudoをつけないといけない場所での作業は,今後すべてのコマンドにsudoが必要になるし,先に示したリンクでも書いてある話)

    のどちらかです.

    > dentity fileの行の末尾に-1が並んでおり、SSHが使用するファイルが見つけられなかったということのような気がします。
    はい.なので0が得られているid_rsaは存在しており,現状これを利用したgithubとの通信を目的としているのではないでしょうか?
  6. @Pocketroppo

    Questioner
    丁寧にご回答いただきありがとうございます。
    選択肢1を試してみたのですが、同じ結果になってしまいました。
    初歩的な質問で恐縮ですが、「sudoをつけなくてもディレクトリ作成ができる場所」はどうやって作ればいいのでしょうか?
    パソコンのスペックが低いため仮想環境の構築は難しいです。
  7. > sudoをつけなくてもディレクトリ作成ができる場所
    OSによって異なりますが,ログインユーザusernameの保有するディレクトリは全てsudoいらないはずです.
    Windowsであれば
    C:\Users\username\
    以下,Debianであれば
    /home/username/
    以下,MacOSであれば
    /Users/username/
    以下のディレクトリではusernameが自由に弄れる場所で,管理者権限は不要のはずです.
    そもそもコマンドプロンプト/ターミナルを開いたら,ここがpwdになっているはずです.環境変数で言うとWindowsであれば%USERPROFILE%,他であれば$HOMEですね.

    したがって,私観点で言わせて貰えば「どうやって作ればよいか」という質問には「そもそも存在しているのに使ってない」としか答えようがありません.

    ただし
    これらホームディレクトリより下の階層はsudo不要のはずですが,もしホームディレクトリ以下でもsudoを利用して作成したディレクトリ以下であれば,先ほども申し上げた通り,全てsudoが必要になります.

    例えば,
    $HOME/Documents/workspace/
    を新規作成するときに
    sudo mkdir $HOME/Documents/workspace/
    としてしまったら
    mkdir $HOME/Documents/workspace/mydirectory/
    は不可能ですし
    touch $HOME/Documents/workspace/a.txt
    も不可能です.すなわち,このworkspaceの中にディレクトリどころか何かファイルを配置/編集するのにすらsudoが必要になってしまいます.
  8. @Pocketroppo

    Questioner
    home/usernameのディレクトリでクローンしたところ、成功しました。
    PondVillege様、何度もご丁寧にご回答いただき、本当にありがとうございました。
  9. 3個目の回答で申し上げた「ご自身の管理権限の範囲内でcloneしてください」をここまで丁寧に話したのは初めてです.これからよりたくさん学ばれることを期待しております.頑張ってください.

Your answer might help someone💌