web-dev-qa-db-ja.com

ターミナルでGithubアカウントの切り替えに問題がある

GitHubに何かをプッシュしてからしばらく経ちました。私は最初に自分のコンピューターにアカウントを設定していましたが、すべてうまくいきました。次に、アカウントをクライアントのアカウントに変更しました(コードをプライベートリポジトリにプッシュできました)。

しばらく経ちましたが、今は古いアカウントに戻り、問題が発生しています。新しいrsa_keyを生成し、Tの ここの指示 にほぼ従いました。

ただし、次のように入力すると:ssh -T [email protected]私は得る:

こんにちはoldincorrectusername!認証に成功しましたが、GitHubはシェルアクセスを提供しません。

この古いクライアントのユーザー名は承認されていないため、リポジトリにプッシュすることもできません。コンピューターとGitHubのアカウント設定の両方でsshキーを再確認しました。

グローバルアカウント変数も設定しました。

git config --global user.name "Firstname Lastname"
git config --global user.email "[email protected]"
git config --global github.user username
git config --global github.token 0123456789yourf0123456789token

それでも、古いユーザー名を教えてくれます。

助言がありますか?

おかげで、

32
goddamnyouryan

問題は、ローカルのsshがまだ「古い」SSHキーをGitHubに提供していることです。これは、ssh-agentに読み込まれたGitHub認識キー(「古い」キー)が1つあるが、別のGitHub認識キー(「新しい」キー)を使用したい場合によく起こります。 )。

sshは、次の順序でキーを提供します。

  1. エージェントにロードされた指定されたキー
  2. エージェントにロードされた他のキー
  3. エージェントにロードされていない指定されたキー

「指定されたキー」とは、-iコマンドラインオプションまたはIdentityFile設定オプション(~/.ssh/configまたは-oコマンドラインで指定できる)で指定されたキーを意味しますオプション)。

「古い」キーがエージェントにロードされているが「新しい」キーがロードされていない場合、sshは、「新しい」キーの前に常に「古い」キー(最初または2番目のカテゴリから)を提供します「新しい」キーを-i/IdentitiesOnlyで指定した場合でも、キー(ロードされないため、最後のカテゴリのみ)。


ssh-add -lを使用して、ssh-agentにどのキーがロードされているかを確認できます。 「古い」キーがリストされている場合は、エージェントからアンロードすることで問題を修正できます(「新しい」キーを除き、GitHubが認識した他のキーも必ずアンロードしてください)。

ssh-add -d ~/.ssh/old_key_file

Mac OS Xを使用している場合、ある時点でパスワードの入力を求められたときに「キーチェーンのパスワードを記憶する」をチェックすると、システムは「古い」キーを自動的にロードします。コマンドでキーのキーチェーンエントリを削除することにより、この自動読み込みを無効にできます。
/usr/bin/ssh-add -K -d ~/.ssh/old_key_file。他のシステムでも同様のことが行われますが、「停止」するように指示するコマンドは異なります。


エージェントから「古い」キーをアンロードする代わりに、IdentitiesOnly設定オプションをyesに設定して、sshにキーの2番目のカテゴリをスキップするように指示できます(指定されていないエージェントがロードしたキー)。 ~/.ssh/configには次のようなセクションが含まれる場合があります。

Host github.com
    User           git
    IdentityFile   ~/.ssh/id_rsa # wherever your "new" key lives
    IdentitiesOnly yes

この方法では、GitHubが認識した他のキーがエージェントにロードされているかどうかは関係ありません。 sshは常に「新しい」キーのみを提供します。

両方のGitHubアカウントのリポジトリにアクセスする必要があり、GitHubアカウントを切り替えるたびに構成ファイルを編集する必要がない場合は、次のように~/.ssh/configをセットアップできます。

Host clientname.github.com
    HostName      github.com
    IdentityFile ~/.ssh/client_id_rsa  # or wherever your "old" client key lives

Host github.com
    IdentityFile   ~/.ssh/id_rsa        # or wherever your "new" key lives

Host github.com *.github.com
    User           git
    Hostname       github.com
    IdentitiesOnly yes

次に、リポジトリにgithub.com:GitHubAccount/repositoryなどのURLを使用し、クライアントのリポジトリにclientname.github.com:GitHubAccount/repositoryなどのURLを使用します(必要に応じてgit@プレフィックスを戻すことができますが、上記のエントリは必要ないため、 User構成変数を設定します)。

58
Chris Johnsen