web-gelistirme-sc.com

liman dağıtma github: nasıl bir tek makine için birden fazla depoya yetki vermekim

Öyleyse, bir Host cihazım var, bunu robolarak adlandırın. Ben ss-keygen'i robüzerinde kullandım, ortak bir anahtar elde etmek için kullandım, github'a, depo cheechiçin yeni bir dağıtım anahtarı ekranı eklemek için verdim. Şimdi chong'yi robname__' de dağıtacağım. Ancak eğer github'da chongdeposu için yeni konuşlandırma anahtar ekranına gidip, robüzerinde oluşturduğum ortak anahtarın içine yapıştırırsam key already in use diyor. Anahtarları kullanımdaysa, chong'i robklonlayabileceğimi düşündüm ama bu izin reddedildi diyor.

Açıkçası bu düşündüğümden daha karmaşık ve birden fazla tuşa sahip olmaktan başka bir şey yapmıyor. chongname __ 'a robklonlamak için ne yapmalıyım?

Yardımın için teşekkürler.

35
user1552512

Bir anahtar bir dağıtım anahtarı olarak bir depoya eklendikten sonra, başka bir depoda Kullanılamaz. Dağıtım tuşlarını ayarlarken bu hatayı yaşıyorsanız, uzaktan kumandanızı değiştirmeniz ve var olmayan bir github kullanmak için ~/.ssh/config dosyanızı ayarlamanız gerekir. .com hostname, ssh, deponuz için doğru ssh konuşlandırma anahtarını seçmek için kullanabilecek.

# first we remove the Origin
$ git remote -v
Origin  [email protected]:username/foo.git (fetch)
Origin  [email protected]:username/foo.git (Push)
$ git remote rm Origin

# here we add a new Origin using a Host nickname called
# foo.github.com that we will reference with a Host stanza in our
# ~/.ssh/config to specify which key to use with which fake hostname.
$ git remote add Origin [email protected]:username/foo.git
$ git remote -v
Origin  [email protected]:username/foo.git (fetch)
Origin  [email protected]:username/foo.git (Push)

Deponuz için dağıtım anahtarını oluşturun ve Makul bir şekilde adlandırın:

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa-foo -C https://github.com/username/foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa-foo.
Your public key has been saved in /home/username/.ssh/id_rsa-foo.pub.
The key fingerprint is:
c0:ff:ee:34:24:11:5e:6d:7c:4c:b1:a0:de:ad:be:ef https://github.com/username/foo
The key's randomart image is:
+--[ RSA 2048]----+
|  E   o..o.oo.   |
| M o o o .+CoW   |
|  + o = o. ..    |
| .   . +         |
|        S        |
|       o .       |
|        +        |
|       . o       |
|        ..o.     |
+-----------------+

konuşlandırma anahtarını ekledikten sonra , ~/.ssh/config dosyanıza şu stanza eklemeniz gerekir:

Host fake-hostname-foo.github.com
    Hostname github.com
    IdentityFile ~/.ssh/id_rsa-foo

Şimdi şununla test edebilirsiniz:

$ ssh -T [email protected]
Hi username! You've successfully authenticated, but GitHub
does not provide Shell access.
62
aculich

Bulduğum en basit çözüm ana hatlarıyla belirtildi here .

1) Bu komutu girin (Bunu istediğiniz sayıda tuş için yapacaksınız):

ssh-keygen -t rsa -C "[email protected]"

2) Aşağıdaki ifadeyle benzersiz bir ad yazın (yani foo1_rsa). İstendiğinde, dosya mevcut dizininizde oluşturulur ve düzenli olmak istiyorsanız, dosyayı .ssh konumuna taşımanız gerekebilir:

Anahtarın kaydedileceği dosyayı girin (/Users/you/.ssh/id_rsa): [Enter tuşuna basın]

3) SSH yapılandırma dosyanızı güncelleyin:

vi ~/.ssh/config

Hangisi boş olabilir:

Host cheech github.com
Hostname github.com
IdentityFile ~/.ssh/foo1_rsa

Host chong github.com
Hostname github.com
IdentityFile ~/.ssh/foo2_rsa
11
Naruto Sempai

Github için bir konuşlandırma anahtarı benzersiz ... Diğer depo için yeni bir anahtar oluşturmanız gerekiyor. Sadece tekrar ssh-keygen çalıştırın

Bunun için github belgelerine bakın: https://help.github.com/articles/managing-deploy-keys

3
klaustopher

GitHub hesabınızdaki tüm özel havuzlara rob erişimi vermekte rahatsanız, anahtarı cheech öğesinden bir dağıtım anahtarı olarak kaldırabilir ve ardından GitHub hesabınıza bir SSH anahtarı olarak ekleyebilirsiniz. Bu, rob öğesinin hem cheech hem de chong erişimini sağlar. 

Hesabınızda rob 'nin erişmesini istemediğiniz başka havuzlar varsa, bu işe yaramaz.

Daha hassas kontrollere ihtiyacınız varsa, rob üzerinde ek anahtarlar oluşturmanız ve bunları belirli depolara dağıtım anahtarları olarak atamanız gerekir.

2
Nathan

Bunun 5 yaşından büyük olduğunu biliyorum, ancak bu popüler sorunun cevabını kabul edilmiş bir cevap yok; bu yüzden temizlik ve gelecekteki okunabilirliği göz önünde bulundurarak en iyi yolu düşündüğüm şey: 


EKİBİNİZE DEPLOY KULLANICI EKLE

Adım 1: Kuruluşunuzun etki alanında yeni bir konuşlandırma kullanıcısı için yeni bir e-posta adresi oluşturun. [email protected] gibi bir şey.

Adım 2: Yeni bir GitHub hesabı oluşturmak için bu posta kutusunu kullanın ( GitHub bu "makine kullanıcılarını" çağırır ), ona deploy-ExampleOrganisation gibi bir kullanıcı adı verir, böylece rolü açıktır.

Adım 3: Sunucunuzda "deploy" adlı bir komut kullanarak aşağıdaki gibi bir komut oluşturun:

useradd -d /home/deploy -m deploy

Parola yok ve dosya konumu olarak /home/deploy/.ssh/id_rsa belirterek deploy @ servername için bir SSH anahtarı oluşturun:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Yeni deploy-ExampleOrganisation GitHub hesabınıza bir SSH anahtarı olarak /home/deploy/.ssh/id_rsa.pub içeriğini ekleyin: Ayarlar> SSH ve GPG tuşları> Yeni SSH Anahtarı.

Adım 4: Kuruluşunuzda "Salt okunur kullanıcıları dağıtın" adlı bir ekip oluşturun, yeni kullanıcınızı ekibe ekleyin ve ekibe dağıtılacak tüm depolara ekibe Oku erişimi verin. (Bir kuruluş hesabınız yoksa, yine de bu kullanıcıya birden fazla özel depoya erişebilirsiniz)

Adım 5: Kullanıcının yetkili anahtar dosyasını (/home/deploy/.ssh/authorized_keys) konuşlandırmak için kendi kişisel makinenizin SSH anahtarını ekleyin, böylece siz (veya konuşlandırma komut dosyanız) konuşlandırma olarak giriş yapabilirsiniz kodu dağıtırken.

Boom! İşte bu ... Artık temiz ve kendini belgeleyen bir akışınız var. 


P.S. Aculich'in yüksek oy kullanma oranlı cevabını denedim, ancak sahte Host isimleriyle uğraşmaktan kirli hissettim ve sanırım, eğer bir kaç yıl içinde buna geri dönersem, tüm anahtarları nasıl yaratacağımı kolayca nasıl yapacağımı çözeceğim. Bu SSH yapılandırma dosyası bu komik olmayan uzak adresleri çalışmasını sağlar? Muhtemelen değil!

Bir konuşmacı kullanıcısının sahte Ana Bilgisayar adları yöntemine göre avantajları:

  • Kesmek yok! Gerçek kullanıcı adları ile repolara erişen, net isimleri olan standart kullanıcı hesaplarıdır.
  • Etrafında yüzen daha az tuş. 
  • / Ek sunuculara geçtiğinizde, Deploy kullanıcısına hepsinde bir hesap vermek kolaydır ve GitHub hesabına yalnızca 1 yeni anahtar ekleyerek, yeni sunucudaki hesabı kod dağıtmaya hazırdır.
  • Dağıtıcı kullanıcısı yalnızca düşük ayrıcalığa sahiptir Yalnızca ekipte listelenen depolara Salt Okunur erişimi vardır ve kişisel SSH anahtarlarınız sunucudan uzak tutulur, böylece kötü bir kişi sunucunuza erişim kazanırsa tüm depolarınıza zarar veremezler yanı sıra. 
  • Dağıtım aracı yapılandırma dosyaları (örneğin Capistrano) kafa karıştırıcı sahte Ana Bilgisayar adları içeren kirlenmez. (Sunucunun ötesine yayılmaya başladıklarında, bu yöntemden gerçekten rahatsız oldum.) 
  • Bunu yıllar içinde nasıl yaptığınızı unutursanız, dosya sahipliği sizi dosya kullanıcısı ls -la kurulumuna yönlendirir, SSH anahtarı GitHub hesap adı ssh -T [email protected] 'ya yönlendirir ve umarım tekrar tam hızlanırsınız. 
  • Ve son olarak ... GitHub tarafından önerilen yöntem. 
2
Martin Joiner

Birden fazla GitHub dağıtım anahtarını yönetmek, benim küçük npm modülüm github-add-key ile kolaylaştırılabilir. this great answer içinde açıklanan yaklaşımı kullanır ve ihtiyacınız olan tek şey

$ github-add-key rob/chong

yerel klonlanmış rob/chong içinde ve basit otomatik işlemi takip edin.

1
Vassiliy Pimkin

Burada iyi ya da kolay bir cevap görmedim, bu yüzden çözümümü atacağımı düşündüm. Etki alanı adını değiştirmeniz, sarmalayıcı komut dosyaları kullanmanız, anahtarlıklarla uğraşmanız veya .ssh config dosyalarıyla uğraşmanız gereken yanıtları sevmiyorum. SSH, sadece git için aktarma aracıdır, bu yüzden önemli ssh klasörlerimi doldurmak istemiyorum ve bir keresinde umursamadığım ve repo başına yalnızca bir tane alacağı birden fazla dağıtım anahtarı kullanmak için hack ve ayarlarla yapılandırmak istemiyorum. Bu bir git config olmalı - ve öyle.

Buna ek olarak neden repoların .git klasöründeki kimlik bilgilerini saklamıyorsunuz, böylece repos klasörünü silerseniz konuşlandırma anahtarını silersiniz?

Varsayalım/tmp/deploy_key, özel konuşlandırma anahtarınızın ilk (geçici) konumu.

# Initial clone of repo    
GIT_SSH_COMMAND="ssh -i /tmp/deploy_key" git clone [email protected]:folder/reponame.git

# cd to the folder to assure we only change config for the repo instead of user/global.
cd reponame
# Could probably just mv instead of cp/chmod/rm the key but lets be precise
cp /tmp/deploy_key ./.git/deploy_key
chmod 600 ./.git/deploy_key
rm /tmp/deploy_key

# This is the magic - note the backslash escaping the $ as PWD is always the repo's
# folder when pulling or pushing etc... and at git (run) command time $PWD is the
# repo's root folder.
git config core.sshCommand "ssh -i \$PWD/.git/deploy_key"

Ayrıca elbette anahtarı başka bir yerde saklayabilir ve dağıtım anahtarı için $ PWD'siz mutlak bir yol kullanabilirsiniz: -

# Initial clone of repo    
GIT_SSH_COMMAND="ssh -i /path/to/a/deploy_key" git clone [email protected]:folder/reponame.git
# cd to repo to configure only for this repo
cd reponame
git config core.sshCommand "ssh -i /path/to/a/deploy_key"

Ancak, bunu repoların dahili .git klasörlerinde tutmayı tercih ederim, böylece repo klasörünü silersem etrafta takılacak hiçbir kimlik bilgisi olmadığını biliyorum ve sonuçta her bir dağıtım anahtarı için yalnızca bir repo alabileceğinizden eminim.

0
Jimmy

Ayrıca bir ssh sarmalayıcı oluşturabilir ve GIT_SSH olarak geçirebilirsiniz. Bu seçenek git uzaktan kumandasını değiştirmek zorunda kalmamanız gibi bir avantaja sahiptir. https://stackoverflow.com/a/14221028/3461

0
Benjamin Atkin

Pimkin'in fikri harika olsa da, bunun için node yüklemek istemedim, bu yüzden bash'da benzer bir şey yarattım:

https://Gist.github.com/blvz/8eeebacae11011c25fc79eff12f49ae9

Kur ve kullan:

curl https://Gist.githubusercontent.com/blvz/8eeebacae11011c25fc79eff12f49ae9/raw/6f2f7f3709a0fe852d8a3a5bb125325e3ffbc7d8/gh-deploy-clone.sh > /usr/local/bin/gh-deploy-clone
chmod +x /usr/local/bin/gh-deploy-clone

gh-deploy-clone user/repo

# You can also give it a name, in case
# you have multiple deploy targets:

gh-deploy-clone user/repo staging
0
blvz