Anahtar zaten varsa ssh-add sessiz olun


16

ssh-add /path/to/special_keySenaryonun üstüne koymak istiyorum . Bu iyi çalışıyor, ancak her zaman parola ister. ssh-add -lAnahtar zaten eklenmiş olsa bile parola istediğinden, bu garip ve biraz sinir bozucu .

Bunu söylemenin bir yolu var mı: "bu anahtarı ekleyin ve henüz eklenmediyse parolaya sorun, aksi takdirde hiçbir şey yapmayın"?


Yanıtlar:


20

İstediğiniz sonucu elde etmenize yardımcı olacak ssh-add için herhangi bir seçenek görmüyorum, ancak özellikle bir anahtarla ilgili olduğunuz göz önüne alındığında, bu sorunu çözmek oldukça kolaydır.

Öncelikle, special_key'iniz için parmak izinizi alın:

ssh-keygen -lf /path/to/special_key  | awk '{print $2}'

Diyelim ki bu parmak izi 6d: 98: ed: 8c: 07: 07: fe: 57: bb: 19: 12: 89: 5a: c4: bf: 25

Ardından, komut dosyanızın en üstünde, ssh-add -leklemenizi istemeden önce bu anahtarın yüklenip yüklenmediğini kontrol etmek için kullanın :

ssh-add -l |grep -q 6d:98:ed:8c:07:07:fe:57:bb:19:12:89:5a:c4:bf:25 || ssh-add /path/to/special_key

İsterseniz tüm bunları tek bir satıra katlayabilirsiniz:

ssh-add -l |grep -q `ssh-keygen -lf /path/to/special_key  | awk '{print $2}'` || ssh-add /path/to/special_key

Tek astar güzel çalışıyor, teşekkürler!
Darren Cook

1
Bu basitleştirilmiş tek astarı daha anlaşılır ve tercih edilebilir buluyorum, çünkü ssh-keygenanahtar yolunu kullanmaktan kaçınıyor (sonuçta herhangi bir anahtar oluşturmak istemiyorum):ssh-add -l | grep -q 'path/to/key' || ssh-add /path/to/key
ohruunuruus

1
ssh-keygencevapta bir anahtar oluşturmaz - ssh-add -lörneğinizde olduğu gibi aslında hiçbir şey eklemez. Bayraklar, komutların davranışını adla tam olarak eşleşmeyecek şekilde değiştirir. Bu sürümlerin işlevsel olarak farklı olduğuna dikkat edin - yola göre kontrol ve bu yoldaki anahtar değişirse sürümünüz bu sürümü almayacaktır. Yanıttaki sürüm, nereden yüklendiğine bakılmaksızın mevcut anahtarı da algılar.
Richlv

5

Orada sadece kullanarak kontrol için doğrudan bir yoludur ssh-addancak yararlanabilir ssh-keygenve kontrol etmek için bazı komut dosyası.

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi

Yukarıda sonra yazdıracak yesparmak izi dosyası ile temsil eğer /path/to/special_keymevcuttu ssh-add -l'ın çıkış.

Misal

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi
yes

Nereden çıktı içeriği ssh-keygen -lf /path/to/special_keyşöyle görünür:

$ ssh-keygen -lf /path/to/special_key
2048 8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c  dev-servers (RSA)

Ve sadece parmak izini içeren 2. sütunu seçmek için `` awk '{print $ 2}' kullanıyoruz, yani:

8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c

Referanslar


3

ssh-addAçık bir şekilde kullanmak için özel nedenleriniz olabilir , ancak "Anahtarı ilk kez kullandığımda parolamın sorulmasını istiyorum, ancak bundan sonra değil" istiyorsanız, openssh'in daha basit bir çözümü var:

Put AddKeysToAgent yesyour içinde .ssh/configdosyanın.


Teşekkürler. Görünüşe göre ssh 7.2'de eklendi (Ubuntu 18, 7.6 sürümünde gibi görünüyor).
Darren Cook

Evet, "AddKeysToAgent benim opensh sürümü tarafından desteklenmiyor" ssh-add açıkça kullanmak için iyi bir neden ;-)
Nate

0

ssh-add -K FILEMac'te benim için iyi çalıştı.
Hala "Kimlik eklendi:" satırlarını gösteriyor ancak parola istemiyor.

Man sayfasından:

-K Kimlik eklerken, her parola kullanıcının anahtar zincirinde de saklanır. -D ile kimlikleri kaldırırken, her parola ondan kaldırılır.

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.