Şekle girmek
Bir git repo'yu ayrı bir github / bitbucket / whatever hesabı altında yönetmek için yeni bir SSH anahtarı oluşturmanız yeterlidir.
Ancak ikinci kimliğinizle depoları itmeye / çekmeye başlamadan önce, sizi şekillendirmeliyiz - Sisteminizin tipik id_rsa
ve id_rsa.pub
anahtar bir çiftle kurulduğunu varsayalım . Şu an tree ~/.ssh
böyle görünüyorsun
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
İlk olarak, bu anahtar çiftini adlandırın - açıklayıcı bir ad eklemek , hangi kullanıcı / uzaktan kumanda için hangi anahtarın kullanıldığını hatırlamanıza yardımcı olacaktır.
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
Sonra, yeni bir anahtar çifti oluşturalım - burada yeni anahtarı adlandıracağımgithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Şimdi, tree ~/.ssh
baktığımızda görüyoruz
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
Ardından, ~/.ssh/config
anahtar yapılandırmalarımızı tanımlayacak bir dosya ayarlamamız gerekiyor . Bunu, doğru sahip-okuma / salt okunur izinleriyle oluşturacağız
$ (umask 077; touch ~/.ssh/config)
Bunu favori düzenleyicinizle açın ve aşağıdaki içerikleri ekleyin
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Muhtemelen, birincil github kimliğinizle ilişkili mevcut depolarınız olacaktır. Bu nedenle, "default" github.com anahtarınızı Host
kullanacak şekilde ayarlanmıştır mainuser
. Bir hesabı diğerine tercih etmek istemiyorsanız, güncellenmiş bir ssh yapılandırması kullanmak için sisteminizdeki mevcut depoları nasıl güncelleyeceğinizi göstereceğim .
Yeni SSH anahtarınızı github'a ekleyin
Yeni ortak anahtarınızı eklemek için github.com/settings/keys adresine gidin .
Ortak anahtar içeriğini aşağıdakileri kullanarak alabilirsiniz: github'a kopyala / yapıştır
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Artık yeni kullanıcı kimliğiniz ayarlandı - aşağıda nasıl kullanılacağını göstereceğiz.
İşleri yapma: bir repoyu klonlama
Peki bu git ve github ile çalışmak için nasıl bir araya geliyor? Olmadan bir tavuk ve yumurta alamayacağınız için, mevcut bir repoyu klonlamaya bakacağız. İşyeriniz için yeni bir github hesabınız varsa ve bir şirket projesine eklenmişseniz, bu durum sizin için geçerli olabilir.
Diyelim ki github.com/someorg/somerepo
zaten var ve ona eklendiniz - klonlama kadar kolay
$ git clone github.com-otheruser:someorg/somerepo.git
Yani kalın kısım gerekir maç Host
senin ad biz kurulum ~/.ssh/config
dosyası. Git'i karşılık gelene doğru bağlar IdentityFile
ve sizi github ile doğru bir şekilde doğrular
İşlerinizi yapma: yeni bir repo oluşturma
Olmadan bir tavuk ve yumurta alamayacağınız için, ikincil hesabınızda yeni bir repo yayınlamaya bakacağız. Bu durum , ikincil github hesaplarını kullanarak yeni içerik oluşturan kullanıcılar için geçerlidir .
Diyelim ki yerel olarak zaten küçük bir iş yaptınız ve şimdi github'a zorlamaya hazırsınız. İsterseniz benimle birlikte takip edebilirsiniz
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Şimdi bu repoyu kimliğinizi kullanacak şekilde yapılandırın
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Şimdi ilk taahhüdünü yap
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Git log'u kullanarak yeni kimliğinizin kullanıldığını görme taahhüdünü kontrol edin
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
Pekala, github'a gitme zamanı! Github yeni repo'mızı henüz bilmediğinden, ilk önce github.com/new adresine gidin ve yeni repo'nuzu oluşturun - somerepo olarak adlandırın
Şimdi, repo'nuzu doğru kimlik / kimlik bilgilerini kullanarak github ile "konuşacak" şekilde yapılandırmak için bir uzaktan kumanda ekledik. Yeni hesabınız için github kullanıcı adınızın someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Yani kalın kısım kesinlikle kritik olduğunu ve gereken maç Host
biz tanımlanan bu ~/.ssh/config
dosyada
Son olarak, repoyu itin
$ git push origin master
Yeni bir SSH yapılandırması kullanmak için mevcut bir depoyu güncelleme
Diyelim ki bazı kopyalarınız var, ancak şimdi yeni bir SSH yapılandırması kullanmak istiyorsunuz. Yukarıdaki örnekte, önceki id_rsa
/ id_rsa.pub
anahtar çiftinizi Host github.com
SSH yapılandırma dosyanıza atayarak mevcut depolarınızı incelerdik . Bu konuda yanlış bir şey yok, ama şimdi en az 5 github yapılandırması var ve bunlardan birini "varsayılan" yapılandırma olarak düşünmekten hoşlanmıyorum - her biri hakkında açık olmayı tercih ederim.
Bunu yapmadan önce
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Şimdi bunu buna güncelleyeceğiz ( kalın harflerle değişiklikler )
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Ancak bu, github.com
uzaktan kumandayla mevcut herhangi bir repo'nun artık bu kimlik dosyasıyla çalışmayacağı anlamına gelir . Ama endişelenme, basit bir düzeltme.
Mevcut SSP'yi yeni SSH yapılandırmanızı kullanacak şekilde güncellemek için, deponun git config dosyasını açın ve url'yi güncelleyin!
$ cd existingrepo
$ nano .git/config
Uzak kaynak alanını güncelleyin ( kalın yazılan değişiklikler )
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Bu kadar. Artık yapabilirsiniz push
/ pull
kalbinizin içeriğine
SSH anahtar dosyası izinleri
Ortak anahtarlarınızın düzgün çalışmamasıyla sorun yaşıyorsanız, SSH, dizininizde ve ilgili anahtar dosyalarınızda izin verilen dosya izinlerine oldukça katıdır~/.ssh
Genel bir kural olarak, herhangi bir dizin olmalı 700
ve herhangi bir dosya olmalıdır 600
- bu onların sahibi tarafından okunan / salt okunur oldukları anlamına gelir - başka hiçbir grup / kullanıcı bunları okuyamaz / yazamaz
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
SSH anahtarlarımı nasıl yönetirim
Bağlandığım her ana bilgisayar için ayrı SSH anahtarları yönetiyorum, böylece herhangi bir anahtarın güvenliği ihlal edilirse, o anahtarı kullandığım diğer her yerdeki anahtarları güncellemem gerekmez. Bu, Adobe'den 150 milyon kullanıcı bilgisinin çalındığı bildirimini aldığınızda olduğu gibidir - şimdi bu kredi kartını iptal etmeli ve ona bağlı olan her hizmeti güncellemelisiniz - ne sıkıntı.
İşte ~/.ssh
dizinim şöyle görünüyor: .pem
Bağlandığım her etki alanı için bir klasörde, her kullanıcı için bir anahtarım var . .pem
Anahtarları kullanmak için anahtar başına sadece bir dosyaya ihtiyacım var .
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
Ve işte benim karşılık gelen /.ssh/config
dosya - açıkçası github şeyler github hakkında bu soruyu cevaplamakla ilgilidir, ancak bu cevap size ssh kimliklerinizi herhangi bir sayıda hizmet / makinede yönetme bilgisiyle donatmayı amaçlamaktadır.
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
SSH genel anahtarınızı bir PEM anahtarından alma
Fark Üstü sadece sahip olduğu bir her anahtar için dosyayı. Bir ortak anahtar sağlamam gerektiğinde, sadece gerektiği gibi üretiyorum .
Github ssh ortak anahtarınızı istediğinde, ortak anahtarı stdout'a göndermek için bu komutu çalıştırın - gerektiğinde kopyala / yapıştır
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Bu, anahtarımı herhangi bir uzak makineye eklemek için kullandığım işlemle aynı işlem olduğunu unutmayın. ssh-rsa AAAA...
Değer Kumandanın kopyalanır ~/.ssh/authorized_keys
dosyanın
Senin dönüştürme id_rsa
/ id_rsa.pub
PEM formatına anahtar çiftlerini
Yani size anahtar dosyaları evcilleştirmek ve bazı dosya sistemi cruft kısmak istiyorsun? Anahtar çiftinizi tek bir PEM'e dönüştürmek kolaydır
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
Veya yukarıdaki örneklerimizle birlikte yeniden adlandırdık id_rsa -> github-mainuser
ve id_rsa.pub -> github-mainuser.pub
- yani
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Şimdi, bunu doğru şekilde dönüştürdüğümüzden emin olmak için, oluşturulan genel anahtarın eski genel anahtarınızla eşleştiğini doğrulamak isteyeceksiniz.
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
Artık github-mainuser.pem
dosyanız var, eski github-mainuser
ve github-mainuser.pub
dosyalarınızı güvenle silebilirsiniz - sadece PEM dosyası gereklidir; sadece ihtiyaç duyduğunuzda ortak anahtarı oluşturun ^ _ ^
Sıfırdan PEM anahtarları oluşturma
Özel / genel anahtar çiftini oluşturmanız ve ardından tek bir PEM anahtarına dönüştürmeniz gerekmez . PEM anahtarını doğrudan oluşturabilirsiniz.
Hadi bir newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
SSH genel anahtarını almak aynı
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> ssh-agent'a kullanım için eklemesini söyleyin.