Kimlik doğrulama aracınızla bağlantı açılamadı


1605

Bu hatayla karşılaşıyorum:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

Anahtarları eklemeye çalıştım ve aşağıda bu hatayı alıyorum:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
Soru: Bu sayfadaki HER yanıttan geçtiğinizde ve hiçbiri çalışmadığında. Sonra ne yapabilirsiniz?
Brandon Bertelsen

8
@BrandonBertelsen Bunu deneyin: $ ssh-agent /bin/sh ve $ ssh-add $yourkey
shyam

@BrandonBertelsen Daha sonra ayarlayıp yapmadığınızı git config --listgörmek için kullanmalısınız credential.helper- eğer varsa yardımcınız yararsız olduğundan bu ayarı kaldırmalısınız.
yoyo

Yanıtlar:


2382

Başladın mı ssh-agent?

Komutu ssh-agentçalıştırmadan önce başlamanız gerekebilir ssh-add:

eval `ssh-agent -s`
ssh-add

Bunun , Windows'ta msysgit Bash için aracıyı başlatacağını unutmayın . Farklı bir kabuk veya işletim sistemi kullanıyorsanız, komutun diğer yanıtlarda listelenenler gibi bir varyantını kullanmanız gerekebilir .

Aşağıdaki yanıtlara bakın:

  1. ssh-add şikayet ediyor: Kimlik doğrulama aracınızla bağlantı açılamadı
  2. Git push kullanıcı adı ve şifre gerektirir (ssh-agent'ın nasıl kullanılacağı hakkında ayrıntılı talimatlar içerir)
  3. Kimlik doğrulama aracısı nasıl çalıştırılır (git / ssh)? .
  4. Kimlik doğrulama aracınızla bağlantı açılamadı

Ssh-agent'ı otomatik olarak başlatmak ve tek bir örneğin birden çok konsol penceresinde çalışmasına izin vermek için bkz . Oturum açarken ssh-agent'ı başlatma .

Neden evalsadece yerine kullanmamız gerekiyor ssh-agent?

Nedenini bulmak için Robin Green'in cevabına bakınız .

Herkese Açık ve Özel Anahtarlar

Ayrıca, her kullandığımda ssh-add, ona her zaman özel anahtarlar eklerim. Dosya ~/.ssh/id_rsa.pubortak bir anahtara benziyor, işe yarayıp yaramayacağından emin değilim. Eğer bir var mı ~/.ssh/id_rsadosyası? Bir metin düzenleyicisinde açarsanız, bunun özel bir anahtar olduğu söylenir mi?


18
@xtian Sorunu anladığımdan emin değilim. Tam ayrıntıları bilmiyorum, ancak özel anahtarın ağ üzerinden asla gönderilmediğini tahmin ediyorum. Bence ssh-addsadece ana makinede şifrelenmiş bir özel anahtarın şifresini çözer, böylece yerel olarak kullanılabilir ... asla kimseye gönderilmez . Bir ağ üzerinden yalnızca ortak anahtarların gönderildiğini tahmin ediyorum. Anlayışım yanlış mı?

6
Çok kibarsın Cupcake. Kesinlikle haklısın. Benim hatam. burada ; ssh-add, kullanıcının ssh-agent (çalışan işlem) için rsa-whatever anahtarlarını kabul eden sunucu ile istemci / ana bilgisayar adına hareket edebileceği özel anahtar ekler. Tanrım. Beni bu kadar heyecanlandıran ne bilmiyorum.
xtian

22
Neden eval ssh-agent -sçalıştığını merak ediyorum , ama ssh-agentkendi başına çalışmıyor.
DanielM

13
@DanielM: SSH'nin ssh-agent'ı kullanmak için iki şeye ihtiyacı vardır: arka planda çalışan bir ssh-agent örneği ve SSH_AUTH_SOCKSSH'ye ajana ( IIRC) bağlanmak için hangi soketi kullanması gerektiğini bildiren bir ortam değişkeni kümesi . Sadece koşarsanız ssh-agent, ajan başlayacaktır, ancak SSH'nin nerede bulunacağı hakkında hiçbir fikri olmayacaktır.
Vanessa Phipps

4
Yine de cevap verdiğin için teşekkürler. Komutta backquote kullandığınızı fark ettim. Öyle karıştı neden benim bash kabuğu üzerinde eval komutu ancak tek değil / çift tırnak (' ") için Backquote (`) çalışır?
Weishi Zeng

539

Diğer çözümleri boşuna denedim. Daha fazla araştırma yaptım ve aşağıdaki komutun işe yaradığını gördüm. Windows 7 ve Git Bash kullanıyorum .

eval $(ssh-agent)

Daha fazla bilgi için: https://coderwall.com/p/rdi_wq


14
Windows 8'de de çalıştı.
Andreas Rudolph

Ayrıca Windows 7 ve Git Bash kullanıyorum ve cevabım gayet iyi çalışıyor. Yine de bu şekilde yapabilmeniz harika.

2
Harika !! Windows 10 ile de çalıştı.
NitinM

1
Manjaro üzerinde çalıştı
code_flow

1
$ eval "$ (ssh-agent -s)" benim için Windows 10'da çalıştı
Andrew Anderson

261

Aşağıdaki komut benim için çalıştı. CentOS kullanıyorum.

exec ssh-agent bash

3
Teşekkürler, bu benim için çalıştı, benim kabuk için 'exec ssh-agent zsh' koştum.
jasonmcclurg

2
Bu silinen "cevaba" göre Amazon Linux AMI üzerinde de çalışıyor. Sanırım bu bir Unix / Linux / * nix çözümü.

4
Bir liman işçisi konteynırına girdim ve ssh-add my.id_rsaüzerimde başarısız olurdum. Ama sorunsuz exec ssh-agent zshçalışabileceğim bir ortam verdi ssh-add. Ve docker konteynerin
içindeyim

Sorunun ne olabileceğini herkes kısaca açıklayabilir mi? Teşekkürler :) Bu benim Ubuntu 14.04 üzerinde de çalıştı.
harkirat1892

raspbian üzerinde de çalıştı
mega_creamery

215

MsysGit veya Cygwin

Msysgit veya Cygwin kullanıyorsanız , msysgit ve cygwin ve bash'da SSH-Agent'ta iyi bir öğretici bulabilirsiniz :

  1. .bashrcAna klasörünüze bir dosya ekleyin .

  2. Dosyayı açın ve yapıştırın:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. Bu, anahtarınızın geleneksel ~/.ssh/id_rsakonumda olduğunu varsayar . Değilse, ssh-addkomuttan sonra tam bir yol ekleyin .

  4. ~/.ssh/configİçeriğe dosya ekleme veya içerik oluşturma

    ForwardAgent yes
    

    Orijinal eğitimde ForwardAgentparam Yes, ama bir yazım hatası. Tüm küçük harfleri kullanın yoksa hata alırsınız.

  5. Msysgit'i yeniden başlatın. Parolanızı bir kez girmenizi isteyecek ve bu kadar (oturumu bitirene veya ssh-ajanınız öldürülene kadar).

Mac OS X

Terminali her açtığınızda yeni bir ssh-agent başlatmak istemiyorsanız, Keychain'e bakın . Şimdi Mac'liyim , bu yüzden kurmak için Mac OS X'te zsh & keychain ile öğretici ssh-agent'ı kullandım , ancak bir Google aramasının Windows için bol miktarda bilgi içereceğinden eminim.

Güncelleme : Mac'te daha iyi bir çözüm, anahtarınızı Mac OS Anahtarlık'a eklemektir:

ssh-add -K ~/.ssh/id_rsa

Bu kadar basit.



1
Bunu yaptığımda eval `ssh-agent -s`cygwin'den çıktığımda süreç durmuyor.
Kiril

Windows / gitbash için yapılandırmayı ayarlamanın bir yolu var mı, böylece her seferinde yapmanıza gerek yok mu?
mix3d

4
Bu olmalı ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)aksi takdirde yeni bir ssh-agent başlatılır her -. Kullanıcı zaman zaman ve sonra kullanıcı cronjobs vardı makinemi öldürdü.
parçalama

3
ForwardAgent yesgerekli değildir ve güvenilir olmayan herhangi bir sunucu için ayarlanmışsa teorik olmayan bir güvenlik riskidir . Anahtar aracınıza yerel erişim, bu ayara bakılmaksızın çalışmalıdır.
SeldomNeedy

208

Kimlik doğrulama aracınızla bağlantı açılamadı

Bu hatayı gidermek için:

bash:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Sonra ssh-addnormalde yaptığınız gibi kullanın .


Sıcak ipucu:

Her zaman yukarıdaki ssh-agent komutları için ne yazacağımı unutuyordum, bu yüzden dosyamda böyle bir takma ad oluşturdum .bashrc:

alias ssh-agent-cyg='eval `ssh-agent -s`'

Kullanmak yerine Şimdi ssh-agent, ben kullanabilirsinizssh-agent-cyg

Örneğin

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

Orijinal Düzeltme Kaynağı:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


3
evaldaha önce her çalıştırdığınızda komutu çalıştırmanız gerekecektir ssh-agent. Şimdi bir takma ad kullanıyorum, bunu nasıl yaptığım için güncellenmiş cevaba bakın.
Chris Snow


Ayrıca https yerine ssh belirtimini kullanmam gerekiyordu (bkz. Help.github.com/articles/changing-a-remote-s-url )
RunHolt

1
Siz bayım, harikasınız. Teşekkürler. ** Bir bitbucket repo klonlama sırasında kurulum SSH anahtarı zaten aynı sorunu ediyorum karşılaştığı ancak hata almaya devam etti: fatal: Could not read from remote repository..
Nishant Ghodke

Windows 10 ve git bash yüklü benim için çalıştı
desmond13

116

Linux için de aynı problemle karşılaştım ve işte yaptığım şey:

Temel olarak, ssh-agent komutu aracıyı başlatır, ancak çalışması için ortam değişkenlerini gerçekten ayarlamaz. Sadece bu değişkenleri kabuğa çıkarır.

Gerek:

eval `ssh-agent`

ve sonra ssh-add yapın. Bkz . Kimlik doğrulama aracınızla bağlantı açılamadı .



Windows'da boot2docker kullanırken sorun yaşarken benim için de çalıştı.
Veve

Benim için gereken buydu.
Tom

115

ssh-add ve ssh (openssh uygulamalarını kullandığınızı varsayarsak), ssh aracısıyla nasıl konuşulacağını bilmek için bir ortam değişkeni gerektirir. Aracıyı kullanmakta olduğunuz komuttan farklı bir komut istemi penceresinde başlattıysanız veya yanlış başlattıysanız, ssh-add veya ssh bu ortam değişkeni kümesini görmez (ortam değişkeni yerel olarak ayarlandığından) olarak komuta istemi ayarlanmıştır).

Hangi ssh sürümünü kullandığınızı söylemezsiniz, ancak cygwin'leri kullanıyorsanız, Cygwin'deki SSH Agent'ın bu tarifini kullanabilirsiniz :

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

Bu, açtığınız her yeni komut istemi penceresi için bir aracıyı otomatik olarak başlatır (bir oturumda birden fazla komut istemi açarsanız yetersizdir, ancak en azından çalışmalıdır).



9
Burada başka bir SO sorusuyla bağlantılıydım. Bunu neden Bash yapılandırma dosyasına eklemenin gerekli olduğunu sorabilir miyim? Makinemde tek yapmam gereken çalıştırmak eval $(ssh-agent)ve her yeni terminal penceresi için şifresiz ssh kullanabilirim.
Andy J

Bu terminalden yeni terminaller başlatmazsanız bu mümkün olmamalı.
Robin Green

114

Çalıştırmak

ssh-agent bash
ssh-add

Daha fazla ayrıntı almak için arama yapabilirsiniz

ssh-agent

veya koş

man ssh-agent

7
Ben pencere üzerinde git bash ile çalışıyorsanız o zaman bunu tavsiye ederim.
Neeraj Sewani

@ neer17 bu ssh-copy-idubuntu üzerinde kullanmama izin verdi . Neden ssh-agentbash başlatmak için kullanmadan anahtarı ekleyemedim .
23

2
Windows için olan bu! (W10pro build 1809 ve git 2.21.0 üzerinde test edildi)
Alfabravo

ssh-agent zsh; ssh-add
ZSH

97

Aşağıdaki adımları deneyin:

1) Git Bash'i açın ve çalıştırın: cd ~/.ssh

2) Aracıyı çalıştırmayı deneyin: eval $(ssh-agent)

3) Şu anda aşağıdaki komutu çalıştırabilirsiniz: ssh-add -l


9
Bu benim için işe yarayan tek çözüm (Windows 7'de). İlk önce ajanları öldürmek için Rick'in cevabındaki ps aux | grep sshve killkomutunu kullandım . Bundan sonra ssh-add-l anahtarı olmadan çalıştı (-l kullanmak hata verdi). eval 'ssh-agent'Rick'in cevabında işe yaramadığı için eval $(ssh-agent)Chechoro'nun cevabındaki gibi kullanmak zorunda kaldım .
14'te uyuşturucu

6
+1 OP ile aynı sorunu yaşadım (Windows 7) ve bu benim için çalışan tek çözüm.
Weblurk


2
@ İlaç Geri tepeler, kesme işaretleri değildir; Kabuk betiğinde, içeride olanı yürütmek anlamına gelir. $(ssh-agent)eşittir `ssh-agent`ancak daha okunabilirdir.
MM

96

Kullanmak yerine $ ssh-agent -skullandım$ eval `ssh-agent -s` bu sorunu çözmek için.

İşte adım adım (GitBash üzerinde adım 2) yaptığım şey:

  1. Konumundaki .ssh klasörümü temizledim C:\user\<username>\.ssh\
  2. Yeni bir SSH anahtarı oluşturuldu
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. Herhangi bir işlem kimliğinin (ssh aracısı) zaten çalışıp çalışmadığını kontrol edin.
    $ ps aux | grep ssh
  4. (İsteğe bağlı) 3. adımda herhangi bir bulunursa, bunları öldürün
    $ kill <pids>
  5. Ssh aracısını başlattı
    $ eval `ssh-agent -s`
  6. Ssh aracısına adım 2'de oluşturulan ssh anahtarı eklendi
    $ ssh-add ~/.ssh/id_rsa

3
'eval' dahili veya harici bir komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmaz.
Chutipong Roobklom

Sadece ssh-agent -sssh-add ~ / .ssh / id_rsa komutunu değerlendirerek aracıyı yeniden başlatabilir ve eski anahtarı ekleyebilirsiniz. Yeni SSH anahtarı oluşturursanız, o anahtarı github, bitbucket, vb.Gibi tüm hizmetlerinizde güncellemeniz gerekir
Mohit Satish Pawar

Bu Windows yeniden başlatılmasını sağlamanın bir yolu var mı? Yeniden başlattıktan sonra tekrar "eval ssh-agent -s" ve "ssh-add ~ / .ssh / id_rsa" yı başlatana kadar çalışmaz .
Michal Vician

1
uzun bir süre aradıktan sonra, işe
yarayan

Büyük Açıklama!
avivamg

56

Windows 10'da burada listelenen tüm cevapları denedim, ancak hiçbiri işe yaramadı. Aslında bir ipucu veriyorlar. Bir sorunu çözmek için 3 komuta ihtiyacınız vardır. Bu sorunun fikri, ssh-add'in geçerli ssh-agent çorap dosyası yolu ve pid numarası ile ayarlanması için SSH_AUTH_SOCK ve SSH_AGENT_PID ortam değişkenlerine ihtiyaç duymasıdır.

ssh-agent -s > temp.txt

Bu, ssh-agent çıktısını dosyaya kaydeder. Metin dosyası içeriği şu şekilde olacaktır:

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

"/Tmp/ssh-kjmxRb2764/agent.2764" gibi bir şeyi metin dosyasından kopyalayın ve aşağıdaki komutu doğrudan konsolda çalıştırın:

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

Metin dosyasından "3044" gibi bir şey kopyalayın ve aşağıdaki komutu doğrudan konsolda çalıştırın:

set SSH_AGENT_PID=3044

Şimdi geçerli konsol oturumu için ortam değişkenleri (SSH_AUTH_SOCK ve SSH_AGENT_PID) ayarlandığında ssh-add komutunuzu çalıştırın ve ssh aracısını bağlamak için tekrar başarısız olmaz.


2
Teşekkür ederim! Tam da ihtiyacım olan buydu.
Eşzamanlı

6
Hayır, hala aynı.
Jaskey

3
Bu adımlar, 'eval $ (ssh-agent)'
yapmakla aynıdır

2
Windows 10'umda düzeltildi! Teşekkür ederim!
ntl

1
Bu aslında sadece değiştirmek için gerekli Linux sorunu ... kurtarmak için bana yardımcı settarafındanexport
greg hor

30

Karşılaştığım bir şey eval, Cygwin'i kullanarak benim için işe yaramadı, benim için işe yarayan şeydi ssh-agent ssh-add id_rsa.

Ondan sonra özel anahtarımın çok açık olduğu bir sorunla karşılaştım, bunun için bulmayı başardım ( buradan ):

chgrp Users id_rsa

Hem de

chmod 600 id_rsa

nihayet kullanabildim:

ssh-agent ssh-add id_rsa

Kullanmak mı eval `ssh-agent`ters tırnakların ile `etrafında ssh-agentgösterildiği gibi, benim cevap ? Cygwin'de bu benim için iyi çalıştı. ssh-agent ssh-addEn azından msysgit Bash'de de işe yarayan doğru gibi görünüyorsunuz . Ancak, id_rsakullanılan varsayılan anahtar olduğuna dikkat edin , bu nedenle ile belirtmeniz gerekmez ssh-agent ssh-add id_rsa.

Ben backticks kullandığım inanıyorum, ama benim için hala zar yok
Vnge

1
Aman tanrım, benim birkaç saat fütürümü çözdün. Teşekkürler!
Chee Loong Yakında

Bu cevap bash'de benim için çalıştı.
Lsakurifaisu

27

Windows 7 için n3o'nun cevabını güçlendirmek için ...

Benim sorunum gerçekten gerekli bazı ortam değişkenleri ayarlanmadı ve n3o doğru ssh-agent bu ortam değişkenleri nasıl ayarlayacağınızı söyler, ama aslında onları ayarlamadı.

Windows "eval" yapmanıza izin vermediğinden, bunun yerine ne yapmanız gerektiği aşağıda açıklanmıştır:

Ssh-agent çıktısını bir toplu iş dosyasına

ssh-agent > temp.bat

Şimdi temp.bat dosyasını düzenlemek için Not Defteri gibi bir metin düzenleyicisi kullanın. İlk iki satırın her biri için: - "set" kelimesini ve satırın başına bir boşluk ekleyin. - İlk noktalı virgül ve sonraki her şeyi silin.

Şimdi üçüncü satırı silin. Temp.bat dosyanız şöyle görünmelidir:

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

Temp.bat dosyasını çalıştırın. Bu, ssh-add'in çalışması için gereken ortam değişkenlerini ayarlayacaktır.



Could not open a connection to your authentication agent.Win10 PowerShell'de hala ssh-add çalıştırırken alıyorum.
Kebman

19

Daha yeni çalıştım. ~/.ssh/configDosyanızı açın .

Aşağıdakileri ekleyin-

Host github.com
 IdentityFile ~/.ssh/github_rsa

Bana ipucu veren sayfa Git için SSH'yi Ayarla , tek boşluk girintisinin önemli olduğunu söyledi ... ancak burada Heroku'dan o alana sahip olmayan ve düzgün çalışan bir konfigürasyonum vardı.


1
Bu, SSH anahtarının parolasını girmeye yardımcı olmaz.
alesch

1
Parolayı girmek istemiyorsanız, anahtarsız bir anahtar oluşturun. Zaten komut dosyasında saklayacaksanız bir parola almanın bir anlamı yoktur.
Paul Becotte

Ssh-agent kullanmanın bütün mesele budur. Anahtarlarınızın şifresi, ssh-agent tarafından işlenen güvenli bir anahtarlıkta saklanır.
alesch

Bu benim için en iyi cevap. Windows 7'de binlerce kez başlayan ssh-agent ile ilgili birçok sorun vardı ve bu tuzağı öldürmek hile yapmadı. Evde kişisel bilgisayarımda parola olmamayı umursamıyorum.
Fleshgrinder

18

Bu talimatları uygularsanız, sorununuz çözülecektir.

Mac veya Linux makinesindeyseniz şunu yazın:

eval "$(ssh-agent -s)"

Bir Windows makinesindeyseniz, şunu yazın:

ssh-agent -s

13

Başka bir çözüm sunayım. Git 1.8.2.2 veya çevresini henüz yüklediyseniz ve SSH'yi etkinleştirmek istiyorsanız, iyi yazılmış yönergeleri izleyin .

Her şey hafif bir engelle karşılaşabileceğiniz Adım 5.6'ya kadar. Bir SSH aracısı çalışıyorsa, bash'ı yeniden başlattığınızda aşağıdaki hata iletisini alabilirsiniz

Could not open a connection to your authentication agent

Bunu yaparsanız, birden fazla ssh-agent işleminin çalışıp çalışmadığını görmek için aşağıdaki komutu kullanın

ps aux | grep ssh

Birden fazla ssh-agent hizmeti görürseniz, tüm bu işlemleri öldürmeniz gerekir. Kill komutunu aşağıdaki gibi kullanın (PID bilgisayarınızda benzersiz olacaktır)

kill <PID>

Misal:

kill 1074

Tüm ssh-agent işlemlerini kaldırdıktan sonra px aux | grep ssh komutunun gittiğinden emin olmak için tekrar basın, sonra Bash'ı yeniden başlatın.

Voila, şimdi böyle bir şey almalısın:

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

Şimdi Adım 5.7 ve ötesinde devam edebilirsiniz.


beni barikat, tyvm geçti
Jason Fingar

Sadece benim durumumda listelenen öğelerden birinin aramayı yaptığımız grep süreci olduğunu eklemek istedim, ancak yürütüldükten sonra zaten öldürüldü. Hiçbir cinas amaçlanan.
Ryan Mortensen


13

Pencere kullanıcıları için cmd'nin eval `ssh-agent -s`işe yaramadığını gördüm , ancak git bash'ı kullanmak bir tedavi yaptı eval `ssh-agent -s`; ssh-add KEY_LOCATIONve Windows hizmeti "OpenSSH Anahtar Yönetimi" nin devre dışı bırakılmadığından emin olun


12

Not: Bu, bununla birleştirilen bu sorunun cevabıdır . Bu soru Windows 7 içindi, yani cevabım Cygwin / MSYS / MSYS2 içindi. Bu bazı SSK ajan gibi böyle yönetilmesi gereken beklemiyordum bazı görünüyor .

Bu, SSH aracısını çalıştırır ve Bash terminalinizi her açışınızda değil, yalnızca ilk ihtiyacınız olduğunda kimlik doğrulaması yapar . SSH'nin kendisi ve scp dahil olmak üzere genel olarak SSH kullanan herhangi bir program için kullanılabilir. Sadece şunu ekleyin /etc/profile.d/ssh-helper.sh:

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "$@"; }


2
ssh-agent işlemi, onu çalıştırmak için kullanılan terminalle ilişkili görünmüyor. Sanırım ps -A | grep ssh-agentya da ps h -C ssh-agentyerine kullanılmalıps | grep ssh-agent
Alexis

1
İşlev adında kısa çizgi kullanılması önerilmez. Neden bilmiyorum, ama okumaz bu . Örneğin, echo ssh-auth | bashbunun başarısız olacağını buldum .
alexis

1
Bunu biraz daha doğrulayabilirsiniz. Çalışıp çalışmadığını kontrol edin ve env değişkenlerini atayın. Ve sonra ssh yapılandırma girişinize ekleyin AddKeysToAgent yes(veya kullanın prompt) ( Host *tüm Ana Bilgisayarlar için kullanın .) Bu şekilde, yalnızca gerçekten bağlanmaya çalıştığınızda SSH şifresi istenecektir, aksi takdirde basit git diffveya için bir şifre istenebilir git status.
ST-DDT

2
$HOME/.sshdaha sağlam olabilir/home/$(whoami)/.ssh
Ari Sweedler

12

Aynı sorunu yaşadım Ubuntuve diğer çözümler bana yardımcı olmadı. Sonunda problemimin ne olduğunu anladım. sshAnahtarlarımı /root/.sshklasörde yaratmıştım , bu yüzden ssh-addroot olarak koştuğumda bile , işini yapamadı ve söylemeye devam edemedi

Could not open a connection to your authentication agent.

Ssh genel ve özel anahtarlarımı /home/myUsername/klasörde oluşturdum ve kullandım

ssh-agent /bin/sh

sonra koştum

ssh-add /home/myUsername/.ssh/id_rsa

ve sorun bu şekilde çözüldü.

Not: Deponuza erişmek için ile anahtar gitoluştururken git şifrenizi ekleyin .sshssh-keygen -t rsa -C "your git email here"


9

Sunucuya bağlanırken -A parametresini kullanın, örnek:

ssh -A root@myhost

man sayfasından:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

Ne işe yarar ve neden?
erikbwork

adam sayfasına göre ... man ssh ... -A Kimlik doğrulama aracı bağlantısının iletilmesini sağlar. Bu, bir yapılandırma dosyasında ana makine başına da belirtilebilir.
Scott Stensland

8

Çalıştırılacak temel çözüm ssh-agentbirçok cevapta cevaplanır. Ancak ssh-agentbirçok kez çalıştırma (her açılan terminal veya uzaktan oturum açma başına) ssh-agentbellekte çalışan bir çok kopya oluşturur . Bu sorunu önlemek için tavsiye edilir komut yazmak için uzun ve ihtiyaçtır ve / veya dosya veya çok fazla dizeleri yazma gereğini ayrılmış kopya ~/.profileveya ~/.schrc. Beni önerelim basit iki dize çözümü:

İçin sh , bash vb:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

İçin csh , tcsh , vs:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`

Burası ne:

  • işlemi ssh-agentada ve geçerli kullanıcıya göre ara
  • çağırarak uygun kabuk komut dosyası oluşturun ssh-agentve ssh-agentgeçerli bir kullanıcı ssh-agentişlemi bulunmazsa kendisini çalıştırın
  • uygun ortamı yapılandıran oluşturulan kabuk betiğini değerlendirir

Oluşturulan kabuk komut dosyasını ~/.ssh-agent.tcshveya ~/.ssh-agent.shbaşka bir kullanıcının erişiminden korunmak gerekli değildir, çünkü: ilk iletişim, ssh-agentbaşka kullanıcılar tarafından erişilemeyen korumalı soket aracılığıyla işlenir ve ikincisi başka bir kullanıcı, dizindeki ssh-agentnumaralandırma dosyalarıyla soketi basit bulabilir /tmp/. Sürece erişim konusunda ssh-agentise aynı şeyler söz konusudur.


6

Takip etmeyi dene:

ssh-agent sh -c 'ssh-add && git push heroku master'

1
Bunu yapmanın temiz bir yolu gibi görünüyor.
Leon Grapenthin

6

Açıklamalar için @ cupcake'nin cevabını okuyun . Burada sadece düzeltmeyi otomatikleştirmeye çalışıyorum.

BASH ile Cygwin terminalini kullanıyorsanız, $ HOME / .bashrc dosyasına aşağıdakileri ekleyin. Bu yalnızca ilk Bash terminalinde ssh-agent'ı başlatır ve anahtarları ssh-agent'a ekler. (Bunun Linux'ta gerekli olup olmadığından emin değilim)

###########################
# start ssh-agent for
# ssh authentication with github.com
###########################
SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh
if [ ! -e $SSH_AUTH_SOCK_FILE ]; then
    # need to find SSH_AUTH_SOCK again.
    # restarting is an easy option
    pkill ssh-agent
fi
# check if already running
SSH_AGENT_PID=`pgrep ssh-agent`
if [ "x$SSH_AGENT_PID" == "x" ]; then
#   echo "not running. starting"
    eval $(ssh-agent -s) > /dev/null
    rm -f $SSH_AUTH_SOCK_FILE
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE
    ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null
#else
#   echo "already running"
fi
source $SSH_AUTH_SOCK_FILE

"Ssh-add" komutunda doğru anahtarlarınızı eklemeyi UNUTMAYIN.


5

Bu sorun vardı, ssh-agent'ı başlattığımda, zaten çalışıyorken. Kafası karışıyor. Durumun bu olup olmadığını görmek için şunu kullanın:

eval $(ssh-agent)

bunun olması gerektiğini düşündüğünüzle aynı olup olmadığını görmek için. Benim durumumda, yeni başladığımdan farklıydı.

Birden fazla ssh aracısının çalışıp çalışmadığını doğrulamak için inceleyebilirsiniz:

ps -ef | grep ssh

2
Sanırım koşmanın eval $(ssh-agent)her seferinde farklı bir PID ile yeni bir ajan yaratması gerekiyor, ancak yanlış olabilirim.

4

Stash ssh üzerinden bağlanmak için Windows üzerinde çalışmak için çalışırken çalışırken benzer bir sorun vardı

İşte benim için işe yarayan çözüm.

  1. Windows kutumda Pageant ssh aracısını çalıştırdığımı gösteriyor - ne çalıştırdığınızı kontrol ediyorum. Putty ve winScp ile varsayılan olarak geldiği için Pageant olduğundan şüpheleniyorum

  2. Ssh-add, bu tür bir aracıyla komut satırından çalışmaz

  3. Özel anahtarı görev çubuğundaki Pageant simgesini ikiye katlayarak alabileceğiniz pageant UI penceresinden eklemeniz gerekir (bir kez başlatıldığında).

  4. Anahtarı Pageant'a eklemeden önce PPK formatına dönüştürmeniz gerekir. Tüm talimatları burada bulabilirsiniz SSH anahtarını ppk formatına dönüştürme

  5. İşte bu. Anahtarımı saklamak için yükledikten sonra, yerel bir repo oluşturmak ve uzaktan klonlamak için SourceTree kullanabildim.

Bu yardımcı olur umarım...


3

Git işlemlerini (ssh aracısı) durdurarak (ssh aracısı), sonra Git'i kaldırarak ve Git'i tekrar yükleyerek hatayı çözdüm.


2
Yapmanız gereken tek şeyin varolan aracı işlemlerini öldürmek ve sonra Git'i yeniden yüklemek yerine birini yeniden başlatmak olduğunu sanıyorum.

3

Win8.1E'de Git Bash kullandığım zaman çözünürlük şu şekildeydi:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

Çıktı almak neden gereklidir /dev/null? Yanıtınız temelde tamamen aynı şeyi yapar bu bir .

Ayrıca, ~/.ssh/id_rsavarsayılan anahtar olduğunu belirtmek istiyorum, bu yüzden belirtmek zorunda değilsiniz ssh-add ~/.ssh/id_rsa, sadece ssh-addçalışması gerekir.

Çözümünüzü aynı ortamda @Cupcake'de denedim, işe yaramıyor. Bunun neden cevap olduğunu anlamıyorum, ama bu şekilde yapmadıysam hiç işe yaramadı.
gece

3

Putty kullanıyorsanız, "Connection / SSH / Auth / Agent iletmeye izin ver" seçeneğini "true" olarak ayarlamanız gerekebilir.

resim açıklamasını buraya girin


3

Bu benim için çalıştı .

CMD penceresinde aşağıdaki komutu yazın:

cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add path/to/.ssh/id_rsa

3

Windows 10'da yerleşik bash için bunu .bash_profile dosyasına ekledim:

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi

1
Sadece $(ssh-agent -s)aracının ortamını ayarlamak için aramayı söyleseydiniz neden bu kadar çok metin yapıştırdığınızı bilmiyorum .
erikbwork

1
İlk kez kullandığımda bu benim için çalıştı. Ancak sistem yeniden başlatıldıktan sonra sorunun daha da kötüleşmesine neden oldu. SSH ile çalışmıyor hiç artık. Tavsiye edilmez.
yspreen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.