web-dev-qa-db-ja.com

複数のSSH公開鍵を使用する

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の設定に何か問題があるかどうかわからない。

97
Dave Long

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
109
Chris Johnsen

man ssh_config

何かのようなもの

Host personal_repo
  User personal
  IdentityFile .ssh/personal_rsa

Host company_repo
  User company
  IdentityFile .ssh/company_rsa

そしてあなたのgitリポジトリのホストとしてpersonal_repoを使ってください。

3
Reactormonk

IdentityFileとIdentitiesOnlyはうまく機能します。接続に別のホスト名を使用することを忘れないようにする必要があること、および転送されたエージェント接続がすべてのキーを保持しているという事実。

私は最近使い始めました:

https://github.com/ccontavalli/ssh-ident

これはsshのラッパーです。

  • 定義したIDごとに、まったく別のエージェントを保持します。
  • ログインセッション間で自動的にエージェントを共有します。あなたの.bashrcでは何もしません。
  • 初めて必要なときに、エージェントと対応するキーをオンデマンドでロードします。
  • sshコマンドライン(ホスト名など)または現在の作業ディレクトリに基づいて、使用するエージェントを決定します。私は私がしていることに応じて異なるパスから作業する傾向があるので、これは特に便利です。
3
MarkMo

あなたが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エージェント転送)

0
Vanuan