Kimlik Doğrulama: SSH ve HTTPS
Giriş — Git Seni Nasıl Tanıyor?
Bir bankaya girdiğini düşün. Kasaya gidip "hesabımdaki parayı çekmek istiyorum" diyorsun. Banka ne yapacak? Önce seni tanıyacak. Kimliğini soracak, imzanı kontrol edecek, belki yüzünü tarayacak. Çünkü parayı herhangi birine veremez — gerçekten sen olduğundan emin olmalı.
Git ile uzak repository'lere erişmek de böyle çalışır. GitHub'a "şu repo'ya push etmek istiyorum" dediğinde, GitHub sana sorar: "Sen kimsin? Bunu yapmaya yetkin var mı?" İşte bu kimlik doğrulama (authentication) sürecidir.
Git'te uzak repository'lere bağlanmanın iki ana yolu var: HTTPS ve SSH. İkisi de işini görür ama çalışma prensipleri, güvenlik modelleri ve kullanım deneyimleri farklıdır. Bu derste her ikisini derinlemesine öğrenecek, SSH key oluşturup GitHub'a ekleyecek, birden fazla hesap yönetmeyi ve credential helper'ları kavrayacaksın.
🎬 Analoji: Otel Kapısı
İki farklı otel düşün:
HTTPS Oteli — Resepsiyonlu Giriş: Her geldiğinde resepsiyona git, kimliğini göster (kullanıcı adı + token), anahtarını al, odana gir. Her seferinde aynı prosedür. Kimliğini kaybedersen, yenisini al. Başka biri kimliğini bulursa — sorun!
SSH Oteli — Akıllı Kart Girişi: İlk geldiğinde özel bir akıllı kart-kilit çifti oluşturuyorsun. Kartı (private key) cüzdanında taşıyorsun, kilidi (public key) otel kapısına takıyorsun. Bundan sonra kapıya yaklaştığında kart otomatik tanır, kapı açılır. Şifre sormaz. Kartı kaybetmedikçe güvendesin.
HTTPS Oteli: SSH Oteli:
┌──────────────┐ ┌──────────────┐
│ Resepsiyon │ │ Kapı │
│ │ │ 🔒 │
│ "Kimliğiniz?"│ │ │
│ "Token'ınız?"│ │ Akıllı kart │
│ │ │ okuyucu │
└──────┬───────┘ └──────┬───────┘
│ │
Her seferinde Otomatik
token göster tanıma
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ Giriş │ │ Giriş │
│ ✅ │ │ ✅ │
└─────────┘ └─────────┘HTTPS ile Bağlantı
HTTPS Nasıl Çalışır?
HTTPS (Hypertext Transfer Protocol Secure) ile Git, web tarayıcınızın kullandığı aynı güvenli protokolü kullanır. Veriler şifrelenir, ama her işlemde kimliğini kanıtlaman gerekir.
# HTTPS URL formatı:
https://github.com/kullanici/repo.git
# Clone örneği:
$ git clone https://github.com/tolgahan/web-projem.git
# Remote kontrol:
$ git remote -v
origin https://github.com/tolgahan/web-projem.git (fetch)
origin https://github.com/tolgahan/web-projem.git (push)Token-Based Authentication
GitHub, Ağustos 2021'de HTTPS üzerinden şifre ile kimlik doğrulamayı kaldırdı. Artık şifre yerine Personal Access Token (PAT) kullanman gerekiyor.
ESKİ YOL (artık çalışmaz):
Username: tolgahan
Password: gizli_sifrem_123 ← ❌ GitHub bunu kabul etmiyor
YENİ YOL (PAT kullan):
Username: tolgahan
Password: ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← ✅ TokenPersonal Access Token Oluşturma
GitHub'da Token Oluşturma Adımları:
1. GitHub → Settings → Developer settings
2. Personal access tokens → Tokens (classic)
3. "Generate new token" → "Generate new token (classic)"
4. Not: "Git CLI access" (veya açıklayıcı bir isim)
5. Süre: 90 gün (veya ihtiyacına göre)
6. Scope'lar (izinler):
☑ repo → Repository erişimi (push/pull)
☑ workflow → GitHub Actions
☑ read:org → Organization bilgisi (gerekirse)
7. "Generate token" → Token'ı HEMEN kopyala!
⚠️ Token sadece bir kez gösterilir. Kapatınca bir daha göremezsin!# Token ile push:
$ git push origin main
Username for 'https://github.com': tolgahan
Password for 'https://tolgahan@github.com': ghp_ABC123... # Token'ı yapıştır
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 312 bytes | 312.00 KiB/s, done.💡 İpucu: GitHub ayrıca Fine-grained token sunuyor — belirli repo'lara kısıtlanabilen, granüler izinli, zorunlu expire süreli tokenlar. Yeni projelerde minimum yetki prensibi için bunu tercih et.
SSH ile Bağlantı
SSH Nasıl Çalışır?
SSH (Secure Shell), asimetrik şifreleme (public-key cryptography) kullanır. İki anahtar oluşturursun:
Private key (Özel anahtar): Bilgisayarında kalır. Kimseyle paylaşmazsın. Cüzdanındaki kimlik kartı gibi.
Public key (Açık anahtar): GitHub'a yüklersin. Kapıdaki kilit gibi — herkes görebilir ama açmak için private key gerekir.
SSH Kimlik Doğrulama Akışı:
Bilgisayarın GitHub
┌──────────┐ ┌──────────────┐
│ │ 1. Bağlantı iste │ │
│ Private │ ──────────────────► │ Public Key │
│ Key 🔑 │ │ deposu 🔐 │
│ │ 2. Challenge │ │
│ │ ◄────────────────── │ "Bu mesajı │
│ │ (rastgele veri) │ imzala" │
│ │ │ │
│ │ 3. İmzalı cevap │ │
│ │ ──────────────────► │ Public key │
│ │ │ ile doğrula │
│ │ │ │
│ │ 4. ✅ Erişim ver │ │
│ │ ◄────────────────── │ "Tamam, sen │
│ │ │ tolgahan'sın"│
└──────────┘ └──────────────┘Burada güzel olan şey: private key asla ağ üzerinden gitmez. Sadece imza gönderirsin. İmzayı çözüp doğrulamak için public key yeterli, ama sahte imza üretmek için private key lazım. Matematik bunu garanti eder.
SSH Key Oluşturma
# ED25519 algoritması ile SSH key oluştur (önerilen)
$ ssh-keygen -t ed25519 -C "tolgahan@email.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/tolgahan/.ssh/id_ed25519): # Enter
Enter passphrase (empty for no passphrase): # Güçlü bir şifre gir (önerilir)
Enter same passphrase again:
Your identification has been saved in /home/tolgahan/.ssh/id_ed25519
Your public key has been saved in /home/tolgahan/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:AbCdEf1234567890... tolgahan@email.com
The key's randomart image is:
+--[ED25519 256]--+
| .o+. |
| . =+o |
| . +.=.o |
| . o = =.. |
| o S . +. |
| . + . o o |
| o . . + . |
| o . + . |
| .. .E. |
+----[SHA256]-----+# Oluşan dosyalar:
$ ls -la ~/.ssh/
-rw------- 1 tolgahan 464 Mar 1 10:00 id_ed25519 # Private key (GİZLİ!)
-rw-r--r-- 1 tolgahan 104 Mar 1 10:00 id_ed25519.pub # Public key (paylaşılır)⚠️ Dikkat: Private key dosyasının izinleri
600(-rw-------) olmalı. Başka kullanıcılar okuyabiliyorsa SSH bağlantıyı reddeder.chmod 600 ~/.ssh/id_ed25519ile düzelt.
Neden ED25519?
Algoritma Karşılaştırması:
┌──────────────┬──────────────┬──────────┬───────────────────┐
│ Algoritma │ Anahtar Boyu │ Güvenlik │ Hız │
├──────────────┼──────────────┼──────────┼───────────────────┤
│ RSA (eski) │ 2048-4096 bit│ ✅ İyi │ 🐌 Yavaş │
│ ED25519 (yeni)│ 256 bit │ ✅ Çok iyi│ ⚡ Çok hızlı │
│ ECDSA │ 256-521 bit │ ✅ İyi │ ⚡ Hızlı │
└──────────────┴──────────────┴──────────┴───────────────────┘
ED25519: Daha kısa anahtar, daha güçlü güvenlik, daha hızlı doğrulama.
Modern standart — yeni key oluştururken bunu tercih et.# Eski sistemlerde ED25519 desteklenmiyorsa RSA kullan:
$ ssh-keygen -t rsa -b 4096 -C "tolgahan@email.com"SSH Key'i GitHub'a Ekleme
# 1. Public key'i kopyala
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBxyz... tolgahan@email.com
# macOS'ta panoya kopyala:
$ pbcopy < ~/.ssh/id_ed25519.pub
# Linux'ta panoya kopyala:
$ xclip -selection clipboard < ~/.ssh/id_ed25519.pub
# Windows'ta (Git Bash):
$ clip < ~/.ssh/id_ed25519.pubGitHub'da SSH Key Ekleme:
1. GitHub → Settings → SSH and GPG keys
2. "New SSH key"
3. Title: "MacBook Pro" (veya bilgisayarını tanımlayan bir isim)
4. Key type: Authentication Key
5. Key: (kopyaladığın public key'i yapıştır)
6. "Add SSH key"Bağlantıyı Test Etme
$ ssh -T git@github.com
The authenticity of host 'github.com (140.82.121.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi tolgahan! You've been successfully authenticated, but GitHub does not provide shell access."Hi tolgahan!" mesajını gördüysen — her şey çalışıyor! 🎉
SSH Agent — Passphrase'i Her Seferinde Girme
SSH key'e passphrase koyduğunda (ki koymalısın), her kullanımda passphrase sorar. SSH agent bunu hafızada tutar:
# SSH agent'ı başlat
$ eval "$(ssh-agent -s)"
Agent pid 12345
# Key'i agent'a ekle
$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/tolgahan/.ssh/id_ed25519: # Bir kez gir
Identity added: /home/tolgahan/.ssh/id_ed25519 (tolgahan@email.com)
# Artık passphrase sormaz!
$ git push origin main # Direkt çalışır# macOS'ta Keychain entegrasyonu (kalıcı):
$ ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# ~/.ssh/config dosyasına ekle:
Host github.com
AddKeysToAgent yes
UseKeychain yes # macOS only
IdentityFile ~/.ssh/id_ed25519SSH vs HTTPS: Hangisini Seçmeli?
┌────────────────────┬──────────────────────┬──────────────────────┐
│ Özellik │ HTTPS │ SSH │
├────────────────────┼──────────────────────┼──────────────────────┤
│ URL formatı │ https://github.com/ │ git@github.com: │
│ │ user/repo.git │ user/repo.git │
├────────────────────┼──────────────────────┼──────────────────────┤
│ Kimlik doğrulama │ Token (PAT) │ SSH key pair │
├────────────────────┼──────────────────────┼──────────────────────┤
│ İlk kurulum │ Kolay (token oluştur)│ Orta (key oluştur, │
│ │ │ GitHub'a ekle) │
├────────────────────┼──────────────────────┼──────────────────────┤
│ Günlük kullanım │ Credential helper │ SSH agent (otomatik) │
│ │ veya her seferinde │ │
│ │ token gir │ │
├────────────────────┼──────────────────────┼──────────────────────┤
│ Firewall │ Port 443 (her yerde │ Port 22 (bazı │
│ │ açık) │ firewall'lar kapar) │
├────────────────────┼──────────────────────┼──────────────────────┤
│ Güvenlik │ Token sızabilir │ Private key daha │
│ │ │ güvenli │
├────────────────────┼──────────────────────┼──────────────────────┤
│ Proxy/VPN │ Genelde çalışır │ Sorun çıkabilir │
├────────────────────┼──────────────────────┼──────────────────────┤
│ Önerilen durum │ Şirket ağı, CI/CD, │ Kişisel geliştirme, │
│ │ geçici erişim │ günlük kullanım │
└────────────────────┴──────────────────────┴──────────────────────┘Karar Ağacı
Şirket ağı / firewall arkasında mıyım?
├── Evet → HTTPS (port 443 her yerde açık)
└── Hayır
├── CI/CD pipeline mı?
│ ├── Evet → HTTPS + token (veya deploy key)
│ └── Hayır
│ ├── Günlük geliştirme mi?
│ │ └── SSH (en rahat deneyim)
│ └── Hızlıca clone edip bakmak mı?
│ └── HTTPS (kurulum gerektirmez)💡 İpucu: Birçok geliştirici her ikisini de kullanır. Kendi projelerinde SSH, iş projelerinde HTTPS. Remote URL'i istediğin zaman değiştirebilirsin:
# HTTPS'ten SSH'a geç:
$ git remote set-url origin git@github.com:tolgahan/repo.git
# SSH'tan HTTPS'e geç:
$ git remote set-url origin https://github.com/tolgahan/repo.git
# Kontrol et:
$ git remote -vSSH Over HTTPS Port (Firewall Çözümü)
Port 22 kapalıysa, GitHub SSH'ı HTTPS portu (443) üzerinden de destekler:
# ~/.ssh/config dosyasına ekle:
Host github.com
Hostname ssh.github.com
Port 443
User git
# Test et:
$ ssh -T git@github.com
Hi tolgahan! You've been successfully authenticated...Bu, kurumsal ağlarda SSH kullanmak isteyenler için hayat kurtarıcı bir püf noktasıdır.
Credential Helper — HTTPS Şifre Yönetimi
HTTPS kullanıyorsan her push/pull'da token girmek yorucu. Credential helper token'ı güvenli bir yere kaydeder.
İşletim Sistemine Göre Ayarlama
# macOS — Keychain kullan (en güvenli):
$ git config --global credential.helper osxkeychain
# Windows — Windows Credential Manager:
$ git config --global credential.helper manager
# Linux — libsecret (GNOME Keyring):
$ git config --global credential.helper /usr/lib/git-core/git-credential-libsecret
# Linux (basit) — Hafızada tut (varsayılan 15 dakika):
$ git config --global credential.helper cache
# Süreyi uzat (1 saat = 3600 saniye):
$ git config --global credential.helper 'cache --timeout=3600'
# Linux (güvensiz!) — Düz metin dosyaya kaydet:
$ git config --global credential.helper store
# ⚠️ Token ~/.git-credentials dosyasına AÇIK METİN olarak yazılır!
# Sadece güvendiğin kişisel bilgisayarlarda kullan.Credential Helper Akışı
İlk push (token gir):
$ git push origin main
Username: tolgahan
Password: ghp_xxxx...
→ Credential helper token'ı kaydeder
Sonraki push'lar:
$ git push origin main
→ Credential helper otomatik token sağlar
→ Şifre sormaz! ✅Kayıtlı Credential'ları Yönetme
# macOS — Keychain Access uygulamasından sil
# veya terminalde:
$ git credential-osxkeychain erase
host=github.com
protocol=https
# (boş satır ile Enter)
# Windows — Credential Manager'dan sil:
# Control Panel → Credential Manager → Windows Credentials
# → github.com girdisini bul ve sil
# Linux (cache) — Önbelleği temizle:
$ git credential-cache exit
# Linux (store) — Dosyadan sil:
$ rm ~/.git-credentialsBirden Fazla GitHub Hesabı Yönetme
Hem kişisel hem de iş GitHub hesabın varsa, her ikisine de ayrı ayrı erişmen gerekir. Bu, Git'in en sık karşılaşılan yapılandırma sorunlarından biridir.
SSH ile Çoklu Hesap (Önerilen Yol)
Her hesap için ayrı SSH key oluştur:
# 1. Kişisel hesap için key
$ ssh-keygen -t ed25519 -C "tolgahan@gmail.com" -f ~/.ssh/id_ed25519_personal
# → ~/.ssh/id_ed25519_personal (private)
# → ~/.ssh/id_ed25519_personal.pub (public)
# 2. İş hesabı için key
$ ssh-keygen -t ed25519 -C "tolgahan@sirket.com" -f ~/.ssh/id_ed25519_work
# → ~/.ssh/id_ed25519_work (private)
# → ~/.ssh/id_ed25519_work.pub (public)# 3. SSH config dosyasını düzenle
$ cat ~/.ssh/config
# Kişisel GitHub hesabı
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# İş GitHub hesabı
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes# 4. Her key'in public kısmını ilgili GitHub hesabına ekle:
# id_ed25519_personal.pub → Kişisel GitHub hesabı → Settings → SSH Keys
# id_ed25519_work.pub → İş GitHub hesabı → Settings → SSH Keys# 5. Clone yaparken host alias'ını kullan:
# Kişisel proje:
$ git clone git@github-personal:tolgahan/kisisel-proje.git
# İş projesi:
$ git clone git@github-work:sirket/is-projesi.git# 6. Mevcut repo'nun remote'unu değiştir:
$ cd ~/projects/is-projesi
$ git remote set-url origin git@github-work:sirket/is-projesi.git
# Test et:
$ ssh -T git@github-personal
Hi tolgahan! You've been successfully authenticated...
$ ssh -T git@github-work
Hi tolgahan-work! You've been successfully authenticated...Git Config ile Kullanıcı Ayrımı
SSH key'leri ayırdın ama commit'lerdeki isim ve e-posta da doğru olmalı:
# Global config (kişisel — varsayılan):
$ git config --global user.name "Tolgahan"
$ git config --global user.email "tolgahan@gmail.com"
# İş repo'sunda yerel config:
$ cd ~/projects/is-projesi
$ git config user.name "Tolgahan (Şirket)"
$ git config user.email "tolgahan@sirket.com"Conditional Include ile Otomatik Config
Daha şık bir yöntem: Klasör bazlı otomatik yapılandırma.
# ~/.gitconfig (global)
[user]
name = Tolgahan
email = tolgahan@gmail.com
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
# ~/.gitconfig-work
[user]
name = Tolgahan (Şirket)
email = tolgahan@sirket.comSonuç:
~/projects/kisisel-proje/ → tolgahan@gmail.com
~/work/is-projesi/ → tolgahan@sirket.com
Otomatik! Her seferinde git config yapmana gerek yok.# Doğrulamak için:
$ cd ~/work/is-projesi
$ git config user.email
tolgahan@sirket.com ✅
$ cd ~/projects/kisisel-proje
$ git config user.email
tolgahan@gmail.com ✅⚠️ Dikkat:
includeIfsatırındaki klasör yolunun sonunda/olması zorunludur."gitdir:~/work/"doğru,"gitdir:~/work"çalışmaz.
HTTPS ile Çoklu Hesap
HTTPS ile çoklu hesap SSH kadar temiz değildir ama mümkündür:
# Yöntem 1: URL'de kullanıcı adı ile ayır
$ git clone https://tolgahan@github.com/tolgahan/proje.git # Kişisel
$ git clone https://tolgahan-work@github.com/sirket/proje.git # İş
# Yöntem 2: Her repo için ayrı credential sakla
$ git config --global credential.useHttpPath true
# Yöntem 3: Git Credential Manager (en gelişmiş)
$ git config --global credential.helper manager💡 İpucu: Çoklu hesap yönetiminde SSH yöntemi açık ara en temiz ve sorunsuz çözümdür.
Deploy Keys — Repo Bazlı SSH Erişimi
Kişisel SSH key'in tüm repo'larına erişim verir. Bazen sadece belirli bir repo'ya erişim vermek istersin — mesela CI/CD sunucusu veya bir otomasyon aracı için.
Deploy key, tek bir repo'ya sınırlı erişim sağlayan SSH key'dir:
# 1. Deploy key oluştur
$ ssh-keygen -t ed25519 -C "deploy@my-project" -f ~/.ssh/deploy_my_project
# 2. Public key'i GitHub'da repo'ya ekle:
# Repo → Settings → Deploy keys → Add deploy key
# Title: "CI Server"
# Key: (public key yapıştır)
# ☑ Allow write access (push gerekiyorsa)
# 3. SSH config'de tanımla:
Host github-deploy-myproject
HostName github.com
User git
IdentityFile ~/.ssh/deploy_my_project
IdentitiesOnly yesDeploy Key vs Personal SSH Key:
┌─────────────────┬───────────────────┬─────────────────────┐
│ │ Personal SSH Key │ Deploy Key │
├─────────────────┼───────────────────┼─────────────────────┤
│ Erişim kapsamı │ Tüm repo'lar │ Tek bir repo │
│ Kullanım │ Kişisel geliştirme│ CI/CD, sunucular │
│ Güvenlik │ Sızarsa hepsi │ Sızarsa sadece o repo│
│ Write erişimi │ Her zaman │ İsteğe bağlı │
│ Birden fazla │ Bir hesapta bir │ Her repo'ya ayrı │
│ repo │ key yeterli │ key gerekir │
└─────────────────┴───────────────────┴─────────────────────┘GitHub CLI (gh) ile Kimlik Doğrulama
GitHub'un resmi CLI aracı (gh) kimlik doğrulamayı çok kolaylaştırır:
# GitHub CLI'ı kur:
# macOS:
$ brew install gh
# Linux:
$ sudo apt install gh
# Windows:
$ winget install GitHub.cli# Giriş yap (interaktif):
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? SSH
? Upload your SSH public key to your GitHub account? Yes
? Title for your SSH key: MacBook Pro
? How would you like to authenticate GitHub CLI? Login with a web browser
! First copy your one-time code: ABCD-1234
Press Enter to open github.com in your browser...
✓ Authentication complete.
- gh config set -h github.com git_protocol ssh
✓ Configured git protocol
✓ Uploaded the SSH key to your GitHub account
✓ Logged in as tolgahan# Auth durumunu kontrol et:
$ gh auth status
github.com
✓ Logged in to github.com account tolgahan (keyring)
- Active account: true
- Git operations protocol: ssh
- Token: ghp_************************************
- Token scopes: 'gist', 'read:org', 'repo', 'workflow'# Token'ı yenile:
$ gh auth refresh
# Çıkış yap:
$ gh auth logout💡 İpucu:
gh auth loginhem SSH key'i GitHub'a yükler hem de credential helper'ı ayarlar. Tek komutla her şey hazır! Yeni bilgisayar kurulumunda en hızlı yol budur.
Commit İmzalama (Kısa Özet)
git config ile herkes, herhangi birinin adını ve e-postasını commit'e yazabilir. Commit signing ile commit'in gerçekten senden geldiğini kriptografik olarak kanıtlarsın.
# SSH key ile imzalamayı etkinleştir (Git 2.34+)
$ git config --global gpg.format ssh
$ git config --global user.signingkey ~/.ssh/id_ed25519.pub
$ git config --global commit.gpgsign true
# GitHub'da SSH key'i Signing Key olarak da ekle:
# Settings → SSH and GPG keys → New SSH key → Key type: Signing Key
# Artık her commit "Verified" badge'i taşır ✅💡 İpucu: GPG ile de imzalama yapılabilir ama SSH key zaten varsa ek kurulum gerektirmez. Modern projeler SSH imzalamayı tercih ediyor.
Yaygın Sorunlar ve Çözümleri
Sorun 1: "Permission denied (publickey)"
$ git push origin main
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.Çözüm:
# 1. SSH agent çalışıyor mu?
$ ssh-add -l
# "The agent has no identities." → Key eklenmemiş
# 2. Key'i agent'a ekle:
$ ssh-add ~/.ssh/id_ed25519
# 3. Doğru key GitHub'a eklenmiş mi test et:
$ ssh -T git@github.com
# 4. Remote URL SSH mi kontrol et:
$ git remote -v
# https:// ise SSH'a çevir:
$ git remote set-url origin git@github.com:user/repo.gitSorun 2: "remote: Repository not found"
# Yanlış hesapla kimlik doğrulaması yapıyor olabilirsin
# Credential helper'daki eski token'ı temizle ve tekrar dene:
$ git credential-osxkeychain erase # macOS
host=github.com
protocol=httpsSorun 3: SSH Bağlantı Zaman Aşımı (Firewall)
$ ssh -T git@github.com
ssh: connect to host github.com port 22: Connection timed out
# Çözüm: Port 443 üzerinden SSH kullan (~/ssh/config'e ekle):
Host github.com
Hostname ssh.github.com
Port 443
User gitGüvenlik En İyi Pratikleri
🔒 SSH GÜVENLİK KURALLARI:
─────────────────────────────
1. Private key'e HER ZAMAN passphrase koy
→ Bilgisayarın çalınırsa, key korumasız kalır
2. Her cihaz için AYRI key oluştur
→ Bir cihaz tehlikeye girerse, sadece o key'i iptal et
3. Private key'i ASLA paylaşma, e-posta ile gönderme,
cloud'a yükleme. Cihazdan çıkmamalı
4. Kullanmadığın key'leri GitHub'dan SİL
→ Settings → SSH Keys → ilgili key'i Delete
5. Key dosya izinlerini kontrol et
→ chmod 600 ~/.ssh/id_*
→ chmod 644 ~/.ssh/id_*.pub
→ chmod 700 ~/.ssh/
🔒 TOKEN GÜVENLİK KURALLARI:
─────────────────────────────
1. Token'ı koda ASLA gömme (hard-code)
→ .env dosyası veya secret manager kullan
2. Minimum yetki (scope) ver
→ Sadece ihtiyacın olan izinleri seç
3. Expire süresi koy
→ Sonsuz token oluşturma, max 90 gün
4. Token sızdıysa HEMEN iptal et
→ GitHub → Settings → Personal access tokens → Delete
5. .gitignore'a hassas dosyaları ekle
→ .env, *.pem, *.key, credentialsPratik Senaryo: Sıfırdan SSH Kurulumu
Yeni bir bilgisayar aldın. Git ve SSH'ı sıfırdan kuralım:
# 1. Git kur ve yapılandır
$ git --version # Kurulu mu kontrol et
$ git config --global user.name "Tolgahan"
$ git config --global user.email "tolgahan@email.com"
# 2. SSH key oluştur
$ ssh-keygen -t ed25519 -C "tolgahan@email.com"
# Passphrase gir (güçlü bir şifre)
# 3. SSH agent'ı başlat ve key ekle
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_ed25519
# 4. Public key'i kopyala
$ cat ~/.ssh/id_ed25519.pub
# (çıktıyı kopyala)
# 5. GitHub'a ekle
# GitHub → Settings → SSH and GPG keys → New SSH key
# Authentication Key olarak ekle
# Signing Key olarak da ekle (commit imzalama için)
# 6. Bağlantıyı test et
$ ssh -T git@github.com
# "Hi tolgahan!" → Başarılı!
# 7. (İsteğe bağlı) Commit imzalamayı etkinleştir
$ git config --global gpg.format ssh
$ git config --global user.signingkey ~/.ssh/id_ed25519.pub
$ git config --global commit.gpgsign true
# 8. SSH config dosyasını ayarla (kalıcı agent)
$ cat >> ~/.ssh/config << 'EOF'
Host github.com
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
EOF
# 9. Artık kullanıma hazırsın!
$ git clone git@github.com:tolgahan/ilk-projem.git
$ cd ilk-projem
$ echo "Merhaba!" >> README.md
$ git add . && git commit -m "docs: İlk commit"
$ git push origin main # Şifresiz, otomatik! ✅Özet
HTTPS token (PAT) tabanlı kimlik doğrulama kullanır — kurulumu kolay, her yerde çalışır ama token yönetimi gerektirir
SSH public-private key çifti kullanır — ilk kurulum biraz daha uzun ama sonrası tamamen otomatik ve daha güvenli
ED25519 modern SSH key algoritmasıdır — daha kısa anahtar, daha güçlü güvenlik; yeni key oluştururken bunu tercih et
Credential helper (osxkeychain, manager, cache) HTTPS token'larını güvenli saklayarak her seferinde şifre girmeyi önler
Birden fazla GitHub hesabı için SSH config'de host alias'ları tanımla —
github-personalvegithub-workgibi;includeIfile klasör bazlı otomatik e-posta ayarı yapCommit imzalama (SSH veya GPG) ile commit'lerin gerçekten senden geldiğini kriptografik olarak kanıtlarsın — GitHub'da "Verified" badge'i görünür
*Bir sonraki bölümde GitHub'ın temellerini öğreneceğiz: Repository oluşturma, README yazma ve Pull Request açma!*
AI Asistan
Sorularını yanıtlamaya hazır