gitlabリポジトリへのアクセスをブロックしている「アクセス権」は何ですか?


14

新鮮なクリーンサーバーでgitlab(6.5.1)をセットアップしようとしています。すべてが機能しているように見えますが、gitはどのプロジェクトにもプッシュできません。新しく作成されたプロジェクトページからコマンドを実行し、ssh経由でリモートにプッシュすると、次の結果が得られます。

$ git push -u origin master
fatal: Could not read from remote repository.

Please make sure you have the correct access
rights and the repository exists.

これはかなり一般的な問題のようです。残念ながら、多くの潜在的な原因があり、それらのどれも一致しないようです。問題3424 オンライン古いリリースおよび他のさまざまなソースの私が見て、次の提案をチェックしました:

  • 残りのsshキー

    これは、残り物のないクリーンなセットアップです。私の鍵は許可された鍵ファイルに適切に追加され、リストされている唯一のものです。

  • デバッグロギングを使用してsshを実行すると、Ruby環境変数に関連するエラーが表示されます。

    鉱山がきれいになります。SSHデバッグ正常な接続を示します。認証ハンドシェイクに関するすべてが正常である場合、これは出力の終わりです。

    debug1: Sending command: git-receive-pack 'username/reponame.git'
    debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
    debug1: channel 0: free: client-session, nchannels 1
    debug1: fd 0 clearing O_NONBLOCK
    debug1: fd 1 clearing O_NONBLOCK
    
  • gitlab-shell環境の問題。

    上記と同じエラーメッセージが表示される他の多くのユーザーとは異なり、私のgitlab-shell checkスクリプトは、正常なBOMを返します。

    % sudo -u gitlab -H ~gitlab/gitlab-shell/bin/check   
    Check GitLab API access: OK
    Check directories and files: 
            /var/lib/gitlab/repositories: OK
            /var/lib/gitlab/.ssh/authorized_keys: OK
    Test redis-cli executable: redis-cli 2.8.5
    Send ping to redis server: PONG
    
  • {unicorn、sidekiq、redis}を再起動します

    1つ以上のサービスを再起動するとこれが解消されるという報告は、ここでは当てはまらないようです。これは、デーモンを修正する断続的な問題ではありません。

  • リポジトリが物理的に作成されていません

    しかし、そうです。毎回初めて、裸のgitレポジトリ~gitlab/repositories/username/reponame.gitが毎回作成され、正しい権限を持っているようです。

  • A)DNSの問題、B)間違ったip / port / interfaceバインディング、C)スラッシュがない/持っていないため、GitlabシェルはAPIサーバーと通信できません。

    checkスクリプトは、APIアクセスは問題ないと述べています。

    私はnginxを実行していないので、それに関連するデフォルトのIPバインディングの問題はn / aです。

    私は両方を試してみた*:8080127.0.0.1:8080の値を聞くためunicorn.yml

    それを超えて、localhost、127.0.0.1、および完全修飾ドメイン名(これはDNSで問題なく解決できます)のさまざまな反復を試行しshell.ymlました。また、ポート80のApache SSL /プロキシホストの代わりに、これをポート8080のユニコーンサーバーに直接配線しようとしました。何も違いはありません。私の証明書は自己署名されておらず、ブラウザでは正常に機能していますが、self_signed_cert: trueとにかく設定しようとしました。なし。

  • 報告されたgitパスが間違っています。gitlabユーザーのホームから完全修飾パスを追加してください。

    これは、gitlab-shellがこれを修正するためにいくつかのモンキービジネスを行っていない場合、合法的な提案のように思えますが、git remote add origin gitlab@server:username/reponame.git「git remote add origin gitlab @ server:repositories / username / reponame.git」に変更してみました。同じエラー。

これは提案された解決策の大部分であるように見えますが、どれも正しいとは思えません。注:httpをプッシュできます。ログインプロンプトは、LDAPユーザー名とパスワードを受け入れ、プッシュを受け入れます。これは、SSHを使用する際の問題にすぎません。でsshログイン部分だけをテストするとssh -T gitlab@serverうまくいきます。

このエラーの原因は他に何ですか?

gitlabでこのような問題をデバッグするにはどうすればよいですか?に関連するものはまったくないようです~gitlab/gitlab-shell/gitlab-shell.log。より有益なエラーメッセージはどこにありますか?


「ssh -vv gitlab @ server」の出力は何ですか??
DrGkill 14

@DrGkill興味深いことは何もありません(私の目には)、自分見てください
カレブ14

gitlabで外部ログインが許可されている場合は、sshd_configを参照してください。考えられる2つの原因は、SSHまたはgitlab-shellです。gitlabが接続しているとき、auth.logは何を言いますか?
DrGkill 14

@DrGkill私はそれをチェックしました(そして、sshdまたはpamによる外部ログインが許可されていなかった場合、上で示したログは成功した認証通知を表示しませんでした)。SSHは問題なく接続しています。サーバー側のログは、認証が成功したこと、セッションが開かれたこと、ユーザーenvの設定に関するsystemdの内容、「<remote ip>からの切断を受信」、セッションのクリーンアップに関するその他の情報を示します。
カレブ14

回答:


7

このSSHデバッグメッセージが原因で、SSHとシステム間の構成に問題があると確信しています。

client_input_channel_req: channel 0 rtype eow@openssh.com reply 0

認証に成功した直後にこのメッセージを受け取りますが、bashからのメッセージはありません。これは、ログイン後にプログラムが起動されなかったことを意味します。

gitlabユーザーに適切な設定がある場合は、passwdファイルを監視します。

gitlab:x:1011:1012:GitLab,,,:/path/to/gitlab:/bin/bash

次のような構成ファイルにbashに奇妙なものがないことを確認します

  • bash.bashrc
  • 。プロフィール
  • .bashrc

次に、上位レベルに移動します:Gitlab-shell /path/to/gitlab/.ssh/authorized_keysが以下の設定を持っていることを確認します:

command="/path/to/gitlab/gitlab-shell/bin/gitlab-shell key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa A...

/パス/に/ gitlab / gitlab-シェル/ binに/ gitlabシェル gitlabユーザーと実行が所有します。

次のコマンドを起動して、gitlab-shellが完全に動作することを確認できます。

# /path/to/gitlab-shell/bin/gitlab-shell
Welcome to GitLab, Anonymous!

リモートログインが実際に機能していて、gitlab-shellに正しく接続されている場合、リモートログインしようとすると、ダンプする前に同じウェルカムメッセージが表示されます(ただし、ログインに使用したsshキーを持つユーザーと一致します)。

$ ssh gitlab@server
Welcome to GitLab, <your user's full name>!
Connection to <server> closed.

おそらく、sshがgitlabにまったく接続していないことを示すメッセージはありません。

最後に、gitlab-shell設定(config.yml)をチェックアウトし、次のことを確認します:

http_settings:
    # trailing slash is important
    gitlab_url: "https://remote_server/"
    ca_file: /path/to/webserver/certificate.crt

そして最終的に:

    self_signed_cert: false

<head-desk>あなたはずっと正しい軌道に乗っていました。gitlabユーザーが割り当てられていました/bin/false。そのユーザーを追加するときにArchパッケージがシェルを正しく設定しないか、このシステムにLDAP認証を実装するプロセスのどこかでシェルを壊しました。すべての努力をありがとう。
カレブ

tyの回答は、デバッグを助けてくれました。もう1つの問題は、sshキー転送を有効にしている場合に、自分を特定できない間違ったキーをgitlabに送信することです。gitlabにSSH接続すると、Welcome Anonymousも取得されます。SSH -aを使用してjumpserver上だけで無効キーフォワーディング
tommics

私はCalebと同じ問題を抱えていましたが、それを機能させるには、/ bin / {false、true、nologin}の代わりにシェルを設定する必要があることも自分で発見しました。しかし実際には、ユーザーはインストール中に意図的にシェルなしで作成されます(gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/…を参照)sudo adduser --disabled-login --gecos 'GitLab' git。したがって、シェルなしで動作するはずです。私はまだ別の解決策を探しています。
ホイヘンス14年

0

私はこの同じ問題を抱えており、グーグルで何日もスタックオーバーフローを検索した後、私は最終的に私の問題を見つけました。他の誰かが同じ問題を抱えていた場合に備えて、Gitlabに接続して書面でこれを入手したかったのです。

私はここで自分の解決策を見つけました:https : //stackoverflow.com/questions/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

私はWindowsを使用していますが、問題はGit Bashが、Puttyと共にインストールされるplink.exeからSSHキーの場所を取得しようとしていたことです。

解決策は、環境変数GIT_SSHを削除することでした。その後、すべてが機能しました。

これが誰かに役立つことを願っています。

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