Belirli bir alan için git push için bir SSH anahtarı belirtin

Aşağıdaki kullanım durumum var: gitolite-admin özel anahtarını kullanarak [email protected]: gitolite-admin adresine basabilmek istiyorum iken, "kendi" özel anahtarımı kullanarak [email protected]: some_repo adresine geçmek istiyorum. AFAIK, ~/.ssh/config kullanarak bunu çözemiyorum çünkü her iki durumda da kullanıcı adı ve sunucu adı aynıdır. Daha çok kendi özel anahtarımı kullandığım için, [email protected] için ~/.ssh/config olarak tanımladım. Tek bir git çağrısı için kullanılan anahtarı geçersiz kılmanın bir yolu var mı?

(Bir kenara: Gitolit, anahtarı temel alan itici güçleri ayırt eder, bu yüzden erişim, sahip olma ve denetleme açısından sorun değil, kullanıcı @ sunucu dizesi farklı kullanıcılar için aynıdır.)

279

8 cevap

Kullanıcı ve ana bilgisayar aynı olsa bile, yine de ~/.ssh/config içinde ayırt edilebilirler. Örneğin, yapılandırmanız şunun gibi görünüyorsa:

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

Ardından, URL'nizdeki ana makine adı yerine gitolite-as-alice ve gitolite-as-bob komutlarını kullanın:

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

Not

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
katma
Git Bash ile pencereleri kullanıyorum. Kimlik dosyası satırı için şunu yazarım: IdentityFile ~ davey/.ssh/id_rsa.davey veya IdentityFile c: \ Users \ davey \ .ssh \ id_rsa.davey ?
katma yazar David West, kaynak
HostAdı'nı unknown_hosts öğesine eklemeyi unutmayın: stackoverflow.com/questions/13363553/…
katma yazar rottenoats, kaynak
ssh-add ~/.ssh/identity (Linux, Mac) kullanarak anahtarınızı ssh 'e eklediğinizden emin olun, aksi halde kullanılmaz. IdentifyFile'da belirtilmiştir.
katma yazar Tim, kaynak
Harika, teşekkürler. ~/.Ssh/config dosyasındaki Host belirtimi için bir 'takma ad' seçebileceğinizi anlamamıştım.
katma yazar Confusion, kaynak
Uzaktan kumandanın git @ kısmı, yapının Kullanıcı satırında verildiğinden gerekli değildir.
katma yazar dolmen, kaynak
Böyle bir yapılandırmayı kolayca eklemek için github-keygen 'i kullanabilirsiniz. Github hesapları.
katma yazar dolmen, kaynak
harika bir çözüm! Çağlar için bir çözüm arıyordum.
katma yazar didando8a, kaynak
Açık ve çok yardımcı bir cevap için çok teşekkür ederim. Bir süredir çalışmayı denedim ve aynı kullanıcının aynı id_rsa özel anahtar dosyasını kullanması gerektiği varsayımından vazgeçtim.
katma yazar DrCord, kaynak
Ana bilgisayar için IdentityFile satırından hemen sonra IdentitiesOnly yes içeren başka bir satır ekleyene kadar bu çözümle uğraşıyordum. Birden fazla kimlikten geçiyormuş gibi görünüyor ve bunlardan biri ana bilgisayara erişmekten engellendi.
katma yazar Fitter Man, kaynak
Bu cevap için de teşekkürler! Benim için bir tuhaflık, IdentityFile'ın tam bir yol olması gerektiğiydi (sadece id_rsa.rick'i IdentityFile argümanım olarak koymuştum ve bu başarısız oldu). IdentityFile için diğer sözdizimi için ssh_config (5) man sayfasına bakın.
katma yazar rickumali, kaynak
Ssh komutları çalışırken sürekli olarak depo erişimi reddedildi hatası git komutlarıyla aldım. IdentitiesOnly yes satırı eklemek sorunu çözdü.
katma yazar Justin Lau, kaynak
cazibe gibi çalış.
katma yazar Gaurav, kaynak

Mark Longair tarafından sunulan bir alternatif yaklaşım, herhangi bir git komutunu, herhangi bir uzaktan, alternatif SSH anahtarı ile. Fikir, git komutlarını çalıştırırken temel olarak SSH kimliğinizi değiştirmek içindir.

Diğer cevapta host alias yaklaşımına göre avantajlar:

  • Uzaktan açık bir şekilde belirtilemiyor olsanız bile herhangi bir git komutuyla veya diğer adlarla çalışacaktır.
  • Çok sayıda depo ile çalışmanın daha kolay olması, çünkü her istemci bilgisayarında depo başına bir kez değil, yalnızca istemci makinesinde bir kez ayarlamanız gerekir.

Birkaç küçük komut dosyası ve bir admin Git takma adları kullanıyorum. Bu şekilde yapabileceğim, örneğin:

git admin push 

Alternatif ("admin") SSH anahtarını kullanarak varsayılan uzaktan kumandaya geçmek için. Yine, bu takma adla herhangi bir komutu (sadece push ) kullanabilirsiniz. Hatta "admin" anahtarınızı kullanarak erişebileceğiniz bir depoyu klonlamak için admin clone ... komutunu da yapabilirsiniz.

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
katma
Çok güzel cevap. Güvende olmak için $ @ -> "$ @" civarında çift tırnak eklemeyi unutmayın.
katma yazar kevinarpe, kaynak
@sinelaw Bu hala çalışıyor mu? Her zaman İzin reddedildi hatası alıyorum
katma yazar Alok Kumar, kaynak

Git ortam değişkeni GIT_SSH_COMMAND 'i kullanabilirsiniz. Bunu git deposunuzdaki terminalinizde çalıştırın:

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

~/.ssh/your_private_key 'i kullanmak istediğiniz ssh özel anahtarının yolu ile değiştirin. Ve sonraki Git git git gibi git gibi altmodule update --init

18
katma
Tam doküman git-scm.com/docs/git#git-codeGITSSHcode; bununla birlikte son zamanlarda Git (> = 2.3. *) gerekir.
katma yazar Christian Ulbrich, kaynak
Bir ortam değişkeni ayarlamak dışında bir şey gerektirmeyen basit bir çözüm için teşekkür ederiz.
katma yazar Noah Sussman, kaynak

Bir Unix tabanlı sistem (Linux, BSD, Mac OS X), varsayılan kimlik 2 dosyada $ HOME/.ssh dizininde saklanır: özel anahtar: $ HOME/.ssh/id_rsa genel anahtar: $ HOME/.ssh/id_rsa.pub -i seçeneği olmayan ssh kullandığınızda, uzak sistemle kimlik doğrulaması yapmak için varsayılan özel anahtarı kullanır.

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

Yani ssh veya git veya scp (temelde ssh ) kullandığınızda her zaman artık -i seçeneğini kullanın.

$ HOME/.bash_profile dosyasında istediğiniz kadar anahtar ekleyebilirsiniz.

10
katma

Diğer bir alternatif de, ssh kimliğinizi yönetmek için ssh-kimliğini kullanmaktır .

Geçerli çalışma dizininize, ssh seçeneklerine ve benzerlerine göre farklı anahtarları otomatik olarak yükler ve kullanır. Bu sayede, ssh ile farklı anahtarlar ve kimlikler kullanarak şeffaf bir şekilde sona eren bir iş/dizin ve özel/dizine sahip olabilirsiniz.

10
katma

Win7'de Git Bash kullanıyorum. Aşağıdaki benim için çalıştı.

~/.Ssh/config veya c:/users/[your_user_name] /. Ssh/config adresinde bir yapılandırma dosyası oluşturun. Dosyaya girin:

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

Ev sahibi için bir "isim" veya ref değil, bir URL olmak zorunda sanırım. Örneğin,

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

Yol ayrıca/c/users/[user_name]/.... biçiminde yazılabilir.

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

7
katma

Git'in ssh sürümlerini Windows'ta kullanıyorsanız, ssh yapılandırmasındaki kimlik dosyası satırı

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

where /c is for c:

Gitmek için, git bash do

cd ~/.ssh
pwd 
3
katma

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

2
katma