SSH:権限が拒否されました。 github

SSH:権限が拒否されました。 github

githubにリモートリポジトリを作成するためのスクリプトを作成しました。コンピュータにリモートストレージを作成するためにスクリプトにアクセスする複数のユーザーがいる場合は、そのためにgithubトークンキーが必要です。以下からトークンキーを生成しました。トークンGithub次に、次のコマンドを使用してgithubからSSHアクセス用のキーを生成します。

Accountgithub.com/usuario1

linuxuser@linuxmint$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

/home/linuxuser/.ssh/id_rsa_hotmail_github_usuario1

getting like below:

Enter file in which to save the key (/home/linuxuser/.ssh/id_rsa): /home/linuxuser/.ssh/id_rsa_hotmail_github_usuario1


Accountgithub.com/usuario2

linuxuser@linuxmint$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

/home/linuxuser/.ssh/id_rsa_yahoo_github_usuario2

getting like below:

Enter file in which to save the key (/home/linuxuser/.ssh/id_rsa): /home/linuxuser/.ssh/id_rsa_yahoo_github_usuario2

SSHキーのリスト

ls -a ~/.ssh/
id_rsa_hotmail_github_usuario1  id_rsa_hotmail_github_usuario1.pub
id_rsa_yahoo_github_usuario2  id_rsa_yahoo_github_usuario2.pub

各キーをコピーしてアカウントに入れました。鍵を生成したLinuxユーザーとしてログインしました。

スクリプトでユーザーをgithubに保持するために、ユーザーベクトルを次のように変更しました。

USUARIOS_GIT=("usuario1" "usuario2" "github_usuario3")

そして、トークンベクトルには各githubユーザーのトークンを入れました。

CHAVE_TOKEN=("dhkssklfhfkh" "kfhfflhd" "chave_token_github_usuario3")

つまり、リモートリポジトリを作成する必要がある2つのgithubアカウントと、ユーザーを自分のコンピュータにログインするスクリプトがあります。linuxuser

linuxuser@linuxmint/dev$ gitpratico usuario1 projeto1

次のエラーが表示されます。

git push [email protected]:usuario1/projeto1.git master
ERROR: Permission to usuario1/projeto1.git denied to usuario2.

空のリポジトリを作成しますが、変更やコミットを許可せず、後でリポジトリファイルをgithub.com/usuario1にアップロードしません。usuario2Yahooアカウントを持っている人にアクセスしようとしているようです。

たとえば、会社のコンピュータにユーザーが1人だけで、同じコンピュータユーザーを使用して最大3人の異なる時間にコンピュータにアクセスし、スクリプトを使用して別のgithubユーザーにリモートストレージを作成する必要がある場合、リモートストレージは空でコミットされますこれは許可されていません。

別のLinuxユーザーとしてログインしなくても別のアカウントでリポジトリを作成できるようにするには、どうすればこの問題を解決できますか?

他のgithubユーザーでリモートリポジトリを作成するスクリプト gitpratico_multiuserスクリプト


私のユーザーだけを使ってそれを設定しましたが、プロジェクトフォルダにあるファイルを追加せずに空のストレージを作成します。

私のファイル〜/.ssh/config this

# Default GitHub user (usuario1)
Host github-hotmail  
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_hotmail_github_usuario1
  IdentitiesOnly yes
  User git

# Github user (usuario2)
Host github-yahoo  
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_yahoo_github_usuario2
  IdentitiesOnly yes
  User git

エージェントに SSH 秘密鍵を追加します。

$ ssh-add ~/.ssh/id_rsa_yahoo_github_usuario1
$ ssh-add ~/.ssh/id_rsa_yahoo_github_usuario2

接続テスト

ユーザー1から

$ ssh -T git@github-hotmail
Hi usuario1! You've successfully authenticated, but GitHub does not provide shell access.

ユーザー2から

$ ssh -T git@github-yahoo
Hi usuario2! You've successfully authenticated, but GitHub does not provide shell access.

タイピング中gitpratico_multiuser user1 <repository1>

入力してもgit statusアップロードするファイルがあるというメッセージは表示されません。

私が入力したとき:

タイピング中gitpratico_multiuser user2 <repository2>

次の表に示すように:

ERROR: Permission to usuario2/repository2.git denied to usuario1.
fatal: Could not read from remote repository.

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

しかし、別のLinuxユーザーとしてログインして次のように設定しても、別の問題が発生します。

root@linuxmint# linuxuser2 にログインします。

userlinux2@linuxmint$ mkdir .ssh

userlinux2@linuxmint$nano ~/.ssh/config

# Default GitHub user (user1)
github-hotmail host
   HostName github.com
   IdentityFile /home/userlinux1/.ssh/id_rsa_hotmail_github_usuario1
   Identities Only yes
   User git

# Github user (user2)
github-yahoo host
   HostName github.com
   IdentityFile /home/userlinux1/.ssh/id_rsa_yahoo_github_usuario2
   Identities Only yes
   User git

linuxuser2@linuxmint$ sudo ssh-add /home/userlinux1/.ssh/id_rsa_yahoo_github_user2

[sudo] senha para linuxuser2:     
Could not open a connection to your authentication agent.

linuxuser2@linuxmint$ sudo ssh-add /home/userlinux2/.ssh/id_rsa_hotmail_github_usuario1

[sudo] senha para linuxuser2:     
Could not open a connection to your authentication agent.

他のLinuxユーザーとしてログインしたgithub user1とuser2のリポジトリを作成することはできません。 .sshフォルダを作成して秘密鍵をコピーしてみましたlinuxuser2が、結果は出ません。この問題をどのように解決できますか?検索しましたが、userlinux1で生成された同じキーを他のlinuxuser2で使用する方法に関する情報を見つけることはありませんgithub_usuario1github_usario2

この問題をどのように解決できますか?

答え1

この状況の根本的な原因は、GithubがSSHキーを使用することを選択した方法です。解決策があります...

通常、SSHはログインするユーザーを指定する必要があります。ただし、Githubはユーザーを識別するために公開鍵のみを使用することを選択します。常に指定することに注意してください。@github.comなので、常にSSHにuserとしてログインするように指示しますgit

だから通常両方のアカウントにSSHキーを関連付けて希望のユーザーを指定できますが、SSHキーはどのアカウントを識別するために使用されるため、ここではこれを行うことはできません。

これは、SSHコマンドラインが提供したすべての公開鍵を試して最初の成功した公開鍵で停止するために問題になります。つまり、誤ったユーザーとして誤ってログインすると、成功したログインが必要なGitリポジトリにアクセスできなくなるため、Githubに「アクセス拒否」というメッセージが表示されます。

これを「バグ」と呼びたい誘惑を感じることもありますが、この場合は確かに頭痛を引き起こす可能性があります。ただし、この設定が完全​​に珍しいわけではありません。


これについて何ができますか?

SSH設定でプロファイルを設定できます。かなり良い例があります。ここ

ファイルを作成または編集し、~/.ssh/config/2つのプロファイルを追加します。私はjim彼らに電話しますbob

Host github-jim
   HostName github.com
   IdentityFile ~/.ssh/jim_private_key
   IdentitiesOnly yes
   User git
   
Host github-bob
   HostName github.com
   IdentityFile ~/.ssh/bob_private_key
   IdentitiesOnly yes
   User git

git URLを少し変更するだけで、SSHに使用するキーを知らせることができます。

たとえば、

git clone github-jim:jim/projeto1.git

git clone github-bob:bob/projeto1.git

必要なユーザーを置き換える[email protected]か指定しgithub-jimgithub-bob正しい秘密鍵ファイルを選択する方法を参照してください。

関連情報