Git depomu ssh üzerinden klonladım. Bu yüzden, kaynak master ile iterek veya çekerek her iletişim kurduğumda, şifremi tekrar girmeliyim. Git'i şifremi birden çok kez girmem gerekmeyecek şekilde nasıl yapılandırabilirim?
Git depomu ssh üzerinden klonladım. Bu yüzden, kaynak master ile iterek veya çekerek her iletişim kurduğumda, şifremi tekrar girmeliyim. Git'i şifremi birden çok kez girmem gerekmeyecek şekilde nasıl yapılandırabilirim?
Yanıtlar:
ssh-add
, ssh-agent
özel anahtarınızı çalıştırıyor ve tutmanız gerekiyor(Tamam, güncellenen soruya yanıt olarak, önce Jefromi'nin açıkladığıssh-keygen
gibi genel ve özel bir anahtar oluşturmak için çalışırsınız . Ortak anahtarı sunucuya koyarsınız. Bir ovanın eşdeğerine sahip değilseniz bir parola kullanmalısınız. -özel anahtarınızdaki metin şifresi.Ancak bunu yaptığınızda, aşağıda açıklandığı gibi pratik bir konuya ihtiyacınız vardır .)ssh-agent
Oturum açarken ssh-agent
arka planda çalışıyor olmak istiyorsunuz. Giriş yaptıktan sonra fikir, ssh-add
aracıya parolanızı vermek için anahtarınızı çözmek üzere bir kez ve yalnızca bir kez çalıştırmaktır . Ajan daha sonra anahtarın kilidi açık ve yüklü, her yerde ssh her zaman kullanıma hazır bellekte oturur.
Tüm ssh-family komutları 1 daha sonra aracıya danışacak ve otomatik olarak özel anahtarınızı kullanabilecektir.
OSX'te (err, macOS ), GNOME ve KDE sistemleri ssh-agent
genellikle sizin için otomatik olarak başlatılır. Benim gibi, bunun sizin için kesinlikle yapılmadığı bir Cygwin veya başka bir pencere ortamınız olması durumunda ayrıntıları inceleyeceğim.
Buradan başlayın: man ssh-agent
.
Aracıyı otomatik olarak çalıştırmanın çeşitli yolları vardır. Man sayfasının açıkladığı gibi, giriş oturumunuzun diğer işlemlerinin bir üst öğesi olacak şekilde çalıştırabilirsiniz. Bu şekilde, sağladığı ortam değişkenleri otomatik olarak tüm kabuklarınızda olacaktır. (Daha sonra) çağırdığınızda ssh-add
veya ssh
her ikisi de aracıya erişebileceğinden, hepsinde sihirli soket yol adlarına veya başka bir şeye sahip ortam değişkenleri vardır.
Alternatif olarak, aracıyı sıradan bir alt öğe olarak çalıştırabilir, ortam ayarlarını bir dosyaya kaydedebilir ve başladığında her kabukta bu dosyayı kaynaklayabilirsiniz.
OSX ve Ubuntu sistemlerim aracı başlatma kurulumunu otomatik olarak yapar, bu yüzden tek yapmam gereken bir ssh-add
kez çalıştırmaktır . Koşmaya çalışın ssh-add
ve işe yarayıp yaramadığını görün, eğer öyleyse, bunu her yeniden başlatmada bir kez yapmanız yeterlidir.
Cygwin sistemimin manuel olarak yapılması gerekiyordu, bu yüzden bunu benim için yaptım .profile
ve .bashrc
kaynağım var .profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
.agent
Dosya komut dosyası tarafından otomatik olarak oluşturulur; çevre değişkenleri tanımlarını ve ihracatını içerir. Yukarıdaki .agent dosyasını kaynak yapmaya çalışır ve sonra ps(1)
aracıya çalışır . Çalışmazsa, bir aracı başlatır ve yeni bir aracı dosyası oluşturur. Ayrıca sadece çalıştırabilirsiniz ssh-add
ve başarısız olursa bir ajan başlatın.
sudo
doğru pam uzantısı ile.
ssh-agent
eval `ssh-agent`
HTTPS protokolü kullandığım için GitHub ile benzer bir sorun yaşadım. Hangi protokolü kullandığınızı kontrol etmek için
git config -l
ve ile başlayan satıra bakın remote.origin.url
. Protokolünüzü değiştirmek için
git config remote.origin.url git@github.com:your_username/your_project.git
Permission denied
hatayla karşılaştım .
git remote set-url origin git@github.com:your_username/your_project.git
Bu git'i değil ssh'yi yapılandırmakla ilgilidir. Henüz yapmadıysanız, ssh-keygen
bir anahtar çifti oluşturmak için (boş bir parolayla) kullanmanız gerekir . Ardından, ortak anahtarı ile uzak hedefe kopyalayın ssh-copy-id
. Birden fazla anahtara ihtiyacınız yoksa (örn. Başka amaçlar için parolaya sahip daha güvenli bir anahtar) veya devam eden gerçekten garip çok kimlikli şeyleriniz yoksa, bu basit:
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
Düzenleme: Gerçekten sadece DigitalRoss'un cevabını okumalısınız, ancak: parolaları olan anahtarlar kullanıyorsanız ssh-add <key-file>
, bunları eklemek için kullanmanız gerekir ssh-agent
(ve ssh-agent
dağıtımınızın zaten bir tane yoksa bir tane açmanız gerekir).
ssh-agent
Her defasında parola girme sorusunu atlamak istediği için. Yanlış düşünmüyorum ama yanlış anlayan biri olmadıkça bu cevabı geliştirmeniz gerektiğini düşünüyorum ...
ssh-agent
. Sana +1!
ssh-*
anahtarı kullanmak için gereken parolayı çağıran - gerçekten uzaktan kumandadaki gerçek kullanıcı parolanızı kastettiğiniz yer bu?
HTTPS kullanarak klonladıysanız (önerilir) o zaman: -
git config --global credential.helper cache
ve sonra
git config --global credential.helper 'cache --timeout=2592000'
30 gün (veya size uygun olanı) önbelleğe almayı etkinleştirmek için zaman aşımı = 2592000 (saniyede 30 Gün).
Şimdi kullanıcı adınızı ve şifrenizi gerektiren basit bir git komutunu çalıştırın.
Kimlik bilgilerinizi bir kez girin ve şimdi önbellekleme 30 Gün boyunca etkinleştirildi.
Herhangi bir git komutuyla tekrar deneyin ve artık herhangi bir kimlik bilgisine ihtiyacınız yok.
Daha fazla bilgi için: - GitHub parolanızı Git'te önbelleğe alma
Not : Kimlik bilgisi yardımcısını kullanmak için Git 1.7.10 veya daha yenisine ihtiyacınız vardır. Sistem yeniden başlatıldığında şifreyi tekrar girmemiz gerekebilir.
Git-bash veya terminalde çalışan komutlar üzerinden dosyaları doğrudan düzenlemeyi tercih edenler için Muein'in düşüncelerini genişletmek.
Projenizin .git dizinine gidin (yerel makinenizdeki proje kökü) ve 'config' dosyasını açın. Ardından [uzak "başlangıç noktası" için arama yapın ve url yapılandırmasını aşağıdaki gibi ayarlayın:
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
Burada iki farklı şey olduğunu düşünüyorum. Birincisi, normal SSH kimlik doğrulamasının kullanıcının hesabın şifresini koymasını gerektirmesidir (burada hesap şifresinin sshd yapılandırmasına bağlı olarak farklı yöntemlere göre kimlik doğrulaması yapılacaktır).
Sertifikaları kullanarak bu şifreyi koymaktan kaçınabilirsiniz. Sertifikalarda hala bir parola girmeniz gerekir, ancak bu kez özel anahtarınızın parolasıdır (bu, hesabın parolasından bağımsızdır).
Bunu yapmak için steveth45 tarafından belirtilen talimatları takip edebilirsiniz:
Sertifikanın parolasını her seferinde koymaktan kaçınmak istiyorsanız, DigitalRoss tarafından işaret edildiği gibi ssh-agent'ı kullanabilirsiniz.
Bunu tam olarak Unix'e karşı Windows'a bağlıdır, ancak esas olarak oturum açtığınızda arka planda ssh-agent'ı çalıştırmanız gerekir ve daha sonra ilk kez giriş yaptığınızda, ajana parolanızı vermek için ssh-add komutunu çalıştırın. Tüm ssh-family komutları aracıya danışacak ve parolanızı otomatik olarak alacaktır.
Buradan başlayın: man ssh-agent.
Ssh-agent'ın tek sorunu, en azından * nix'de sertifika parolasını her yeni kabuğa koymanız gerektiğidir. Ve sonra sertifika "yüklenir" ve herhangi bir şifre koymadan ssh sunucusunda kimlik doğrulaması yapmak için kullanabilirsiniz. Ama bu o kabukta.
Anahtarlık ile ssh-agent ile aynı şeyi yapabilirsiniz, ancak "sistem çapında". Bilgisayarınızı açtıktan sonra bir kabuk açar ve sertifikanın şifresini koyarsınız. Ve sonra, diğer tüm kabuklar bu "yüklü" sertifikayı kullanır ve siz bilgisayarınızı yeniden başlatana kadar şifreniz bir daha sorulmaz.
Gnome, Gnome Keyring adında , ilk kez kullandığınızda sertifikanızın şifresini soran benzer bir uygulamaya sahiptir ve daha sonra güvenli bir şekilde saklar, böylece tekrar sorulmaz.
AddKeysToAgent yes
.ssh / config yazmanın bir yolu daha vardır . Daha sonra bilgisayarı
Eğer github kullanıyorsanız, daha açık bir şekilde açıklayan çok güzel bir öğreticileri var (en azından bana).
ssh-keygen -t rsa
Bir parola istendiğinde boş bırakın, yani enter tuşuna basın. kadar basit!!
Bunu ittiğiniz kutudan deneyin
ssh git@github.com
Daha sonra github'dan hoş bir yanıt almalısınız ve sonra itmek için iyi olacaksınız.
Hi gkucmierz! You've successfully authenticated, but GitHub does not provide shell access.
ama itmeye çalıştığımda bir şekilde git hala bana şifre sor
Ben giriş vie ssh anahtarına izin vermedi bir sunucudan git repo klonlamak zorunda kaldı ama sadece bir kullanıcı / şifre ile. Git Plugin'i basit bir kullanıcı / parola kombinasyonu kullanacak şekilde yapılandırmanın bir yolunu bulamadım.
ŞİFRENİZ JENKINS İŞİNİN YAPILANDIRILMASINDA VE GÜNLÜĞÜNDE TEMİZ METİN OLARAK GÖSTERİLDİĞİNDE BU SORUNU ÇÖZME İYİ BİR YOLU DEĞİLDİR! SADECE RSA-ANAHTAR DOĞRULAMA YA DA DİĞER YAPILANDIRMA OLANAKLARINI YAPILANDIRMAK YOKTUR!
rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
AddKeysToAgent yes
.Ssh / config dosyasının üstüne tek bir satır ekleyin . Tabii ssh-agent önceden çalışıyor olmalı. Çalışmıyorsa (kontrol edin prep ssh-agent
), sadece çalıştırıneval $(ssh-agent)
Şimdi, anahtar sistem çapında belleğe yüklenir ve parolayı tekrar yazmak zorunda kalmazsınız.
Çözümün kaynağı /ubuntu/362280/enter-ssh-passphrase-once/853578#853578
Ben Windows üzerinde ssh kullanıyorum çünkü ben de her zaman parola yazmaktan kaçınmak için çalışıyor. Yaptığım şey .profile dosyamı değiştirmekti, böylece parolamı belirli bir oturumda girdim. İşte kodun bir parçası:
SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
yani bu ile benim oturumda bir kez parolamı yazın ..
Tüm bu önerileri ve daha fazlasını denedim, sadece AWS örneğimden klonla gidebilirim. Hiçbir şey çalışmadı. Sonunda çaresizlikten dolandım: Yerel makinemde id_rsa.pub içeriğini kopyaladım ve AWS örneğimde ~ / .ssh / known_hosts'a ekledim.