macOS Sierra yeniden başlatmalar arasındaki SSH anahtarlarını hatırlıyor gibi görünmüyor


184

MacOS'a yükselttiğimden beri bu komutu çalıştırmam gerekiyor:

ssh-add -K

Yeniden başlatmanın ardından sorunu düzeltir ancak bilgisayarımda her oturum açtığımda bu komutu çalıştırmam gerekiyor.

Yukarıdaki komutu çalıştırmazsam, anahtarlarım ~/.sshatlanır ve bağlantı kurmak için sunucu şifresi istenir.


1
$ ssh-add -Kbana verirssh-add: illegal option -- K
modius

1
Sonrasında özel anahtar yolunu girmeniz gerekir -K. Çözünürlük için @JakeGould'un cevabına bakınız.
bisherbas

10.12.2 güncellemesi benim için bazı gereksiz sunucu şifre taleplerini ortadan kaldırdı. Artık ssh-add -K komutunu çalıştırmanız gerekmeyebilir.
Wayfaring Stranger

Yanıtlar:


216

MacOS'tan itibaren Sierra 10.12.2 Apple , soruna 'uygun' bir çözüm sağlayan izin ssh_configverilen bir seçenek ekledi UseKeychain. Aşağıdakileri ~/.ssh/configdosyanıza ekleyin :

Host *
   AddKeysToAgent yes
   UseKeychain yes     

Gönderen ssh_config man10.12.2 sayfa:

UseKeychain

MacOS'ta, belirli bir anahtar kullanmaya çalışırken, sistemin kullanıcının anahtarlığındaki parolaları araması gerekip gerekmediğini belirtir. Parola kullanıcı tarafından sağlandığında, bu seçenek aynı zamanda parolanın doğru olduğu doğrulandıktan sonra anahtarlığın içinde saklanıp saklanmayacağını da belirtir. Argüman 'evet' veya 'hayır' olmalıdır. Varsayılan değer 'hayır'.


2
Bu bağlantıya göre: openradar.appspot.com/27348363 Apple, "bu alandaki ana OpenSSH ile olan davranışlarını yeniden düzenledi ".
ThomasW

15
Apple'ın davranışı, geliştiricilerin büyük çoğunluğu için sorunlara neden olacak şekilde değiştirmesi saçmadır (GitHub yüzünden başka bir şey yapmazsa) ve kimseye bir şey demedi!
mluisbrown

9
IdentityFile ~/.ssh/id_rsaGereksiz ve gerekli olmadığını düşünüyorum (varsayılan seçeneklere bakarken). Bu seçeneği ssh config dosyamda hiç ayarlamadım.
therealmarv

9
@JakeGould IMO seviyesindeki ~/.ssh/config~sorunu çözdüğü için IMO değişimi tercih edilir ssh. % 100 .bash_profilemodun bir kabuk kullanmadan ssh kullanan GUI istemcileri için çalışacağından emin değil .
Aralık'ta

7
Apple bu değişiklikle ilgili olarak TN2449 Teknik Notunu yayımladı .
Kentzo

106

Capistrano'yu kullanarak bazı kodları dağıtmaya çalışırken de bu sorunu yaşadım . Çok sinir bozucu. İşte bu sorunla başa çıkmak için bildiğim iki yöntem.

Yöntem 1: Bilinen tüm anahtarları SSH aracısına ekleyin .

Bu yüzden bulduğu çözüm çalıştırmaktır ssh-addile -Aseçeneğiyle-bu-benzeri anahtarlıkta sizin saklanan passphrases kullanarak SSH aracıya bilinen tüm kimlikleri ekler:

ssh-add -A

Şimdi bu işe yarıyor ama yeniden başlatmalar arasında sürmeyecek. Dolayısıyla, bir daha asla bu konuda endişelenmek istemiyorsanız, kullanıcı ~/.bash_profiledosyanızı şu şekilde açın:

nano ~/.bash_profile

Ve bu satırı en altına ekleyin:

ssh-add -A 2>/dev/null;

Şimdi yeni bir Terminal penceresi açtığınızda, her şey yolunda olmalı!

Yöntem 2: Yalnızca, anahtarlıktaki SSH anahtarlarını aracıya ekleyin .

Bu nedenle, ssh-add -Aseçenek çoğu temel durum için geçerli olsa da, son zamanlarda, daha yaygın id_rsa.pubkullanılan bir makinede 6-7 Vagrant kutusunun (erişim için SSH anahtarlarını / kimliklerini kullanan) kurduğu bir sorunla karşılaştım .

Uzun lafın kısası, sunucu erişimi bir parolaya dayandığından ve SSH anahtarları / kimlikleri SSH anahtarları / kimlikleri olduğundan, SSH anahtarlarına / kimliklerini temel alan çok sayıda başarısız denemeden dolayı uzak bir sunucudan kilitlendi. SSH ajanı tüm SSH anahtarlarımı denedi , başarısız oldu ve şifre istemine bile ulaşamadım.

Sorun şu ki ssh-add -A, yapmanız gerekmese bile, sahip olduğunuz her SSH anahtarını / kimliğini keyfi olarak ekleyecektir; Vagrant kutuları durumunda olduğu gibi.

Çok fazla testten sonra benim çözümüm aşağıdaki gibiydi.

Öncelikle, acentenize ihtiyaç duyduğunuzdan daha fazla SSH anahtarı / kimliği eklenmişse, ssh-add -lbunlarla gösterildiği gibi, hepsini de aracıdan temizleyin:

ssh-add -D

Bu işlem bittikten sonra SSH aracısını şöyle bir arka plan işlemi olarak başlatın:

eval "$(ssh-agent -s)"

Şimdi, garipleşiyor ve neden olduğundan emin değilim. Bazı durumlarda, ~/.ssh/id_rsaanahtarı / kimliği aşağıdaki gibi aracıya özellikle ekleyebilirsiniz :

ssh-add ~/.ssh/id_rsa

Parolanızı yazın, vurun Returnve gitmeniz iyi olur.

Ancak, diğer durumlarda, basitçe çalıştırmak, anahtarı / kimliği eklemek için yeterlidir:

ssh-add -K

Hepsi işe yaradıysa, yazın ssh-add -lve listelenen bir yalnız SSH anahtarı / kimliği görmelisiniz.

Hepsi iyi? Şimdi aç şunu .bash_profile:

nano ~/.bash_profile

Ve bu satırı en altına ekleyin; -Ayerinde olan varsa yorum yapın veya kaldırın :

ssh-add -K 2>/dev/null;

Bu, SSH anahtarının / kimliğinin her açılış / yeniden başlatma işleminde SSH aracısına yeniden yüklenmesini sağlayacaktır.

GÜNCELLEME: Apple şimdi UseKeychainaçık SSH yapılandırma seçeneklerine bir seçenek ekledi ve ssh-add -Abir çözüm olarak da değerlendirdi.

MacOS Sierra 10.12.2'den itibaren Apple,UseKeychain SSH yapılandırmaları için bir yapılandırma seçeneği ekledi . Man sayfasını (üzerinden man ssh_config) kontrol etmek aşağıdaki bilgileri gösterir:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

Ya ekleme gibi Apple çözümü görmeye aşağı kaynar hangi ssh-add -Alistenize .bash_profile bu Aç Radar bilet açıklandığı gibi veya ekleme UseKeychainkullanıcı başına seçeneklerden biri olarak ~/.ssh/config.


4
@ modius: Eğer bir pw korumalı anahtarınız varsa, ssh-add -K [path to key]istendiğinde pw'yi girin ve girin. Anahtarlık parolayı saklar ve ssh-add ondan oradan alır.
Timo,

2
-A'nın, anahtarlığınızda depolanan tüm parolaları kullanarak aracıya kimlik eklemek için olduğunu unutmayın. Ek olarak, parola içermeyen kimlikleri varsa, onları aracınıza eklemek için -A seçeneğini atlamanız gerekir.
Evan Pon,

12
Sadece bu biraz daha görünür olmasını sağlamak, Elma içerecek şekilde ssh_config man sayfasını güncellemek sahiptir UseKeychainve AddKeysToAgentotomatik ssh_config adresinin anahtarlarını ekleyin. Kabuk komut dosyası gerekmez. 10.12.2
Ryan Gibbons

1
@JakeGeçtiğiniz şeyi alıyorum, aslında yaptıklarını seviyorum. Parolayı otomatik olarak Anahtarlık'a kaydetmek ve açılışta yüklemek yerine, güvenliğinizi kontrol etmenizi sağlıyorlar. / shrug
Ryan Gibbons,

1
@RyanGibbons FWIW, OpenRadar'daki bu cevapta Apple Developer Relations'ın resmi önerisine bakın: ssh-add -AAnahtarlarınızın her zaman yüklenmesini istiyorsanız, rc betiğinizde çalıştırarak bunu kolayca düzeltebilirsiniz .” ¯\_(ツ)_/¯
JakeGould

16

Açıklandığı gibi burada , bu yana önerilen yöntemdir MacOS 10.12.2 :

  1. Aşağıdaki satırları ~/.ssh/configdosyanıza ekleyin :

    Host *
        UseKeychain yes
        AddKeysToAgent yes
  2. Komutu kullanarak ssh-agent'a eklediğiniz herhangi bir anahtar ssh-add /path/to/your/private/key/id_rsa, anahtarlığa otomatik olarak eklenecek ve yeniden başlatıldığında otomatik olarak yüklenmelidir.


Bu cevabı ekliyorum çünkü:

  • Diğer cevaplar size IdentityFile ~/.ssh/id_rsasatırı eklemenizi söyler , ancak bu seçenek tuşları otomatik olarak yüklemek için gerekli değildir (ve aslında farklı anahtarlar kullanmak istemeyeceğiniz, eklemek istediğiniz ana makine bölümü için belirli bir anahtarı bağlar. farklı sıcak noktalar).
  • Kabul edilen cevap bahseder UseKeychain, ancak ssh-agentbir yeniden başlatma işleminden sonra tuşları devam ettirmek için yeterli değildir .

1
İkinci noktaya gelince. Ne kadar eminsin? Yeniden başlatma sırasında hiçbir şey olmuyor ve referans materyalinizde de belirtilmiyor. Yukarıdaki yapılandırmada gerçekleşen şey, SSH istemcinizin anahtarı ilk bağlantıdan sonra aracıya yükleyeceği (ve ayrıca parolayı anahtarlıktan getireceği), ardından anahtar yüklü kalacaktır. Bu bildirimi, yeniden başlatmanın hemen ardından tuşları listeleyerek doğrulayabilirsiniz ssh-add -Lve rapor edecektir The agent has no identities. Bağlanana kadar hiçbir şey orada olmayacak. AddKeysToAgentHiçbir şekilde yeniden doğmuş arasındaki tuşları kalıcı değil!
Danila Vershinin

15

Bu konuda size yardımcı olabilecek kısa bir yazı yazdım .

ssh-add -AHer başlangıçta bir çözüm komut çağırıyor .

Sadece .plistaşağıdaki içeriğe sahip dosyayı yola ekleyin ~/Library/LaunchAgents/veya Lingon uygulamasıyla bir tane oluşturun :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>ssh-add-a</string>
    <key>ProgramArguments</key>
    <array>
        <string>ssh-add</string>
        <string>-A</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->

8

MacOS 10.12.2'den beri bu UseKeychainseçeneği kullanabilirsiniz . Buradan daha fazlasını okuyun veya araştırın man ssh_config.

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular key. When the passphrase is provided by the user, this
         option also specifies whether the passphrase should be stored into the keychain once it has
         been verified to be correct.  The argument must be ``yes'' or ``no''.  The default is ``no''.

Yani sadece aşağıdakileri yapın:

echo "UseKeychain yes" >> ~/.ssh/config


1
>>Komutu birden çok kez girerseniz, kullanma riski vardır. Mluisbrown cevap ya da ChrisJF cevap olarak tanımlandığı gibi, dosyanın manuel bir baskısını yapmak daha iyi .
Coeur

Ben

4

Bunun ssh-add -Kbana " yasadışı seçenek - K " verdiğini buldum . Bunun nedeni, ssh-add'un / usr / local / bin'den (brew tarafından yüklendi mi?) Gelen garip bir versiyonuydu. / Usr / bin dizinindeki ssh-add komutunu kullanarak anahtarı ekleyebildim:

/usr/bin/ssh-add -K ~/.ssh/id_rsa

Bu, uzun yıllar boyunca kolayca çalışamadıktan sonra benim için işe yarayan şeydi.
Nyxee

4

Daha önce bu problemi yaşadım ve bunu atlamanın bir yolunu buldum. Sadece adlı bir dosya oluşturdum configbenim de ~/.sshben aşağıdaki satırları ekledik klasöre:

Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes

Neden emin değilim ama Hostve HostNameher ikisi de önemlidir. Benim durumumda onlardan biri mevcut değilse, çözüm işe yaramadı.

Sonra yeni yaptım ssh-add -Kve yeniden başlattıktan sonra bile çalışıyordu.


1
Ana bilgisayar, belirli bir sunucu için kullanıcı tanımlı adınız / takma adınız ve sunucu başına girişleri sınırlandırır: stilistik olarak, Ana Bilgisayar girişini izleyen satırları girintileştirmek güzeldir. HostName, sunucunun github.com gibi ağ adreslenebilir adını gösterir, ancak siz de bir IP adresi kullanabilirsiniz. Host ve HostName aynı şey olmak zorunda değildir, ancak evet, ikisi de ssh config formatının ayrılmaz bir parçasıdır.
Mark Fox,

4

Eğer farklı bir ssh sürümü kullanıyorsanız (örn. Homebrew aracılığıyla kurulur) yukarıdaki çözümler kutudan çıkmaz. Örneğin, AddKeysToAgent yesve UseKeychain yesde .ssh/configdosyaya Apple olmayan ssh sürümleri tarafından tanınmaz ve hataya neden olur. İstemci için -Aveya -Kseçenek için aynı ssh.

Bu, @mluisbrown un cevabının işe yaramayacağı anlamına geliyor . @JakeGould'un cevabındaki 1. yöntemi kullanabilirsiniz ve anahtarlığa tüm anahtarları eklemek ssh-addiçin .bash_profile, içindeki macOS yardımcı programını açıkça kullanabilirsiniz :

/usr/bin/ssh-add -A

Yukarıdaki bir yorumda belirtildiği gibi , önce anahtarlığa bir anahtar eklemeniz gerekebilir: örn./usr/bin/ssh-add -K .ssh/github


2

Tüm ana bilgisayarlar için UseKeyChain eklemek üzere ~ / .ssh / config değişikliği yapmak, bu yinelenen kabusu durdurmak için yeterlidir;)

Host *
 UseKeychain yes

Dosya boşsa veya basit değilse, yukarıdaki konfigürasyonu oluşturun ve / veya ekleyin.


1

Mac OS X Sierra (10.12.6) ile güncellendi. Diğer ana bilgisayarlara ssh olabilir ama github.com içine değil.

Bu ~ / .ssh / config içine eklemek zorunda olduğum şeydi:

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

Bu değişiklikten sonra, eskisi gibi github kullanabilirsiniz.

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.