Unfuddleに個人アカウントと会社アカウントを持っています。 UnfuddleではSSHキーは単一のアカウントでしか使用できないので、両方のアカウントに対してラップトップで別々のSSHキーを作成する必要があります。私はssh-keygen -t rsa
を実行して名前の異なる2つの鍵を生成しました(個人名がデフォルト名、会社名が{company} _rsa)。現在の問題は、私のデフォルトキーが至るところで使用されているように見え、個々のリポジトリに対してGitで使用するキーを指定する方法を見つけることができないことです。
だから私の質問です:どのようにリポジトリ間で使用するSSHキーを指定するのですか?
私は自分のssh_config(〜/ .ssh/config)を設定しましたが、それでもまだうまくいかないようです。
設定:
Host {personalaccount}.unfuddle.com
HostName {personalaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/id_rsa
Host {companyaccount}.unfuddle.com
HostName {companyaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/cage_rsa
私の会社の偽造防止アカウントのリポジトリ用の私のGitリポジトリ設定ファイルは次のようになります。
[remote "Origin"]
url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/Origin/*
だから私は私のSSH設定や私のGitの設定に何か問題があるかどうかわからない。
id_rsa
キーがロードされているアクティブなssh-agentがある場合、問題はsshがそのキーを提供していることです。最初。 Unfuddleはおそらく認証のためにそれを受け入れます(例えばsshdで)が、それを会社のリポジトリにアクセスするための承認のために拒絶します(例えば彼らが承認のために使うどんな内部ソフトウェアでも。おそらく、会社のアカウントにあなたの個人鍵を追加する方法があります(複数の人が同じcorp_rsa
公開鍵と秘密鍵のファイルを共有していないのですか?).
IdentitiesOnly
.ssh/config
設定キーワードは、sshがリモートsshdに提供するキーをIdentityFile
キーワードで指定されたものに限定するために使用できます。 (つまり、アクティブなssh-agentにロードされた追加のキーの使用を拒否します。
これらの.ssh/config
セクションを試してください。
Host {personalaccount}.unfuddle.com
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Host {companyaccount}.unfuddle.com
IdentityFile ~/.ssh/{companyaccount}_rsa
IdentitiesOnly yes
それから、次のようなGit URLを使用してください。
git@{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
git@{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git
.ssh/config
メカニズムを最大限に活用したい場合は、独自のカスタムホスト名を指定してデフォルトのユーザー名を変更できます。
Host uf-mine
HostName {personalaccount}.unfuddle.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Host uf-comp
HostName {companyaccount}.unfuddle.com
User git
IdentityFile ~/.ssh/{companyaccount}_rsa
IdentitiesOnly yes
それから、次のようなGit URLを使用してください。
uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git
man ssh_config
何かのようなもの
Host personal_repo
User personal
IdentityFile .ssh/personal_rsa
Host company_repo
User company
IdentityFile .ssh/company_rsa
そしてあなたのgitリポジトリのホストとしてpersonal_repo
を使ってください。
IdentityFileとIdentitiesOnlyはうまく機能します。接続に別のホスト名を使用することを忘れないようにする必要があること、および転送されたエージェント接続がすべてのキーを保持しているという事実。
私は最近使い始めました:
https://github.com/ccontavalli/ssh-ident
これはsshのラッパーです。
あなたがsshエージェントを使いたいならば、これは正しい方法です:
# Create public keys to make sure they exist
# this is a must if you use ssh agent forwarding
# or want to use ssh-agent at all
ssh-agent -L | grep personal > ~/.ssh/personal_identity.pub
ssh-agent -L | grep company > ~/.ssh/company_identity.pub
# Add to ~/.ssh/config
Host {personalaccount}.unfuddle.com
IdentityFile ~/.ssh/personal_identity.pub
Host {companyaccount}.unfuddle.com
IdentityFile ~/.ssh/company_identity.pub
説明:〜/ .sshディレクトリーに秘密鍵がある場合、ssh-agentは使用されません。だから私たちは別の名前で公開鍵を作成します、そのためsshはssh-agentを使うことを強いられます。あなたが秘密鍵にアクセスできない場合にも役立ちます(例:sshエージェント転送)