Çoklu DVCS (Distributed revision control) Hesabı ile Git Kullanımı

Eğer birden fazla versiyon kontrol servisine üyeliğiniz varsa ya da bu servislerin birinde veya birkaçında, farklı hesaplarla geliştirme yapıyorsanız, bunların her biri için SSH key oluşturmanız gerekir. Aksi takdirde Git Client, varsayılan olarak “id_rsa“yi kullanmaya çalışacak ve e-posta adresiniz ve/veya SSH anahtarınız (key) bununla uyuşmayacağı için “Permission denied (public key)” hatası alacaksınız.

Hem GitHub, hem Bitbucket hem de yerel sunucuda kurulu Gitlab’da geliştirme yapmaya çalışınca bu durumla karşılaşmam kaçınılmaz oldu. Buna çözüm olarak iki farklı yöntem denedim. İki yöntemde de temel olarak her bir hesap için ayrı birer SSH anahtarı oluşturulması gerekiyor.

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

E-posta adresini kendi adresinizle değiştirip diğer adımları takip etmeniz yeterli. Tabii oluşturduğunuz SSH anahtarlarını ilgili servise (GitHub, Bitbucket v.s.) eklemeniz gerekiyor. Bununla ilgili olarak GitHub yardım sayfasını inceleyebilirsiniz.

Daha sonra aşağıdaki iki yöntemden birini tercih etmeniz gerekiyor.

1. Yöntem

~/.ssh/ klasörüne config isimli bir dosya oluşturup içine de aşağıdaki örnekteki gibi host ve public key tanımlamaları yapmalısınız.

# http://stackoverflow.com/a/17158985
# GitHub
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github_rsa

# Bitbucket
Host bitbucket.org
    HostName bitbucket.org
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/bitbucket_rsa

2. Yöntem

Bir diğer yöntem de Git Client’ın her açılışında SSH anahtarlarını bir SSH agent’a tanıtmak. Bunun için ~/.bashrc dosyası oluşturup içine aşağıdaki kodu eklemelisiniz. Burada dikkat etmeniz gereken nokta SSH anahtarlarının isimlerinin “_rsa” ile bittiğinden emin olmak.

.bashrc dosyasını oluşturmakta zorluk çekenler ana klasöre (~/) gelip bu komutu çalıştırarak dosyayı oluşturabilirler: touch .bashrc

#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/*_rsa

Git Client’ı her açtığınızda aşağıdakine benzer bir ekran göreceksiniz.
Agent identified SSH keys

Test

En sonunda, yapılan işlemin çalışıp çalışmadığını da bu şekilde test edebilirsiniz:

$ ssh -T [email protected]
Hi sevilyilmaz! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T [email protected]
logged in as sevilyilmaz.