Uzaktaki bir ana bilgisayarda ssh işlemi yaparken “Anahtar için parola gir” sorulmasından nasıl kaçınılır?


43

Uzaktaki bir ana bilgisayara (linux, fedora) ssh ve orada ssh işlemi (git bitbucket ile git) yapmak istiyorum. O makinede çalışan ssh-agent var.

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

ama gitmek istediğimde, parolayı girmemi gerektiriyor

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Not: Yerel olarak bu makinede çalışırsam, parolayı girmemi istemeyecektir.


Yanıtlar:


80

Bence ssh kullanmanın en iyi yolu

Git'i kullanmadan önce anahtarınızı ssh- agent'a ekleyin

Başlamazsa ssh-agent'ı başlatın :

$ eval `ssh-agent -s`

Senin ekleyin özel anahtarı kullanarak ssh-add

$ ssh-add ~ / .ssh / id_rsa_key
/home/user/.ssh/id_rsa_key için parola girin:
Kimlik eklendi: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Anahtarın eklenip eklenmediğini kontrol edin (parametre küçük harf L'dir):

$ ssh-add-l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f /
home/user/ .ssh/ id_rsa_key (RSA)

Git sunucunuza bağlanmayı deneyin:

$ ssh git.example.com

Artık Git'i fazladan şifre isteminde bulunmadan kullanabilirsiniz.

Diğer yollar

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


fakat Git'i ssh-agent'a anahtarını ekledim, sonra nasıl? teşekkürler
zambak

@lily Üzgünüm, sorunuzu anlamıyorum.
Roman

1
Bu benim için işe yaradı çözüm.
Skatox

2
Bunu nasıl kalıcı yapabilirim? Basitçe içine koymak .bashrc?
olta balığı

1
Bilginize, evalgerekli olan SSH_AUTH_SOCK gibi ortam değişkenlerini dışa aktaran komutları çıkardığı için gereklidir. unix.stackexchange.com/questions/351725/…
wisbucky

21

Zaten ssh-agentçalışıyorsanız, anahtarı ekleyebilir ve parolayı bir kez ve bir kez yalnızca o oturum için girmeniz gerekir.

ssh-add ~/.ssh/id_rsa

Hangi işletim sistemini kullandığınızı söylemiyorsunuz, ancak eğer Linux ve Gnome olursa, "Şifreler ve Anahtarlar" uygulaması (CLI adı:) seahorsebunları yönetebilir, böylece oturum açtığınızda kilidi açılabilir (şifre gerekmez) . Diğer Linux masaüstü ortamlarının kendi yöneticileri vardır. Diğer işletim sistemlerinin burada ne yaptığından emin değilim.


3

Parola sormanın asıl nedeni, anahtarınızın şifrelenmiş olmasıdır, bu ikisini karşılaştırın:

  • şifrelenmemiş

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • şifrelenmiş

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Bu nedenle, aşağıdakilerden birini yapmanız gerekir:

  1. Şifrelenmişse , şifrelemeyi kaldırmayı deneyebilirsiniz .
  2. Yanlış anahtar kullanıyorsun. Farklı bir anahtar kullanmak istiyorsanız, başka bir dosya belirtin ya da düzenleyin ~/.ssh/configve farklı bir kimlik dosyası ( IdentityFile) belirleyin.
  3. ssh-add -lTüm kimlikleri listelemek için çalıştırın (ardından yerel bölgenizle karşılaştırın) ve doğru tuşları kullanıyorsanız Stash ile tekrar kontrol edin (Stash yapılandırmasında varlar).
  4. Parolayı biliyorsanız ve otomatikleştirmek istiyorsanız, aşağıdaki geçici çözümü deneyin:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Sorun giderme:

  1. SSH aracınızın çalıştığını bir kez daha kontrol edin ( eval "$(ssh-agent -s)").
  2. Komutunuzu tekrar hata ayıklamak için git: ile GIT_TRACE=1 git pullveya GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) ile yeniden çalıştırın.
  3. Parolayı sorarak (bunu yönlendirecek true) sorarak atlamayı deneyebilirsiniz , ancak yardımcı olacağını sanmıyorum. Bunu sorarsa, bunun bir nedeni var ve temelde gerekli.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

ssh-addProgram bir başlatır ajan Parolanızı tutun (ve sağlayabilir) olabilir. Uzaktan kullanmanın yolu etkileşimli kabuğunuzun ebeveyni içindedir (böylece aracı durmaz).

İşte birkaç ilgili soru:

Şimdi ... uzaktan bağlanıyor , kural olarak komutunuz böyle giriş yapmıyor, bu yüzden başlamıyor ssh-add. Bu konuda çalışabilir, bir komut dosyası çalıştırarak

  • başlar ssh-agent
  • başlar ssh-add
  • anahtarını ekler
  • İstediğiniz komutu çalıştırır.

Zayıf nokta ikinci adımdır: parolanızı parola içermeyen bir anahtar kullanarak güvenliğinizi zayıflatmadıkça , parola için hala istenir . Bazı insanlar bunu yapar, çoğu kişi bunu tavsiye eder.


ssh-addaracı başlatmaz. Zaten çalışan bir ajana bağlanır.
AMS

Teşekkürler - Bunları ayrı senaryolarda yapmaya alışkınım ve eksik kısmı gözden kaçırdım.
Thomas Dickey

0

Aşağıdaki komutu kullanarak anahtarınızın parolasını kolayca kaldırabilirsiniz.

ssh-keygen -p

İlk istemde dosya yolunu girin (veya varsayılanı değiştirmek için Enter tuşuna basın) İkinci istem, eski parolayı girin Sonraki istem, parolayı ayarlamak için sadece enter tuşuna basın

Bu en kolay yol gibi görünüyor!


0

ssh-agentKarşılık gelen SSH ortak anahtarı uzaktan kumandaya eklenene kadar yüklense bile, özel anahtarın şifresini çözmek için şifre istemi almaya devam edersiniz~/.ssh/authorized_keys .

Yeniden üretmek:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

Kafa karıştırıcı. Uzaktan SSH giriş şifresi bu durumda yeterli olacaktır.

Bunun, ilgili özel anahtarın şifreleme şifresini bilmeden, ortak anahtarınızı (şifreli özel anahtarla eşleştirilmiş olan) eklemesini engellediğini söyleyebilirim. Zaten bir defada uzaktan giriş prosedürü var.

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.