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-agentiç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-agentgibi 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-agentgibi GitLab en ile makalesinde eval $(ssh-agent -s)muhtemelen her zaman içinde yazarak o yorgun ediyoruz. Sonunda, .bashrcotomatik 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-agentGit 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-addanahtarların girmesini istemiyoruz . Bu komut dosyası sizin ~/.bashrcveya ( ~/.profileveya 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\Usernamecd ~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/configdosyayı 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-agentiş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 -tparametresi 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 .