450

次の使用例があります: git@git.company.com:gitolite-adminuser の秘密鍵を使用してプッシュできるようgitolite-adminにしたいのですがgit@git.company.com:some_repo、「自分の」秘密鍵を使用してプッシュしたいと考えています。私の知る限り、~/.ssh/configユーザー名とサーバー名はどちらの場合も同じであるため、を使用してこれを解決することはできません。私は主に自分の秘密鍵を使用するため、~/.ssh/configforで定義していgit@git.company.comます。単一のgit呼び出しに使用されるキーをオーバーライドする方法を知っている人はいますか?

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

4

17 に答える 17

737

ユーザーとホストが同じであっても、 では区別できます~/.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-aliceandを使用します。gitolite-as-bob

git remote add alice git@gitolite-as-alice:whatever.git
git remote add bob git@gitolite-as-bob:whatever.git

ノート

IdentitiesOnly yesデフォルト ID の使用を防止するオプションを含める必要があります。それ以外の場合、デフォルト名に一致する id ファイルもある場合は、他の構成オプション (「first in wins」に従う) とは異なり、IdentityFileオプションが試行する ID のリストに追加されるため、それらが最初に試行されます。参照: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807

于 2011-10-28T10:03:32.973 に答える
60

上記の Mark Longair によって提供されたものに代わるアプローチは、別の SSH キーを使用して、任意のリモートで任意のgit コマンドを実行するエイリアスを使用することです。アイデアは基本的に、git コマンドを実行するときに SSH ID を切り替えることです。

他の回答のホスト エイリアス アプローチに対する利点:

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

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

git admin push 

代替 (「admin」) SSH キーを使用してデフォルトのリモートにプッシュするには。繰り返しますがpush、このエイリアスを使用して任意のコマンド ( だけでなく) を使用できます。git admin clone ...「admin」キーを使用してのみアクセスできるリポジトリのクローンを作成することもできます。

ステップ 1:代替 SSH キーを作成します。他の人のマシンでこれを行う場合に備えて、必要に応じてパスフレーズを設定します。

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

#!/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/

于 2013-01-24T03:12:57.407 に答える
15

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

$HOME/.ssh/deploy_keyなど、使用したい別の秘密鍵がある場合は、使用する必要がありますssh -i ~/.ssh/deploy_key ...

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

sshしたがって、 orgitまたはscp(基本的には)を使用するたびsshに、オプションを使用する必要が-iなくなります。

ファイル$HOME/.bash_profileにキーをいくつでも追加できます。

于 2016-06-05T03:16:18.723 に答える