Mac OS X Keychain SSH tuşları ile nasıl kullanılır?


140

Mac OS X Leopard'dan bu yana, Anahtarlığın SSH anahtarlarını depolamayı desteklediğini biliyorum. Birisi lütfen bu özelliğin nasıl çalışması gerektiğini açıklayabilir mi?

Çeşitli sunuculara erişmek için ~ / .ssh dizininde sakladığım bazı RSA anahtarlarım var. Bu tuşlara ayarlanmış parolalarım yok. Şu anda bu sunuculara giriş yapmak için Terminal'de aşağıdaki komutları kullanıyorum:

eval `ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
ssh kullanıcısı @ sunucusu

(Bunu kolaylaştırmak için bazı Bash fonksiyonları yazdım.)

Bunu Anahtarlık kullanarak yapmanın daha iyi bir yolu var mı?

Yanıtlar:


16

Çalışması için $SSH_AUTH_SOCKçevre değişkenine dikkat edilmelidir /tmp/launch-xxxxxx/Listeners. Bu oturum açtığınızda otomatik olarak yapılması gerekiyordu. O soketteki dinleyici ssh-agent protokolünü konuşuyor.

Bash komut dosyalarınız kendi ssh ssh-agentajanınızı başlatıyor ( yazılmıyor, ssh_agent değil) ve ssh-agentoturum açma sırasında sizin için ayarlanmış olanı geçersiz kılıyor .

Ayrıca, anahtarlığın tüm amacı, şifreleri ssh anahtarlarınıza depolamaktır, ancak bu anahtarlara ayarlanmış parolalarınız olmadığını söylersiniz, bu yüzden anahtarlık entegrasyonundan ne beklediğinizden emin değilim.

Son olarak, ilk giriş yaptığınızda, muhtemelen bir ssh-agent işlemini görmeyeceksiniz. Bir şey ilk kez o soketi okumaya çalıştığında, bu işlem hizmetleri başlatmakla otomatik olarak başlayacaktır /tmp.


1
Teşekkürler. Öyleyse hala ssh-addRSA kimliklerini oturum açmak için başlatılan varsayılan ssh ajanına eklemek için kaçmam gerekecek.
John Topley

Ssh-add çalıştırmak zorunda değilsiniz; ssh-agent, ilk kez ssh çalıştırdığınızda anahtarın şifresini isteyecektir.
Rudedog

3
Her ssh çalıştırdığımda şifre soruyor. Mesele şu ki, herhangi bir şifre girmek zorunda kalmak istemiyorum.
John Topley

1
Sizden şifre isteyen nedir? Sizi soran uzak sunucu olduğundan şüphelenmeye başladım, bu da anahtarlarınızın daha iyi bir perspektiften parolaları olmadığını ifade ediyor. Uzak sunucudaki şifreyi atlamak istiyorsanız, genel anahtarınızı $HOME/.ssh/authorized_keysbu sunucuya eklemeniz gerekir . Mac OS'nin ssh-agent + keychain yalnızca yerel ssh anahtarlarınızın şifresini saklamak için kullanılır; mevcut ssh bağlantıları üzerinden uzak parolalar göndermek anlamına gelmez.
Rudedog

1
ssh -vssh ne yaptığını teşhis etmek için kullanın . ayrıca sshd -p 8900 -vsunucu tarafında da kullanın ve ssh -v remote:8900sshd'nin ne yaptığını teşhis etmek için kullanın.
Rudedog

252

OS X'in Leopard sürümünden itibaren ssh-agent, Keychain ile daha sıkı bir şekilde bütünleşiyor. Tüm SSH anahtarlarınızın şifrelerini güvenli bir şekilde ssh-agent'ın başlangıçta okuyacağı Keychain'de saklamak mümkündür. Sonuç olarak, anahtarlarınızı parolalarla sabitlemenin basit olması, ancak bunları kullanmak için asla parola yazmamanız gerekmesidir! İşte nasıl:

Her ssh anahtarına pass cümlesini anahtarlığa ekleyin: (seçenek -k sadece düz özel anahtarlar yükler, sertifikaları atlar)

ssh-add -K [path/to/private SSH key]

(bunun büyük bir K olduğuna dikkat edin)

Mac'inizi her yeniden başlattığınızda, anahtarlığınızdaki tüm SSH anahtarları otomatik olarak yüklenir. Anahtar Zinciri Erişimi uygulamasında ve ayrıca komut satırından tuşları görebilmeniz gerekir:

ssh-add -l

ssh-add -luzaktan bağlanırken hiçbir anahtar listelenmiyor (burada $ DISPLAY ayarlanmadı). Anahtarlık kullanmak için burada özel numaralar kullanılması gerekir (örneğin, superuser.com/questions/141044/… )
Ether

2
developer.apple.com/library/mac/documentation/Darwin/Reference/… Ayrıca parolaları anahtarlıkta saklamak için -K seçeneğine de ihtiyacınız var.
Neeme Praks

5
Homebrew gibi bir paket sisteme bir SSH sürümü daha yüklediyseniz, bunun gibi mutlak bir yol kullanmak gerekir /usr/bin/ssh-add.
Ludovic Kuty,

1
İlginç bir şekilde macOS'um Sierra bir yeniden başlatma işleminden sonra şifreyi sormuyor, ancak ssh-add -l"Ajanın kimliği yok." ( ps auxiçerir /usr/bin/ssh-agent -l).
Halil Özgür

4
MacOS Sierra için işler değişti. Bakınız github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
schieferstapel

79

İtibariyle MacOS Sierra , ssh-agent hesabınıza giriş yaptığınızda daha önce ssh anahtarları yüklü artık otomatik yükler. Bu Apple tarafından kasıtlı, ana akım OpenSSH uygulaması ile yeniden uyum sağlamak istediler . [1]


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.


Aşağıdakiler kullanımdan kaldırılmıştır (referans için saklanmıştır).

Önceki davranışa geri dönmek için, ssh-add -Aoturum açtığınızda komutu çalıştırmak (anahtarlığınızda parolaları olan tüm ssh anahtarlarını otomatik olarak yükleyen) komutunu çalıştırmak istersiniz . Bunu yapmak için şu adımları izleyin:

  1. Öncelikle, komutu kullanarak ssh-agent'a otomatik olarak yüklemek istediğiniz tüm tuşları ekleyin ssh-add -K /absolute/path/to/your/private/key/id_rsa. -KArgüman anahtar geçiş ifade eklenir sağlar MacOS en anahtarlığa . Anahtarın mutlak yolunu kullandığınızdan emin olun. Göreceli bir yol kullanmak, otomatik olarak başlatılan komut dosyasını anahtarınızı bulamaz.

  2. Yazarken tüm tuşlarınızın eklendiğinden emin olun ssh-add -A.

  3. Adlı bir dosya oluşturun com.yourusername.ssh-add.plistiçinde ~/Library/LaunchAgents/aşağıda içeriği ile. Bunun gibi Plist dosyaları , launchdoturum açtığınızda komut dosyalarını çalıştırmak için kullanılır . [2] [3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. Tell launchdyüklemek için Plist dosyasını sadece yürüterek oluşturuldu: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Ve hepiniz hazır olmalısınız.



33

10.12 Sierra çalıştıran Mac'inizin oturumları / yeniden başlatmaları arasında şifrenizi devam ettirmek için Ricardo'nun yanıtından daha basit bir yol var .

  1. ssh-add -K ~/.ssh/id_rsa
    Not: id_rsa anahtarınızın bulunduğu yolu değiştirin.
  2. ssh-add -A
  3. Aşağıdaki ~/.ssh/configdosyayı oluşturun (veya varsa düzenleyin) :

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    Şimdi şifre yeniden başlatmalar arasında hatırlanıyor!

Apple, macOS 10.12 Sierra'daki ssh-agent davranışını, önceki OpenSadar anahtarlarını, Apple'ın OpenRadar , Twitter tartışmasında ve Teknik Notunda belirtildiği gibi otomatik olarak yüklemeyecek şekilde değiştirdi . Yukarıdaki çözüm, El Capitan'ın eski davranışlarını taklit edecek ve şifrenizi hatırlayacaktır.


2
Müthiş, bir cazibe gibi çalışır, diğerlerinden sonra çok daha temiz bir
imho


10

Not: macOS Sierra için lütfen ChrisJF tarafından verilen en son cevaba bakınız .

[Jeff McCarrell'ın cevabı] [2] doğrudur, ancak geçiş cümlesi ekleme komutunun kısa çizgi yerine bir kısa çizgi, yani –Kbunun yerine -Ketkisinin bir mesajına neden olan bir tire işareti vardır –K: No such file or directory. Okumalı:

ssh-add -K [path/to/private SSH key]

2
Bu, yeni bir cevaptan ziyade, atıfta olduğunuz cevaba bir yorum olmalıdır. Burada güvenlikten bahsediyoruz. Birisi, kör kopyalayıp yapıştırmak yerine, dikkatlice yazmanız gerektiğini önerebilirssh-add -K
Phil_1984_ 21

1
K ile bir tire kullanarak, anladım illegal option -- K. Küçük harf k bir seçenek olarak listelenir.
Sam Dutton,

Geri dönüşünüz için teşekkür ederiz. Ben sadece macOS Sierra kontrol ettim -K, yani dash-capital-K, hala geçerlidir
simonair 15

6

Varsayılan sshkomutu kullanmadığınızdan şüpheleniyorum . Eğer var mı sshlimanlar üzerinden yüklü? which sshHangi sshkomutu kullandığınızı görmeye çalışın .

Genellikle, anahtarlıkta önceden kayıtlı değilse, parolanızı isteyen bir iletişim kutusu görüntülemelidir.


Bağlantı noktalarını kullanmıyorum.
John Topley

Bilgi için teşekkürler.
ggustafsson

6

Ben bir istemci ssh cert kullanarak giriş yapmaya çalışırken benzer bir sorun vardı. Bu özel durumda bir git deposuna erişmek içindi. Durum buydu:

  • Anahtar kaydedildi ~/.ssh/
  • Özel anahtarın bir parolası vardır.
  • Şifre OS X giriş anahtarlığında saklanır. ~/Library/Keychains/login.keychain
  • Bağlantı aşağıdaki gibiydi: mac ->uzak mac ->git / ssh sunucum
  • Mac OS X 10.8.5

Uzak masaüstünü kullanarak uzak mac'a bağlandığımda bir sorun yaşamadım. Ancak SSH ile uzak mac'a bağlanırken, her seferinde ssh şifresini sordum. Aşağıdaki adımlar benim için çözdü.

  1. security unlock-keychainParola giriş anahtarlığında saklanır. Bu, kilidini açar ve ssh-agent'ın ona erişmesini sağlar.
  2. eval `ssh-agent -s`Shell kullanımı için ssh-agent'ı başlatır. Anahtar kelimeden parolayı alacak ve özel ssh anahtarının kilidini açmak için kullanacaktır.
  3. Ssh / git bağlantısını kur ve işimi yap.
  4. eval `ssh-agent -k` Çalışan ssh-ajanı öldür.
  5. security lock-keychain Anahtarlık tekrar kilitlensin.

1
Bir takma ad içinde benim için çalışmak 2. için, ben kullanmak zorunda eval \$(ssh-agent)başına uzak giriş ve anahtarlık: Re . Bir takma ad içinde eval $(ssh-agent)çalışmadığında ( ters eğik çizgi olmadan $ ).
Travis,

4

Ayrıca bakınız:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... bu notu daha fazla ayrıntı istendiği gibi eklemek: "güvenlik" komutu, anahtarları (ve diğer şeyleri) doğrudan Anahtarlıklar'a aktarabilir. Güzel olan şudur ki, ssh-add'un aksine, anahtarlığı belirleyebilmelisiniz. Bu, doğrudan Keychain sistemine (nasıl yapıldığını öğrenmek için "insan güvenliği") ithal etmeyi mümkün kılar.


1
Lütfen bu cevaba biraz daha detay verebilir misiniz? Teşekkürler.
Matthew Williams

1

En iyi ve Apple'ın amaçladığı çözüm (macOS 10.12.2'den beri) burada açıklanmaktadır .

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

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


1
>>Komutu birden çok kez girerseniz, kullanma riski vardır. ChrisJF cevap tarafından açıklandığı gibi, dosyanın bir manuel baskısını yapmak daha iyi .
Coeur

Evet, işte orada
Ben
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.