gitlabでのアクセス許可の拒否(公開鍵)


134

私の問題は、GitLabからプッシュまたはフェッチできないことです。ただし、(HTTPまたはSSHを介して)クローンを作成できます。プッシュしようとすると、このエラーが発生します。

権限が拒否されました(公開鍵)致命的:リモートリポジトリから読み取れませんでした

私が見たすべてのスレッドから、これが私がやったことです:

  • コンピューターにSSHキーを設定し、公開キーをGitLabに追加しました
  • 設定を行いました-ユーザー名とメールのグローバル
  • SSHおよびHTTPを介して複製され、問題が解決するかどうかを確認します
  • ssh -T git@gitlab.comコマンドを実行

私の問題を解決する方法について何か洞察があれば、それは大歓迎です。


5
ssh -vvvv git@gitlab.comSSHキーを取得するかどうかを確認するために実行
Nils Werner

1
gitlab.com/profile/keysからSSHキーを追加しましたか?
Akram Fares 2016年

@ Nils Werner:このコマンドを実行すると多くの行が表示されますが、その1つは「認証が成功しました(公開鍵)」です
Alexandre Fernandes Bartolomeu

4
実行していないことを確認してくださいsudo git clone git@gitlab.com:project/somethiing.git。そうでない場合、sshは/root/.sshアップロードしたキーの代わりに調べます~/.ssh/id_rsa
rivanov

1
「ssh-add〜/ .ssh / the_key」を使用してエージェントにキーを追加し、フレーズでキーを認証することで、同じ問題を解決しました。これは、GitLabに追加したプライベートな部分です。
セルドール

回答:


258

たくさん検索したところ、これを見つけました。それは私にとって完全にうまくいきます。

  1. cmdと同じように「Git Bash」に移動します。右クリックして「管理者として実行」します。
  2. タイプ ssh-keygen
  3. Enterキーを押します。
  4. キーを特定のディレクトリに保存するように求められます。
  5. Enterキーを押します。パスワードを入力するか、パスワードなしで入力するように求められます。
  6. 公開鍵は特定のディレクトリに作成されます。
  7. 次に、ディレクトリに移動して.sshフォルダを開きます。
  8. ファイルが表示されますid_rsa.pub。メモ帳で開きます。そこからすべてのテキストをコピーします。
  9. https://gitlab.com/profile/keysにアクセスます
  10. ここで「キー」テキストフィールドに貼り付けます。
  11. 下の「タイトル」をクリックしてください。自動的に入力されます。
  12. 次に「キーを追加」をクリックします。

今それを試してみると、それは確かに動作します。


2
pubファイルをクリップボードにコピーできなくなった場合に備えて。以下を試してください:type %userprofile%\.ssh\id_rsa.pub | clip
jquijano

5
Windows 10で.ssh \ id_rsa.pubを検索する必要がある場合は、このを入力できます 〜/ .ssh / id_rsa.pub on git bashで「キー」が表示されるので、テキストフィールドにコピーして貼り付けることができます中gitlab.com/profile/keys
Chutipong Roobklom

11
これを必ず実行してください:ssh-add filename(rsa dirにない場合はパスを使用)上記の手順を実行した後
Blasanka

3
魅力のように働いた。ありがとう。
brduca

3
私はこれを行いましたが、問題は修正されておらず、権限が拒否されました
Billal Begueradj '31

62

手順1:~/.ssh/config次のようなファイルに構成ファイルを追加しました

   User git
   Hostname gitlab.com
   IdentityFile ~/.ssh/id_rsa_gitlab
   TCPKeepAlive yes
   IdentitiesOnly yes

ステップ2:sudoなしでgit repoを複製するだけです。
ドキュメント:https : //gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths


1
これは、デフォルト名のキーファイルがすでに別の目的で使用されている場合に必要です。id_rsa_gitlabFedoの例のように、デフォルト以外の名前でキーファイルを作成する場合は、config-fileを指定する必要があります。問題についてGitlabの素晴らしい記事:gitlab.com/help/ssh/...
ダニー

これでうまくいきました。私はGithubとGitlabの両方のキーを持っているので、このソリューションを使用できます。
M.Cush

これを機能させるには、に変更HostnameするHost必要があります
Sadee、

27

簡単な解決策は、秘密鍵を認証エージェントに追加することです(鍵がそうでない場合~/.ssh/id_rsa)、

ssh-add ~/.ssh/<your private key>

基本的にはあなたに任せssh-agentてください。

また、永続的に追加することもできます。


拡張子が.pubのファイルです
フェリペ

7
いいえ。秘密キーは.pub拡張子のないファイルです。
フセイン

15

私の場合、WSL(LinuxのWindowsサブシステム)では機能しませんでした。

WSLを開始するときは、

  • ssh-agent_を起動します eval $(ssh-agent -s)
  • 鍵をssh-agentに追加します。 ssh-add ~/.ssh/id_rsa
  • プロンプトが表示されたら、パスワードを入力します

これで接続が機能します。
これをテストすることができますssh -T git@github.com

ノート:


11

実行していないことを確認してくださいsudo git clone git@gitlab.com:project/somethiing.git。そうでない場合、sshは/root/.sshアップロードしたキーの代わりに調べます。~/.ssh/id_rsa


9

これには非常に簡単な解決策があります:sshを使用する代わりに、httpsに移動します。これを行うには:プロジェクトフォルダーに.gitフォルダーがあります-設定ファイルがあります-テキストエディターで開き、行を変更します

url =git@gitlab.com:yourname / yourproject.git

url = https://gitlab.com/yourname/yourproject.git


ありがとうございました。私のために働いた。
ktv6

7

Linuxまたはmacoxを使用している場合は、ターミナルでこれを試してください。

ssh-add -l

それが何も返さない場合は、これを試してください:

ssh-add

〜/ .ssh / id_rsaにIDを作成する必要があります

再試行後:

ssh-add -l

それはあなたのアイデンティティを返す必要があるので、クローンを再試行した後、それはうまくいくはずです

注意:プロファイルgitlabにsshキーを追加することを忘れないでください

ありがとう


5

私の場合、それはgitlabの問題ではなく、sshd構成の問題でした。sshサーバーは、ユーザーのリストを除いて、接続を許可しませんでした。gitlabにリモートで接続しているユーザーgitはそのリストに含まれていません。だから、何よりもまずこれをチェックしてください。

でsshサーバーの設定を確認できます/etc/ssh/sshd_config。オプションの行がある場合はAllowUsers、それにgitを追加します。

AllowUsers user1 user2 user3 git

3

私はgitlabをdockerで実行していますが、これは私の問題を修正するために行ったものです。

内部ドッキングウィンドウことがわかっは/ var / log / gitlab / sshdの/現在のメッセージの複数の出現箇所がありました:

認証が拒否されました:ファイル/var/opt/gitlab/.ssh/authorized_keysの所有権またはモードが正しくありません

その後、そのファイルの所有権を99:usersからgit:usersに変更しました。

chown git:users authorized_keys


1
どうもありがとうございます。KubernetesでGitlabを実行していて、/ gitlab-dataディレクトリ(authorized_keysのマウントポイントでもある)に権限の問題がありました。シンプルな町で十分でした。
ディレンメイブーム2017

3

実行する手順で同じエラーが発生しましたが、修正しました。Gitlabはssh-rsaを必要としているため、以下はrsaに対してsshを実行するコードです

  1. ssh-keygen -o -t rsa -b 4096 -C "name@gmail.com"

name@gmail.comはgitlabアカウントのメールです

  1. それはあなたに入るように促しますので、以下のコードが促された後にEnterキーを押すだけです、

    キーを保存するファイルを入力(/home/yourDesktopName/.ssh/id_rsa):

  2. もう一度入力を求めるプロンプトが表示されるので、以下のコードが表示されたらEnterキーを押すだけです。

    パスフレーズを入力(パスフレーズがない場合は空):

  3. 最後に入力するように求められますので、以下のコードが表示されたらEnterキーを押してください。

    同じパスフレーズをもう一度入力してください:

  4. ssh-rsa generateを表示します。

  5. Gitlabアカウントにログインし、右側のナビゲーションバーに移動すると設定が表示され、左側のサイドバーにSSHキーが表示されます。入力してください。

  6. 入力を求めるプロンプトの上を見ると、ssh-rsaのパスが表示されます。

  7. SSHフォルダーに移動し、id_rsa.pubを取得します。

  8. それを開いてキーを取得し、Gitlabにコピーして貼り付ければ、もうすぐ完了です。

  9. 確認する: ssh -T git@gitlab.com

  10. あなたは得るでしょう: Welcome to GitLab, @joy4!

  11. できました。


ありがとう。これはWindows 10で動作します。Gitlabの指示に従ってed25519を試しましたが、動作しませんでした。
ディカ

この答えはかなり良いです-なぜそれがより高く投票されなかったのかはわかりません。
mgibson

3

以前は非常に困難でしたが、試してみるとMacとLinuxでsshキーを追加するのがとても簡単になりました。これを行うには、次のようないくつかの手順とコマンドがあります。

  1. システムのターミナルを開き、次のコマンドでプロジェクトディレクトリ内に移動します。
cd 'project directory name'
  1. ssh-keygenそのターミナルでコマンドを実行し、キーのランダムアートイメージが表示されるまで入力します。

  2. 次に、そのターミナルでもう1つのコマンドを入力します。

cat ~/.ssh/id_rsa.pub

それはあなたのSSHキーを生成します。キーはで始まり、ssh-rsaで終わり.localます。

  1. キーをコピーし、Gitlabプロファイルセクションに移動して、ssh keyセクションに貼り付けます。Addこれが機能するボタンをクリックします。

これは私のために働いた!ありがとう
シャムシアアハメッド

2

同じ問題がありましたが、新しいsshキーを追加することで解決しました。

  1. ssh-keygen -t ed25519 -C "email@example.com"
  2. 公開SSHキーをクリップボードにコピーします(xclip -sel clip < ~/.ssh/id_ed25519.pub私の場合はLinuxの場合)。
  3. gitlabで、settings=>sshキーに移動して新しいキーを通過します

2

複数のgitアカウントがあり、異なるsshキーが必要な場合

sshキーを生成するための同じ手順に従う必要がありますが、必ず

ssh-keygen -t ed25519 -C "your-email-id@gmail.com" 

保存するパスを入力します(例:my-pc / Desktop / .ssh / ed25519)

公開鍵をgitlab に追加する(ssh鍵をgitlabに追加する方法

以下のコマンドを使用して、新しいSSH IDを指定する必要があります

ssh-add ~/my-pc/Desktop/.ssh/ed25519

2

主に2つのこと

  1. .sshフォルダー(ホームフォルダーにあるはずです)にid_rsa.pubおよびid_rsa(プライベート)キーが必要です。キーがない場合は作成してください)。キーファイルに別の名前を付けた場合は機能しません

  2. id_rsaの権限をchmod 400〜/ .ssh / id_rsaに変更します。


2

この動作を引き起こす可能性のあるもう1つの問題は、2つの%HOME%-locationsの設定がある場合です。

一部のドキュメントがローカルに保存され、一部がネットワークドライブに保存されているPCを使用しています。一部のアプリケーションC:\Users\<MyUserName>\は私%home%であると考え、他のアプリケーションはそれU:\が家であると考える

ターンアウトssh-keygenの下に私の秘密鍵を入れてC:\users\<MyUserName>\、そのssh -Tssh -vもそこに見えます。

そのため、それ以外はすべて正常に動作するようgit clonegit push、他のユーザーはでキーを探しますU:\。これは失敗するので、前述のエラーが発生します。

見つけるのに1時間かかりましたが、結局のところ、解決策は簡単でしC:\Users\<MyUserName>\.sshた。U:\.ssh


1

私はこのように解決しました。

次のコマンドを使用してWindows用のキーを生成しました:

ssh-keygen -t rsa -C "your.email@example.com" -b 4096

しかし、問題は、このコマンドを実行した後、「キーを保存するファイルを入力してください(/c/Users/xxx/.ssh/id_rsa):」という行がポップされたということでした。私のキーは、指定された場所ではなく私のパスワードに保存されていました。「git clone」を実行すると、キーが「/c/Users/xxx/.ssh/id_rsa」の場所にあると想定されていましたが、見つからなかったため、エラーがスローされていました。

鍵の生成時に、「file1」と「file1.pub」の2つのファイルが生成されました。これらのファイルの両方の名前を変更しました

file1 -> id_rsa 

そして

file1.pub -> id_rsa.pub

両方に配置しました "/c/Users/xxx/.ssh/"


1

ターミナルに移動し、sshキーを再生成します。と入力し ssh-keygenます。保存先を尋ねられますので、パスを入力してください。

次に、公開鍵をgitlabsプラットフォームにコピーします。通常はssh-rsaで始まります。


1

私にとっての問題は、の下のSSH構成ファイルでUsePAMからに切り替えたyesことnoです/etc/ssh/sshd_configUsePAM yesすべてが完璧に動作します。


1

私はgitlabのヘルプで解決策を見つけました。

To create a new SSH key pair: 
 1. Open a terminal on Linux or macOS, or Git Bash / WSL on Windows.
 2. Generate a new ED25519 SSH key pair: ssh-keygen -t ed25519 -C "email@example.com"
 2.1 Or, if you want to use RSA: ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
 3. Next, you will be prompted to input a file path to save your SSH key pair to... use the suggested path by pressing Enter
 4. Once the path is decided, you will be prompted to input a password to secure your new SSH key pair. It's a best practice to use a password, but it's not required and you can skip creating it by pressing Enter twice.
 5. Copy your public SSH key to the clipboard by using one of the commands below depending on your Operating System:
        macOS:        pbcopy < ~/.ssh/id_ed25519.pub
        WSL / GNU/Linux (requires the xclip package):      xclip -sel clip < ~/.ssh/id_ed25519.pub
        Git Bash on Windows:      cat ~/.ssh/id_ed25519.pub | clip
 6. Navigating to SSH Keys and pasting your public key in the Key field
 7. Click the Add key button

皆さんのお役に立てれば幸いです。


1

UbuntuのgitlabアカウントにSSHキーを追加するにはどうすればよいですか?

  1. プロジェクトディレクトリでターミナルを開きます。
  2. 「ssh-keygen -o -t rsa -b 4096 -C "your gitlab email"」と入力し、Enterキーを押します
  3. 「vim /home/mnbtech/.ssh/id_rsa.pub」と入力してEnterキーを押します(または、保存した場所から「id_rsa.pub」を手動で開きます)
  4. SSHキーが表示されます。それらをコピーして

  5. gitlabアカウントに移動します。

  6. プロフィール画像をクリックして設定をクリック
  7. 左側でSSH-Keysを選択します
  8. 次に、それらのキーを貼り付けますキーの追加をクリックします

SSH-Keyが追加されます!

(プレビューSSHキーの生成とアクセス許可の拒否(公開キー)がある場合は注意してください。プレビューsshキーを削除して新しいキーを生成し、ターミナルにgit user.nameと電子メールを追加します)


その答えは前の説明と何が違うのですか?
RalfFriedl 19/07/23

1

git@gitlab.com: Permission denied (publickey)次の手順を使用して問題を解決しました

  1. 走る cat ~/.ssh/id_rsa.pub
  2. id_rsa.pub(公開鍵)をgetlabの `設定-> SSH鍵にコピーします
  3. 走る cat ~/.ssh/id_rsa
  4. コピーid_rsa`Code_repo-> git_auth-> id_rsaとする(秘密鍵)

注:root DockerFileまたは他の場所でユーザーを使用している場合は、マシンユーザーに注意しsudo suて、上記のコマンドを実行する前に使用して、ルートユーザーの公開鍵と秘密鍵を取得します。


1

私たちの場合、それはユーザー/クライアント側の問題ではなく、Gitlabサーバー側の問題でした。

CentOS 7.1でローカルGitlab CE 12.9インスタンスを実行しています。

サーバー上で、.ssh / authorized_keysファイルが正しく更新されていないことがわかりました。ユーザーはSSH鍵を作成し(Gitlabガイドに従って)、Gitlabサーバーに追加しますが、サーバーはauthorized_keysを更新しないため、常にアクセス拒否エラーが発生します。

回避策は、次のコマンドを実行して、authorized_keysファイル再構築することでした。

$ sudo gitlab-rake gitlab:shell:setup

これは、rakeタスクを実行する前にキーを追加した人なら誰でも機能します。キーを追加する次のユーザーのために、誰かが手動でrakeタスクを再度実行する必要があります。

より恒久的な解決策をしたではない使用のauthorized_keysファイルを、代わりに使用Gitlabデータベース上のインデックス付き検索を

GitLab Shellは、GitLabデータベースへの高速なインデックス付きルックアップを介してSSHユーザーを承認する方法を提供します。GitLab ShellはSSHキーのフィンガープリントを使用して、ユーザーがGitLabへのアクセスを許可されているかどうかを確認します。

以下をsshd_configファイルに追加します。これは通常にあり ますが、Omnibus Dockerを使用して/etc/ssh/sshd_configいる/assets/sshd_config場合は次のようになります。

Match User git    # Apply the AuthorizedKeysCommands to the git user only   
  AuthorizedKeysCommand /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell-authorized-keys-check git %u %k   
  AuthorizedKeysCommandUser git 
Match all    # End match, settings apply to all users again 

OpenSSHをリロードします。

# Debian or Ubuntu installations   
sudo service ssh reload

# CentOS installations   
sudo service sshd reload 

UIでユーザーのSSHキーを削除し、新しいキーを追加して、リポジトリのプルを試行することにより、SSHが機能していることを確認します。

デフォルト(私たちのインストールにもデフォルト)することで、authorized_keysファイルへの書き込みをして確認した管理エリア>パフォーマンス最適化の設定を行います。そのため、これをオフにし、代わりにGitlabデータベースを使用しました。

ここに画像の説明を入力してください

インデックス付きルックアップを設定し、authorized_keysファイルへ書き込みをオフにした後、SSHアクセスはOKになりました。


1

Windows 10を使用していて、他の何も彼/彼女のために働いていない場合:

私の場合、sshの代わりにhttpsを使用してリポジトリを複製する必要があり、ウィンドウがポップアップして私の資格情報を要求しました。その後、すべてが正常に動作します。


1

確かに、私はこれに非常に遅く答えています。本当に答えたいのであれば、StackOverflowでさえ確認しました。実際の問題を誰も実際に説明しておらず、同じことを共有したかったので、私は答えています。

基礎

最初に、ここでリモートとは何かを理解します。リモートはGitLabであり、システムはローカルであるため、リモートについて話すときorigingit remote -v出力に設定されているURLはすべてリモートURLです。

プロトコル

基本的に、Git clone / push / pullは主に2つの異なるプロトコルで動作します(他にもあります)。

  1. HTTPプロトコル
  2. SSHプロトコル

リポジトリを複製して(またはリモートURLを変更して)、https: //gitlab.com/wizpanda/backend-app.gitのようなHTTPs URLを使用する場合使用すると、最初のプロトコル、つまりHTTPプロトコルが使用されます。

一方、リポジトリのクローンを作成して(またはリモートURLを変更して)、URLをgit@gitlab.com:wizpanda/backend-app.git使用すると、SSHプロトコルが使用されます。

HTTPプロトコル

このプロトコルでは、すべてのリモート操作、つまりクローン、プッシュ、プルは、シンプルな認証、つまり、リモート(この場合はGitLab)のユーザー名とパスワードを使用します。つまり、すべての操作で、ユーザー名とパスワードを入力する必要があります。 。

したがって、プッシュ、プル、クローンを作成すると、GitLab / GitHubがユーザー名とパスワードで認証し、操作を実行できるようになります。

これを試したい場合は、コマンドを実行してHTTP URLに切り替えることができますgit remote set-url origin <http-git-url>

このような状況を回避するには、SSHプロトコルを使用できます。

SSHプロトコル

単純なSSH接続は、公開鍵と秘密鍵のペアで機能します。したがって、あなたの場合、SSH URLを使用して通信しているため、GitLabはあなたを認証できません。今、GitLabは何らかの方法であなたを知っている必要があります。そのためには、公開鍵と秘密鍵のペアを作成し、公開鍵をGitLabに渡す必要があります。

GitLabでプッシュ、プル、クローンを作成すると、GIT(SSH内部)はデフォルトで秘密鍵をGitLabに提供して身元を確認し、GitLabで操作を実行できるようになります。

ですから、ムハンマドによってすでに与えられているステップを繰り返さないで、理論的にそれらを繰り返します。

  1. 鍵ペア `ssh-keygen -t rsa -b 2048 -C" My Common SSH Key "を生成します
  2. 生成された鍵ペアは、デフォルトで~/.ssh名前付きid_rsa.pub(公開鍵)&id_rsa(秘密鍵)になります。
  3. 公開鍵をGitLabアカウントに保存します(同じ鍵を複数のサーバーまたは任意のサーバー/アカウントで使用できます)。
  4. クローン/プッシュ/プルすると、GITが秘密鍵を提供します。
  5. GitLabは秘密鍵を公開鍵と照合し、実行できるようにします。

チップ

常に2048バイト以上の強力なrsaキーを作成する必要があります。したがって、コマンドは次のようになりますssh-keygen -t rsa -b 2048

https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair

一般的な考え

どちらのアプローチにも長所と短所があります。上記のテキストを入力した後、これについて何かを読んだことがないので、これについてさらに検索しました。

これについて詳しく説明しているこの公式ドキュメントhttps://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocolsを見つけました。ここでの私のポイントは、エラーを読んでエラーについて考えることにより、独自の理論や理解を行い、Googleの結果と照合して問題を修正できるということです。



0

私はubuntu 18.04を使用していますが、それは実際には私のローカルマシンでの権限の問題でした。.gitフォルダーに読み取り/書き込み権限を設定すると、問題はなくなりました。


0

まあ私はこれと同じ問題があり、@ Khanが提案した答えを試した後。ただし、.git / configファイルの元のURLをhttpsアドレスに変更するだけで機能させることができました:https: //gitlab.com/mygitlabusername/mygitproject.git

ssh経由のアクセスが拒否されているので、httpsを使用しても問題はないはずです。ただし、atリポジトリへのプッシュごとにユーザー名とパスワードを要求します


0

git config credential.helper storeサイトでTLS / SSLを使用している場合に使用してください。これがうまくいくことを願っています


0

gitリポジトリにアクセスする2つの方法、つまりSSHまたはHTTPSを使用する方法には違いがあるようです。私は、SSHを使用してローカルリポジトリをプッシュしようとしたため、エラーが発生しました。

この問題は、プロジェクトのランディングページでクローンボタンをクリックし、HTTPSリンクをコピーして、「git @ gitlab ...」の形式で表示されるSSHリンクに置き換えることで簡単に解決できます。


それは質問に答えません。
RalfFriedl

0

権限の変更:: chmod 400〜/ .ssh / id_rsaこれは私に役立ちました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.