web-dev-qa-db-ja.com

リモートリポジトリへのgit Push「リモートリポジトリから読み取れませんでした」

しばらく検索しましたが、問題の解決策が見つかりません。

ユーザー名gitとローカルgitリポジトリでssh経由で接続できるサーバーがあります。
次に、ローカルリポジトリをサーバー上に新しく作成したリポジトリにプッシュします。

ここに私がやったことがあります:

  • /home/git/test.gitにgitリポジトリを作成しました
  • リポジトリを裸として初期化した
  • ローカルマシンにリモートリポジトリを追加しました
    git remote add test ssh://git@serverIp:/home/git/test.git
  • 今、私はプッシュコマンドを実行しました:
    git Push test master

私はいつも

fatal: could not read from remote repository

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

ローカルWindows 7マシンで作業していて、Linuxサーバーにアップロードしたい。
gitユーザーでssh経由でログインできます。私はこれをrootユーザー(一度動作させるため)としても同じ結果を出そうとしました。
ssh passwordを求められることはありません。

私は何を間違っているのか本当に分かりません。
これを複製と呼ぶ前に、私はこの問題をよく検索しましたが、同じ問題について話している人はいませんでした。

更新:

  • 「which git」は/ usr/bin/gitを返します
  • PATHエコーには/ usr/binが含まれます
  • id_rsaおよびid_rsa.pubファイルはすべてセットアップされており、パスフレーズを出力しています
  • git-receive-packも機能し、/ usr/bin/git-receive-packを返すssh git @ serverIp
  • ssh git @ serverIp ls /home/git/test.git works
  • 関連するディレクトリはすべてchmod 755です
  • gitはリポジトリの所有者です
  • auth.logファイルは、試行されたプッシュコマンドで新しいエントリを取得しません
  • GIT_TRACE = 2 git Pushテストマスターは以下を返します:

    'C:\ Program Files(x86)\ PuTTY\plink.exe' '-batch' 'git @ serverIp' 'git-receive-pack'\''/home/git/test.git '\' ''致命的:リモートリポジトリから読み取ることができませんでした。正しいアクセス権があり、リポジトリが存在することを確認してください。

31
user1090755

この場合、PuTTYでopensshを使用することが重要でした。


元の回答(デバッグのヒント)

gitユーザーでssh経由でログインできます。

これはこれが機能することを意味します:

ssh git@serverIp

HOME変数が定義されており、id_rsaにssh公開/秘密キー(id_rsa.pub/%HOME%/.ssh/)が定義されています。

この質問 は別のURLを示唆しています:

git remote set-url test git@serverIp:/home/git/test.git

Gitリポジトリをgitとして作成したことを確認してください( この質問 のように、gitアカウントを作成したときはrootとしてではありません)。
ssh git@serverIp "which git"は、git実行可能ファイルのパスを返す必要があります。

また、すべての親ディレクトリに、ls -ld /home /home/git /home/git/test.gitを実行しているユーザーxまたはグループgitに関連するgitgroup(実行)ビットが設定されていることを確認します。
また、gitコマンドの詳細情報は次の方法で取得できます。

  • git Push --verbose
    または:
  • GIT_TRACE=2 git Push test master

パスワード付きのプライベートsshキーがある場合、最初にプライベートsshキーnotパスワードで保護されたsshコマンドをテストすることをお勧めします問題が解決しないか確認してください。
または、パスワードで保護されたsshキーを保持できますが、 この回答のように.bashrcを再確認してください


Ssh接続の問題(gitのパスワードが必要な場合)については、以下を確認してください。


あなたの場合、それはssh git@serverIp(インタラクティブセキュアシェル)で動作しますが、git(非インタラクティブセキュアシェルを開く)では動作しないため、 このスレッド を参照します。 これ

コマンドラインでsshを起動すると、非対話型の非ログインシェルが起動します。
しかし...bashはこの場合$BASH_ENVを使用しないため、~/.ssh/environmentで設定する(たとえば/etc/profileに)しても役に立ちません。
bashが行うのは、ソース/etc/bashrcおよび~/.bashrcです。

/etc/profilegitのパス を定義していることを確認してください。これは ここでは非ログインアカウントを使用できます (そうであるようです)ここでは、ssh git@serverIp "which git"が機能し、ssh git@serverIp "git --version"も機能するはずです。

ただし、正しい問題も確認し、chmod 755/home、および/home/git/home/git/test.gitをテストします。

17
VonC

私は個人的にこれに関して2つの異なる問題がありました:

  1. plink(Windowsのgitで使用)は、OpenSSH 2形式のid_rsa秘密鍵を受け入れません=>私は(puttygenを使用して)PuTTYに変換しなければなりませんでした.ppkフォーマットを所有し、Git拡張機能の「Remotes」ダイアログを介してアタッチします

  2. Gitフォルダーへのパスを誤って指定しました。'sshセッションがchrootされたため(Wordが間違っている可能性があります)、FTPの「root」を「/」として指定しました。代わりに「/home/www/username/」でした。

上記のようにGIT TRACE=2を使用し、procmonを使用してplinkの正確なコマンドラインを決定し、「-v "オプション("詳細 ")。

6
62mkv

以下を実行して、SSH IDを確認することもできます。

$ ssh-add -L

同様の問題がありました。私の身元に間違ったキーがありました。理由を覚えていません。すべてのIDを削除するだけです(キーを再度追加する必要があるかもしれません)。

$ ssh-add -D  

その後、問題なくプッシュ/プルを行いました。

6
Juan Matias

GIT_SSH環境変数を、PuTTYのTortoisePlink.exeの代わりにplink.exeのフルパスに設定します(このためにはTortoiseGitをダウンロードする必要がある場合があります)。これにより、ポップアップダイアログウィンドウで、プロンプトを表示したり、指紋を確認したり、パスワードを入力したりできます。 Gitを介してplink.exeを使用する場合、plink.exeプロンプトへの応答を入力することはできません。プロンプトがあると、致命的なエラーが発生します。

0
konyak