特定のドメインのgit pushのSSH鍵を指定する

gitolite-admin ユーザの秘密鍵を使用して [email protected]:gitolite-admin にプッシュできるようにしたいと考えています。私自身の秘密鍵を使用して [email protected]:some_repo にプッシュしたいと考えています。 AFAIK、私は〜/ .ssh/config を使ってこの問題を解決することはできません。なぜなら、ユーザ名とサーバ名はどちらの場合も同じだからです。主に自分の秘密鍵を使用するので、 [email protected] のために〜/ .ssh/config に定義されています。単一の git 呼び出しに使用されるキーを上書きする方法を知っている人はいますか?

(別名:gitoliteは誰がキーに基づいてプッシュをしているのかを区別しているため、ユーザー、サーバーの文字列はユーザ​​ーごとに同じです。

279
密接に関係している: stackoverflow.com/questions/4565700/…
追加された 著者 Ciro Santilli 包子露宪 六四事件 法轮功,

8 答え

ユーザーとホストが同じであっても、〜/ .ssh/config で区別できます。たとえば、設定が次のようになっているとします。

Host gitolite-as-alice
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_rsa.alice
  IdentitiesOnly yes

Host gitolite-as-bob
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_dsa.bob
  IdentitiesOnly yes

次に、URLのホスト名の代わりに gitolite-as-alicegitolite-as-bob を使用します。

git remote add alice [email protected]:whatever.git
git remote add bob [email protected]:whatever.git

注意

You want to include the option IdentitiesOnly yes to prevent the use of default ids. Otherwise, if you also have id files matching the default names, they will get tried first because unlike other config options (which abide by "first in wins") the IdentityFile option appends to the list of identities to try. See: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807

506
追加された
私はGit Bashでウィンドウを使用しています。アイデンティティファイルラインについては、 IdentityFile〜davey/.ssh/id_rsa.davey または IdentityFile c:\ Users \ davey \ .ssh \ id_rsa.davey と記述しますか?
追加された 著者 David West,
known_hostsにHostNameを追加することを忘れないでください:> stackoverflow.com/questions/13363553/…
追加された 著者 rottenoats,
ssh-add〜/ .ssh/identity (Linux、Mac)を使用して ssh に鍵を追加したことを確認してください。そうしないと、これはIdentifyFileで指定されます。
追加された 著者 Tim,
素晴らしいです、ありがとう。あなたが〜/ .ssh/configのホスト仕様のための別名を自由に選ぶことができるとは私は理解していませんでした
追加された 著者 Confusion,
リモートの git @ の部分は、設定の User 行に与えられているので、必要ありません。
追加された 著者 dolmen,
rel="nofollow noreferrer"> github-keygen を使用すると、 Githubアカウント。
追加された 著者 dolmen,
素晴らしい回避策!!!私は年齢のための解決策を探していました。
追加された 著者 didando8a,
非常に有益な答えをいただきありがとうございます。私はこれをしばらく稼働させようとしていました。同じユーザーが同じid_rsa秘密鍵ファイルを使用しなければならないという前提を前にあきらめました。
追加された 著者 DrCord,
ホストの IdentityFile の行の直後に IdentitiesOnly yes を含む別の行を追加するまで、この解決策には苦労しました。それは複数のアイデンティティに沿って通過していたようで、そのうちの1つはホストへのアクセスがブロックされていました。
追加された 著者 Fitter Man,
このお返事ありがとうございます!私にとっては、IdentityFileは完全なパスでなければならないということでした(私はIdentityFileの引数としてid_rsa.rickだけを入れましたが、これは失敗しました)。 IdentityFileのその他の構文については、ssh_config(5)のマニュアルページを参照してください。
追加された 著者 rickumali,
sshコマンドが動作している間、gitコマンドで常に repository access denied エラーを受け取っていました。 IdentitiesOnly yes の行を追加すると問題が解決しました。
追加された 著者 Justin Lau,
魅力のように働く。
追加された 著者 Gaurav,

上記の Mark Longair が提供する代替方法は、 any gitコマンド、任意のリモート、別のSSH鍵で。基本的な考え方は、gitコマンドの実行時にSSHのIDを切り替えることです。

他の回答のホストエイリアスアプローチと比較した利点:

  • remote を明示的に指定できない場合でも、すべての gitコマンドまたはエイリアスで動作します。
  • 各クライアントマシンのリポジトリごとに1回ではなく、クライアントマシンごとに1回だけ設定する必要があるため、多くのリポジトリで作業するのが簡単です。

いくつかの小さなスクリプトとgit別名 admin を使用します。そういうやり方で、私はできます:

git admin push 

代わりの( "admin")SSHキーを使用してデフォルトのリモートにプッシュする。このエイリアスでは、 push だけでなく、どのコマンドも使用できます。 git admin clone ... を実行して、 "admin"キーを使ってアクセスできるリポジトリを複製することもできます。

Step 1: Create the alternative SSH keys, optionally set a passphrase in case you're doing this on someone else's machine.

Step 2: Create a script called “ssh-as.sh” that runs stuff that uses SSH, but uses a given SSH key rather than the default:

#!/bin/bash
exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "[email protected]"

Step 3: Create a script called “git-as.sh” that runs git commands using the given SSH key.

#!/bin/bash
SSH_KEYFILE=$1 GIT_SSH=${BASH_SOURCE%/*}/ssh-as.sh exec git "${@:2}"

Step 4: Add an alias (using something appropriate for “PATH_TO_SCRIPTS_DIR” below):

# Run git commands as the SSH identity provided by the keyfile ~/.ssh/admin
git config --global alias.admin \!"PATH_TO_SCRIPTS_DIR/git-as.sh ~/.ssh/admin"

More details at: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/

53
追加された
非常に良い答え。安全のために $ @ - > "$ @" の前後に二重引用符を付けることを忘れないでください。
追加された 著者 kevinarpe,
@sinelawこれはまだ動作しますか? Permissionが常にエラーを拒否する
追加された 著者 Alok Kumar,

git環境変数 GIT_SSH_COMMAND を利用できます。 gitリポジトリの下にある端末でこれを実行します:

GIT_SSH_COMMAND='ssh -i ~/.ssh/your_private_key' git submodule update --init

〜/ .ssh/your_private_key を、使用するssh秘密鍵のパスに置き換えます。そして、後のgitコマンド(この例では、 git submodule update -init )を git pullgit fetch

18
追加された
完全なドキュメントは git-scm.com/docs/git#git-codeGITSSHcode;それは最近の動詞(> = 2.3。*)を必要とします。
追加された 著者 Christian Ulbrich,
1つの環境変数を設定する以外は何も必要ない単純なソリューションをありがとう。
追加された 著者 Noah Sussman,

1つのUnixベースのシステム(Linux、BSD、Mac OS X)では、デフォルトのIDは $ HOME/.ssh というディレクトリに2つのファイルとして保存されます。 秘密鍵:$ HOME/.ssh/id_rsa 公開鍵:$ HOME/.ssh/id_rsa.pub -i オプションなしで ssh を使用すると、デフォルトの秘密鍵を使用してリモートシステムで認証されます。

If you have another private key you want to use, for example $HOME/.ssh/deploy_key, you have to use ssh -i ~/.ssh/deploy_key ...

It is annoying. You can add the following lines in to your $HOME/.bash_profile : ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa

したがって、 sshgitscp (基本的に ssh )を使用するたびに、オプション -i を使用してください。

$ HOME/.bash_profile というファイルに好きなだけ多くのキーを追加できます。

10
追加された

別の方法として、 ssh-identを使用してsshのアイデンティティを管理する方法があります。

現在の作業ディレクトリ、sshオプションなどに基づいて異なるキーを自動的に読み込んで使用します...つまり、sshと異なるキーとアイデンティティを使用して透過的に終わる仕事/ディレクトリとプライベート/ディレクトリを簡単に持つことができます。

10
追加された

私はWin7でGit Bashを使用しています。次は私のために働いた。

〜/ .ssh/configまたはc:/ users/[your_user_name] /。ssh/configに設定ファイルを作成します。ファイルに次のように入力します。

Host your_host.com
     IdentityFile [absolute_path_to_your_.ssh]\id_rsa

私はホストがあなたのホストのための "名前"かrefでなく、URLでなければならないと思います。例えば、

Host github.com
     IdentityFile c:/users/[user_name]/.ssh/id_rsa

パスは、/ c/users/[user_name]/....の形式で記述することもできます。

The solution provided by Giordano Scalzo is great too. https://stackoverflow.com/a/9149518/1738546

7
追加された

WindowsのGitのバージョンのsshを使用している場合、ssh configのIDファイルの行は次のようになります

IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice

where /c is for c:

確認するには、gitのbash do

cd ~/.ssh
pwd 
3
追加された

You might need to remove (or comment out) default Host configuration .ssh/config

2
追加された