TortoiseGit veya PuTTY kullanmadan yalnızca saf bir Git Bash çözümü kullanmak istediğinizi varsayalım . Ayrıca, parola öbeklerinizi kalıcı olarak saklamak istemezsiniz, çünkü SSH anahtarınızı parola olmadan ilk başta oluşturmuş gibi neredeyse aynıdır. Ama yine de biraz önbellek kullanmak istiyorsunuz.
Önbellek amaçları ssh-agent
için Git Bash dağıtımına dahil olan işlem kullanılır. Bu işlem varsayılan olarak başlatılmaz, bu yüzden önce başlatılması gerekir. SSH anahtarlarının önbelleğe alınabilmesi için, bu işlemessh-add
sizden bir anahtarın parolasını girmenizi ve hafızaya komutla .
Diğer çözümlerin dezavantajları:
- GitHub'ın makalesinde olduğu
ssh-agent
gibi otomatik başlatma, Git Bash'i başlattığınızda en başından bu sefer SSH anahtarınızı kullanmanız gerekip gerekmediğine bakılmaksızın bir parola ister. Bugün yerel repo ile çalışıyorsanız, muhtemelen sadece gerçekten gerekli olduğunda (örneğin, uzak bir repo ile etkileşimde bulunurken) bir parola sağlamak isteyeceksiniz.
- Eğer Lansmanınız Eğer
ssh-agent
gibi GitLab en ile makalesinde eval $(ssh-agent -s)
muhtemelen her zaman içinde yazarak o yorgun ediyoruz. Sonunda, .bashrc
otomatik olarak başlatmak için bu iki satırı yapılandırmanıza eklediniz . Dezavantajları, yukarıdaki artı bir ekstra ile aynıdır: Her yeni Git Bash terminalini her başlattığınızda ekstra bir ssh-agent işlemi alırsınız (GitHub'ın bash betiği, bu işlemin başlayıp başlamadığını kontrol eder).
- Yukarıdaki ikisi gibi ama özellikle farklı ana bilgisayarlar için ayrı SSH anahtarlarınız varsa, örneğin biri GitHub için diğeri GitLab için, bu yüzden hepsini bir kerede sağlamak can sıkıcı ve rahatsız edici.
Bu çözüm, Git Bash'in her Windows oturumu için yalnızca bir kez ve gerçekten gerekli olduğunda nasıl bir parola istemesini merak edenler içindir. GnuPG kaydedilmesini ile passphrases yönetiminin davranışını andıran otomatik imzalama kullanılarak default-cache-ttl
.
SSH'yi yalnızca Git Bash kullanarak gerektiğinde bir kez parola isteyecek şekilde yapılandırma
İlk olarak, ssh-agent
Git Bash kabuğunu başlatırken otomatik olarak başlatmak istiyoruz . İşlemin başlayıp başlamadığını kontrol ettiği için değiştirilmiş bir GitHub komut dosyası kullanacağız , ancak hemen ssh-add
anahtarların girmesini istemiyoruz . Bu komut dosyası sizin ~/.bashrc
veya ( ~/.profile
veya Kullanıcınızın ana dizininin - run ve sonra Git Bash'ın yazdırması için olduğu gibi) adresine gider :
~/.bash_profile
~
C:\Users\Username
cd ~
pwd
### Start ssh-agent
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env") # use -t here for timeout
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
fi
unset env
Şimdi bir ~/.ssh/config
dosyayı düzenleyin veya oluşturun ve AddKeysToAgent
önbelleğe almanın etkinleştirilmesini istediğiniz her ana bilgisayar stanza için bir seçenek ekleyin (ayrıca tüm ana bilgisayar bildirimlerinden önce yönerge dosyanın başına yerleştirilerek genel olarak da açabilirsiniz):
# GitHub.com
Host github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_ed25519_github
AddKeysToAgent yes
# GitLab.com
Host gitlab.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_ed25519_gitlab
AddKeysToAgent yes
Ssh config man sayfasından : Bu seçenek yes olarak ayarlanırsa ve bir dosyadan bir anahtar yüklenirse, anahtar ve parolası, ssh-add (1) gibi varsayılan yaşam süresine sahip aracıya eklenir.
Varsayılan maksimum kullanım ömrü sonsuza kadar veya ssh-agent
işlem öldürülünceye kadar (görev yöneticisinden el ile veya bilgisayarınız kapatıldığında). Sonlu bir zaman aşımı kullanmak istiyorsanız, ssh-agent -t
parametresi ile ayarlayabilirsiniz . Bash komut dosyasındaki satırı yukarıdaki ilk adımdan değiştirin, örneğin 30 dakikalık anahtar önbellek ömrü boyunca:
(umask 077; ssh-agent -t 30m >| "$env")
Diğer saat biçimi niteleyicileri için buraya bakın .