Github’a SSH’la Şifre Girmeden Erişmek
Özetle Komutlar
# SSH iletişiminde kullanılacak anahtarları yaratmak için
$ ssh-keygen
# SSH isteklerinde anahtarlara erişmek için agent'ı çalıştırmak
$ eval ($ssh-agent)# Agent tarafından yönetilecek anahtarlara bir yenisini eklemek
$ ssh-add anahtarınAdı# Agent tarafından yönetilen tüm anahtarları listeler
$ ssh-add -l
Hızlı Çözümler > Hata Giderme
Could not open a connection to your authentication agent.
Agent çalışmıyordu! $ eval ($ssh-agent)
ile başlattık ve şimdi sıra key eklemekte. $ ssh-add anahtarınAdı
ssh id@host : Permission denied (publickey).
Uzak sunucuya bağlanmak için arka planda anahtar alış verişi yapılıyor ve ancak sunucu tarafında bir karşılığı olmayınca bu hata alınıyor. Eğer kullanıcı adıyla doğrulama yapmak isterseniz aşağıdaki ayarlarda olduğu gibi (/etc/ssh/sshd_config
) dosyasında PasswordAuthentication
anahtarına yes
değeri atamamız gerekir. Aksi halde public anahtarı sunucu tarafında authorized_keys
dosyasında kayıtlı olmayan istemciler giriş yapamaz.
Eğer sunucu tarafında ayar yes
diye yapılandırılmışsa bu kez istemciyi password ile girişe zorlamak için:
$ ssh -o PreferredAuthentications=password \
-o PubkeyAuthentication=no example.com
İndirilecekler
- Putty ve içinde gelen
- Git For Windows
Kurulacaklar
Git for Windows
Putty
Buradan indireceğiniz putty ile birlikte ihtiyacımız olan şu uygulamalar gelecek
- puttygen.exe
- plink.exe
- pageant.exe
Önce Temel Bilgiler
Windows’a girerken kullandığınız kullanıcıya ait dizin ve dosyalarını sakladığınız dizin yoluna %USERPROFILE% ile ulaşabilirsiniz.
Windows Tuşu + R
harfiyle çalıştır ekranını açalım ve %UserProfile%
yazarak kullanıcının dizinine (linux üstünde $HOME
ile) erişelim.
Windowsta pagent.exe
uygulaması (lünüxte sshagent
;) key bilgisini tutan ve gerektiğinde sunan bir uygulamadır ve sürekli çalışması gerekir. Sürekli çalışsın diye startup dizinine (%UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
) uygulamanın kısayolunu ekleyelim.
SSH Anahtarlarını Saklayacağımız Dizini Ayarlayalım
Anahtarları saklayacağımız dizin kullanıcı profilinin altındaki .ssh
dizini olacak (yoksa yaratın lütfen).
%UserProfile%\.ssh
PuTTYgen
Anahtları oluşturmak için PuTTYgen uygulamasını çalıştıralım
Generate düğmesine basalım ve biraz zaman alacak olan anahtar üretme aşamalarını yaşayalım
- Herkese gönderilebilecek public (açık, umumi, halka açık) anahtarın private anahtarıyla arasında sadece bizim bildiğimiz bir şifre (passphrase) atayalım
- ve
.ssh
dizinine public (açık) anahtarı kaydedelim (Save public key) - ve Save private key düğmesiyle private (gizli) anahtarı kaydedelim
pagent
Anahatarların sürekli kullanılabilmesi için pagent uygulamasını kullanıyoruz. Anahtarları pagent uygulamasına veriyor ve isteyene kullanılması için sürekli çalışır hale getiriyoruz.
Tabi pagent.exe
nin çalışıyor olması gerekiyor:
Şimdi oluşturduğumuz SSH anahtarlarını (açık ve gizli -public, private-) putty’nin agent uygulamasına verelim. Kaydettiğimiz bu anahtarları pagent.exe
uygulamasına ekleyeceğiz
Ve görelim ekleyebilmiş miyiz?
plink.exe
Ortam değişkenlerine GIT_SSH
diye bir anahtar tanımlamalıyız ki bu anahtara erişen uygulama plink.exe’yi çalıştırabilsin. Yani GIT_SSH
anahtarına plink.exe
’nin dosya yolunu vereceğiz.
Github Ayarları
Okları takip et ve yeni anahtarı oluştur
New SSH key düğmesine bastıktan sonra şu şekilde bilgileri gir ve ekle
Bilgisayarda Son Rötuşlar
Git’e isim ve eposta adresimizle bilgilerimizi tanımlayalım
$ git config --global user.name "Cem Topkaya"
$ git config --global user.email cem.topkaya@hotmail.com
plink.exe ile anahtarlarımız Github üstünde çalışıyor mu diye kontrol edelim
$ plink.exe -v git@github.com
Docker Konteyner Üstünde SSH Anahatarları
Benim Jenkins slave olarak kullandığım konteynerin bitbucket reposuyla bağlantısını ssh anahtarları üstünden halletmem gerekti.
SSH Kurulumu
Linux üstünde ssh kurulu değilse aşağıdaki komutlarla yükleriz yüklüyse doğrudan anahtar ayarlarına geçebiliriz.
$ apt-get update
$ apt-get -y install git
Eğer docker yansısı hazırlıyorsak yansının üstünde ssh kurulumu için Dockerfile
şöyle olmalı:
FROM ubuntuRUN apt-get update && \
apt-get -y install git && \
eval `ssh-agent -s` && \
mkdir ~/.ssh \
echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config &&
SSH Anahtar Ayarları
Konteynerin konsoluna bağlanıp, makina üstünde yüklü olan ssh-keygen komutu çalıştırıyoruz.
# ssh-keygen
- Bize anahtarın adı olmazsa
/root/.ssh/
dizini içindeid_rsa
adıyla bir gizli anahtar yaratacağını söyler - Örnek olsun deyyu bir anahtar yaratalım adıda “
yeni_anahtar
” olsun
- Sadece yeni oluşturduğumuz anahtarı görmek için
| grep ‘anahtar’
diyoruz ve dizindeki dosyalarıls
ile listeliyoruz:
.pub
uzantılı dosya açık (public) anahtarımız ve diğeri gizli (private) anahtarımız oluyor.- Oluşturduğumuz anahtarı
ssh-agent
ile istenildiğinde erişilebilir hale getirmek içinssh-add
ile anahtarı ekleyeceğiz. Dikkat etmemiz gereken ssh-agent’ın çalıştığından emin olmak!
- ssh-agent bir Process ID almışsa “çalışıyor” demektir.
Bunun içineval $(ssh-agent)
komutunu kullanacağız
- Artık ssh-add ile anahtarımızı ekleyebiliriz
SSH Anahtarı ayarları bittiğine göre tekrar Jenkins-Bitbucket ayarlarına dönebiliriz.
SSH Ayarlarıı görmek için /etc/ssh/ssh_config
dosyasına bakabiliriz:
# cat /etc/ssh/ssh_config# This is the ssh client system-wide configuration file. See
# ssh_config(5) for more information. This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.# Configuration data is parsed as follows:
# 1. command line options
# 2. user-specific file
# 3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.# Site-wide defaults for some commonly used options. For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.Host *
# ForwardAgent no
# ForwardX11 no
# ForwardX11Trusted yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
# Port 22
# Protocol 2
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
Jenkins-Bitbucket Ayarları
Sırasıyla gizli, açık anahtarlar oluşunca
- açık anahtarı bitbucket adresine tanımlayacak,
- Bitbucket kullanıcı adıyla Jenkins üstünde gizli anahtarı, bir credential tanımladıktan sonra
- yeni Jenkins görevinde bitbucket repo adresini yarattığınız credential ile ayarlayıp kullanabiliriz
Tekrar Tekrar Şifre Sormasın Diye
Önce ssh-agent çalışsın diye $ eval ‘ssh-agent -s’
komutunu çalıştırırız.
Ardından yarattığımız ssh anahtarlarını ssh-add
komutuyla ekleyebiliriz. -k
Anahtarını sadece “anahtarları yükleyip, sertifikaları yüklememek” için kullanacağız.
ssh-agent
Tarafından yönetilen anahtarları listelemek için ssh-add -l
komutu çalıştırdığımızda:
Referanslar: