私は次のようなユースケースを持っています。私自身の秘密鍵を使って[email protected]:gitolite-admin
にプッシュしたいのに対し、私はユーザーgitolite-admin
の秘密鍵を使って[email protected]:some_repo
にプッシュできるようにしたいと思います。私の知る限りでは、ユーザー名とサーバー名がどちらの場合も同じなので、~/.ssh/config
を使用してこれを解決することはできません。私は主に自分の秘密鍵を使用しているので、それを~/.ssh/config
のために[email protected]
で定義しています。 1回のgit
呼び出しに使用されるキーをオーバーライドする方法を知っている人はいますか?
(別に:gitoliteはキーに基づいて誰がプッシュを行っているかを区別します。そのため、アクセス、所有権、監査の観点から、user @ serverの文字列が異なるユーザーに対して同一であることは問題になりません。)
ユーザーとホストが同じでも、~/.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-alice
とgitolite-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
Mark Longair によって上記で提供されているもの)に対する代替アプローチは、代替SSHキーを使用して any gitコマンド、on any remoteを実行するエイリアスを使用することです。 gitコマンドを実行するときにSSH IDを切り替えます。
他の答えのホスト別名アプローチと比較した利点:
remote
を明示的に指定できなくても、 any gitコマンドやエイリアスで動作します。私はいくつかの小さなスクリプトと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"
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 pull
、git fetch
などの他のコマンドに変更できます。
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
ですから、ssh
やgit
やscp
(基本的にはssh
も)を使う度に、オプション-i
を使う必要はもうありません。
ファイルには、好きなだけキーを追加できます$ HOME/.bash_profile。
もう1つの方法は ssh-identを使ってあなたのsshアイデンティティを管理することです 。
現在の作業ディレクトリ、sshオプションなどに基づいて、自動的に異なるキーをロードして使用します。つまり、work /ディレクトリとprivate /ディレクトリを簡単に作成して、異なるキーとIDをsshで使用することができます。
私は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
WindowsでGitのバージョンのsshを使用している場合、ssh設定の識別ファイル行は次のようになります。
IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice
ここで/c
はc:
のためのものです
確認するには、git's bashで行います
cd ~/.ssh
pwd
ファイル設定キー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
を試してください。