Ş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_rsave id_rsa.pubanahtar bir çiftle kurulduğunu varsayalım . Şu an tree ~/.sshbö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 ~/.sshbaktığı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/configanahtar 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ı Hostkullanacak ş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/somerepozaten var ve ona eklendiniz - klonlama kadar kolay
$ git clone github.com-otheruser:someorg/somerepo.git
Yani kalın kısım gerekir maç Hostsenin ad biz kurulum ~/.ssh/configdosyası. Git'i karşılık gelene doğru bağlar IdentityFileve 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ç Hostbiz tanımlanan bu ~/.ssh/configdosyada
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.pubanahtar çiftinizi Host github.comSSH 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.comuzaktan 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/ pullkalbinizin 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ı 700ve 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 ~/.sshdizinim şöyle görünüyor: .pemBağlandığım her etki alanı için bir klasörde, her kullanıcı için bir anahtarım var . .pemAnahtarları 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/configdosya - 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_keysdosyanın
Senin dönüştürme id_rsa/ id_rsa.pubPEM 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-mainuserve 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.pemdosyanız var, eski github-mainuserve github-mainuser.pubdosyaları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.