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にアップロードしません。usuario2
Yahooアカウントを持っている人にアクセスしようとしているようです。
たとえば、会社のコンピュータにユーザーが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_usuario1
。github_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-jim
てgithub-bob
正しい秘密鍵ファイルを選択する方法を参照してください。