形になる
別のgithub / bitbucket / whateverアカウントでgitリポジトリを管理するには、新しいSSHキーを生成するだけです。
私たちはあなたの第二のIDでレポを引っ張っ/プッシュを開始する前に、しかし、我々は形にあなたをもらわなく-レッツは、あなたのシステムは、典型的なとセットアップであると仮定id_rsa
し、id_rsa.pub
鍵のペア。今、あなたtree ~/.ssh
はこのように見えます
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
まず、そのキーペアに名前を付けます。わかりやすい名前を追加すると、どのユーザー/リモートでどのキーが使用されているかを覚えやすくなります。
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
次に、新しいキーペアを生成しましょう。ここでは、新しいキーに名前を付けます。github-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
私たちが見たときに今、tree ~/.ssh
我々が表示さ
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
次に、~/.ssh/config
主要な構成を定義するファイルを設定する必要があります。適切な所有者読み取り/書き込み専用権限で作成します
$ (umask 077; touch ~/.ssh/config)
それをお気に入りのエディターで開き、次のコンテンツを追加します
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
おそらく、プライマリgithub IDに関連付けられた既存のリポジトリがいくつかあるはずです。そのため、「デフォルト」のgithub.com Host
はmainuser
キーを使用するように設定されています。あるアカウントを別のアカウントよりも優先したくない場合は、システム上の既存のリポジトリを更新して、更新されたssh構成を使用する方法を説明します。
新しいSSHキーをgithubに追加します
頭の上github.com/settings/keysあなたの新しい追加するために、公開鍵を
公開鍵の内容は、次のようにして取得できます:コピーしてgithubに貼り付けます
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
これで、新しいユーザーIDがすべてセットアップされました。以下に、その使用方法を示します。
物事を成し遂げる:リポジトリのクローン
では、これをどのように組み合わせてgitおよびgithubと連携させるのでしょうか。まあ、卵なしでは鶏肉を作ることができないため、既存のレポのクローンを作成します。この状況は、職場の新しいgithubアカウントがあり、会社のプロジェクトに追加された場合に当てはまる可能性があります。
github.com/someorg/somerepo
すでに存在していて、あなたがそれに追加されたとしましょう–クローニングは簡単です
$ git clone github.com-otheruser:someorg/somerepo.git
その太字部分は、ファイルに設定した名前と一致している必要があります。これはgitを対応するものに正しく接続し、githubで適切に認証しますHost
~/.ssh/config
IdentityFile
物事を成し遂げる:新しいリポジトリを作成する
さて、卵なしで鶏肉を作ることはできないので、セカンダリアカウントで新しいリポジトリを公開する方法を見ていきます。この状況は、セカンダリgithubアカウントを使用して新しいコンテンツを作成しているユーザーに適用されます。
ローカルで少し作業を行って、githubにプッシュする準備ができたとしましょう。よろしければ私と一緒にフォローしてください
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
あなたのアイデンティティを使用するようにこのリポジトリを設定してください
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
最初のコミットをしてください
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
コミットをチェックして、git logを使用して新しいIDが使用されたことを確認します
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
よし、githubにプッシュする時がきた!githubはまだ新しいリポジトリを認識していないため、まずgithub.com/newにアクセスして新しいリポジトリを作成します– somerepoという名前を付けます
ここで、正しいID /資格情報を使用してGitHubに「通信」するようにリポジトリを構成するために、リモートを追加しました。新しいアカウントのgithubユーザー名はsomeuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
その太字の部分は絶対に重要でありHost
、~/.ssh/config
ファイルで定義したものと一致する必要があります
最後に、レポをプッシュします
$ git push origin master
既存のリポジトリを更新して新しいSSH構成を使用する
すでにいくつかのリポジトリが複製されているが、今度は新しいSSH構成を使用したいとします。上記の例では、SSH構成ファイルで以前のid_rsa
/ id_rsa.pub
キーペアをに割り当てることにより、既存のリポジトリをそのまま維持していますHost github.com
。これには何の問題もありませんが、私は少なくとも5つのgithub構成を現在持っており、それらの1つを「デフォルト」構成と見なしたくありません。それぞれについて明確にしたいと思います。
この前に
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
これをこれに更新します(太字の変更)
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
しかし、これは、github.com
リモートを持つ既存のリポジトリがこのIDファイルで動作しなくなったことを意味します。しかし、心配しないでください、それは簡単な修正です。
既存のリポジトリを更新して新しいSSH構成を使用するには、リポジトリのgit構成ファイルを開いてURLを更新するだけです!
$ cd existingrepo
$ nano .git/config
リモート起点フィールドを更新します(太字で変更)
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
それでおしまい。今、あなたはpush
/ pull
心ゆくまで
SSHキーファイルの権限
公開鍵が正しく機能しない問題が発生している場合、SSHはディレクトリおよび対応する鍵ファイルで許可されているファイル権限に非常に厳格~/.ssh
です
経験則として、ディレクトリ700
とファイルはすべて同じである必要があります。600
つまり、所有者は読み取り/書き込み専用であり、他のグループ/ユーザーは読み取り/書き込みできません。
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
SSHキーの管理方法
接続するホストごとに個別のSSHキーを管理しているため、1つのキーが侵害された場合でも、そのキーを使用した他のすべての場所でキーを更新する必要はありません。これは、アドビから1億5,000万人のユーザー情報が盗まれたという通知を受け取ったときと同じです。クレジットカードをキャンセルして、それに依存するすべてのサービスを更新する必要があります。
ここでは私のものだ~/.ssh
私は1つの持っている:のようなディレクトリのルックスは、.pem
各ドメインのフォルダ内の各ユーザのキーを、私はに接続します。.pem
キーを使用するので、キーごとに1 つのファイルのみが必要です。
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
そして、これが私の対応する/.ssh/config
ファイルです。明らかにgithubに関するものは、githubに関するこの質問への回答に関連していますが、この回答は、任意の数のサービス/マシンでssh IDを管理するための知識を身に付けることを目的としています。
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
PEMキーからSSH公開キーを取得する
上記で、キーごとに1つのファイルしかないことに気付きました。公開鍵を提供する必要がある場合は、必要に応じて生成するだけです。
したがって、githubがssh公開鍵を要求したら、このコマンドを実行して公開鍵をstdoutに出力します–必要に応じてコピー/貼り付け
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
これは、キーをリモートマシンに追加するために使用するプロセスと同じです。ssh-rsa AAAA...
値は、リモートのにコピーされ~/.ssh/authorized_keys
たファイル
お使いの変換id_rsa
/ id_rsa.pub
PEM形式に鍵ペアを
だからあなたはあなたにあなたの主要なファイルを飼いならし、いくつかのファイルシステムの残骸を減らしたいですか?キーペアを単一の PEMに変換するのは簡単です
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
または、上記の例に従って、名前を変更しid_rsa -> github-mainuser
、id_rsa.pub -> github-mainuser.pub
–
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
これが正しく変換されたことを確認するために、生成された公開鍵が古い公開鍵と一致することを確認する必要があります
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
これでファイルが作成されたgithub-mainuser.pem
ので、古いファイルgithub-mainuser
とgithub-mainuser.pub
ファイルを安全に削除できます。必要なのはPEMファイルだけです。必要なときに公開鍵を生成するだけです^ _ ^
ゼロからのPEMキーの作成
あなたは、公開鍵/秘密鍵のペアを作成し、する必要はありません、その後、単一のPEMキーに変換します。PEMキーを直接作成できます。
作成してみましょう newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
SSH公開鍵の取得は同じです
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> ssh-agentに使用のために含めるように指示します。<hr />上記のチュートリアルを使用すると、残りはうまく機能します。