web-dev-qa-db-ja.com

特定のドメインのgit Push用のSSHキーを指定します

私は次のようなユースケースを持っています。私自身の秘密鍵を使って[email protected]:gitolite-adminにプッシュしたいのに対し、私はユーザーgitolite-adminの秘密鍵を使って[email protected]:some_repoにプッシュできるようにしたいと思います。私の知る限りでは、ユーザー名とサーバー名がどちらの場合も同じなので、~/.ssh/configを使用してこれを解決することはできません。私は主に自分の秘密鍵を使用しているので、それを~/.ssh/configのために[email protected]で定義しています。 1回のgit呼び出しに使用されるキーをオーバーライドする方法を知っている人はいますか?

(別に:gitoliteはキーに基づいて誰がプッシュを行っているかを区別します。そのため、アクセス、所有権、監査の観点から、user @ serverの文字列が異なるユーザーに対して同一であることは問題になりません。)

314
Confusion

ユーザーとホストが同じでも、~/.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 git@gitolite-as-alice:whatever.git
git remote add bob git@gitolite-as-bob:whatever.git

注意

デフォルトのIDを使用しないようにするには、オプションIdentitiesOnly yesを含めます。そうでなければ、デフォルトの名前と一致するidファイルもある場合、それらが最初に試行されます。他の設定オプション( "first in wins"に従う)とは異なり、IdentityFileオプションがリストにを追加する試みるアイデンティティの。参照してください: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807

551
Mark Longair

Mark Longair によって上記で提供されているもの)に対する代替アプローチは、代替SSHキーを使用して any gitコマンド、on any remoteを実行するエイリアスを使用することです。 gitコマンドを実行するときにSSH IDを切り替えます。

他の答えのホスト別名アプローチと比較した利点:

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

私はいくつかの小さなスクリプトとgitエイリアスadminを使います。そうすれば、たとえば、次のようにできます。

git admin Push 

代替( "admin")SSHキーを使用してデフォルトのリモートにプッシュする。繰り返しになりますが、このエイリアスでは(Pushだけでなく)任意のコマンドを使用できます。自分の "admin"キーを使用しなければアクセスできないリポジトリをクローンするためにgit admin clone ...を実行することもできます。

ステップ1:代替SSH鍵を作成します。他のユーザーのマシンでこれを実行している場合は、オプションでパスフレーズを設定します。

ステップ2:SSHを使用し、デフォルトではなく特定のSSHキーを使用するものを実行する「ssh-as.sh」というスクリプトを作成します。

#!/bin/bash
exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "$@"

ステップ3:与えられたSSHキーを使ってgitコマンドを実行する“ git-as.sh”というスクリプトを作成します。

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

ステップ4:エイリアスを追加します(以下の「PATH_TO_SCRIPTS_DIR」に適したものを使用します)。

# 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"

詳細については: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/

54
sinelaw

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などの他のコマンドに変更できます。

36
Hustlion

UNIXベースのシステム(Linux、BSD、Mac OS X)では、デフォルトのIDは2つのファイルでディレクトリ$ HOME/.sshに保存されます。 private key: $HOME/.ssh/id_rsa public key: $HOME/.ssh/id_rsa.pubオプション-iを指定せずにsshを使用すると、リモートシステムでの認証にデフォルトの秘密鍵が使用されます。

別の秘密鍵を使用したい場合、例えば$ HOME/.ssh/deploy_keyssh -i ~/.ssh/deploy_key ...を使わなければなりません

迷惑です。次の行を$ HOME/.bash_profileに追加できます。ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa

ですから、sshgitscp(基本的にはsshも)を使う度に、オプション-iを使う必要はもうありません。

ファイルには、好きなだけキーを追加できます$ HOME/.bash_profile

12

もう1つの方法は ssh-identを使ってあなたのsshアイデンティティを管理することです

現在の作業ディレクトリ、sshオプションなどに基づいて、自動的に異なるキーをロードして使用します。つまり、work /ディレクトリとprivate /ディレクトリを簡単に作成して、異なるキーとIDをsshで使用することができます。

10
rabexc

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

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

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

私は、ホストはURLでなければならず、単に「名前」やあなたのホストの参照ではないと思います。例えば、

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

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

Giordano Scalzoが提供する解決策も素晴らしいです。 https://stackoverflow.com/a/9149518/1738546

9
user1738546

デフォルトのホスト設定を削除(またはコメントアウト)する必要があるかもしれません .ssh/config

3
ViliusK

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

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

ここで/cc:のためのものです

確認するには、git's bashで行います

cd ~/.ssh
pwd 
3
Andrew Murphy

ファイル設定キーsshで最も指定したもの:

# Default GitHub user
Host one
 HostName gitlab.com
 User git
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/key-one
 IdentitiesOnly yes

#two user
Host two
 HostName gitlab.com
 User git
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/key-two
 IdentitiesOnly yes

Git 2.10以降では、gitconfig sshCommand設定を使うことも可能です。 ドキュメントの状態

この変数が設定されていると、git fetchとgit Pushは、リモートシステムに接続する必要があるときに、sshの代わりに指定されたコマンドを使用します。このコマンドはGIT_SSH_COMMAND環境変数と同じ形式であり、環境変数が設定されているとオーバーライドされます。

使用例は次のようになります。git config core.sshCommand "ssh -i ~/.ssh/[insert_your_keyname]

場合によっては、ssh_configがコマンドをオーバーライドするためにこれが機能しないことがあります。この場合は、ssh_configを使用しないようにssh -i ~/.ssh/[insert_your_keyname] -F /dev/nullを試してください。

1
firfin