Ubuntu'da ssh-add ile kalıcı bir özel anahtar nasıl eklenir? [kapalı]


474

SSH üzerinden bir sunucuya erişmek için şifre ile korunan özel bir anahtarım var.

2 linux (ubuntu 10.04) makinem var ve ssh-add komutunun davranışı her ikisinde de farklı.

Bir makinede, "ssh-add .ssh / identity" komutunu kullandığımda ve şifremi girdikten sonra, anahtar kalıcı olarak eklendi, yani bilgisayarı her kapatıp yeniden giriş yaptığımda, anahtar zaten eklenmiş durumda.

Diğerinde, her giriş yaptığımda anahtarı eklemeliyim.

Hatırladığım kadarıyla, her ikisinde de aynı şeyi yaptım. Tek fark, anahtarın kalıcı olarak eklenen anahtarda oluşturulmuş olmasıdır.

Bunu kalıcı olarak diğer makineye nasıl ekleyeceğini bilen var mı?


1
ajan sadece geçici olmalıdır; ancak her iki makineden birinde ~ / .bashrc veya benzeri yerlerde ssh-add komutuna sahip olmanız mümkündür
mirek

Yanıtlar:


632

Çözüm, anahtar dosyaları ~/.ssh/configdosyanıza ekleyerek kalıcı olarak tutulmaya zorlamak olacaktır :

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

~ / .Ssh dizininde bir 'config' dosyanız yoksa, bir tane oluşturmanız gerekir. Kök haklarına ihtiyaç duymaz, bu yüzden basitçe:

nano ~/.ssh/config

... ve gereksinimlerinize göre yukarıdaki satırları girin.

Bunun çalışması için dosyanın chmod 600 olması gerekir chmod 600 ~/.ssh/config. Komutu kullanabilirsiniz .

Bilgisayardaki tüm kullanıcıların anahtarı kullanmasını istiyorsanız, bu satırları /etc/ssh/ssh_configve anahtarı herkesin erişebileceği bir klasöre koyun .

Ayrıca, anahtarı bir ana bilgisayara özgü olarak ayarlamak istiyorsanız, ~ / .ssh / config dosyasında aşağıdakileri yapabilirsiniz:

Host github.com
    User git
    IdentityFile ~/.ssh/githubKey

Öncelikle yanlış kimlikleri denediğiniz için bir sunucunun sizi reddetmediği birçok kimliğiniz olduğunda bunun avantajı vardır. Sadece belirli kimlik denenecek.


82
Yapılandırma dosyasındaki izinler 600 olmalıdır.chmod 600 config
generalopinion

6
Bununla her itme, getirme veya klonlama için şifremi girmem gerekiyor, bundan nasıl kaçınırım?
Asaf

9
Bunun yerine ssh-add ~/.ssh/gitHubKey, anahtar parolanızı hatırlar. Önerdiğim çözüm, sistemi yeniden başlatmalar arasında kalıcı olarak ayarlamaktı.
daminetreg

28
Bu cevap o kadar iyi ki ssh-add mevcut olmamalı. Kim bir yapılandırma dosyasını kalıcı olarak düzenleyebildiğinizde "geçici olarak" bir sorunu düzelten ve beklenmedik şekilde kesen bir komut almak ister.
RussellStewart

2
Sorun bu tür bir yapılandırmadadır, belirli bir Ana Bilgisayar için .ssh / config içinde yapmazsanız, tüm anahtarların her seferinde tüm sunucuya karşı denenmesini sağlarsınız.
daminetreg

118

Bu benim için Mac OS X Lion altında aynı soruyu cevaplamadı. Sonunda ekledim:

ssh-add ~/.ssh/id_rsa &>/dev/null

Benim .zshrc (ama .profile de iyi olurdu), ki bu düzeltilmiş gibi görünüyor.

(Burada önerildiği gibi: http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )


6
Ssh-add, korumalı bir özel anahtarın parolasını hatırlayabilen bir kimlik doğrulama aracı kullandığından, önerdiğim çözümden daha iyi olduğunu düşünüyorum, böylece her kimlik doğrulaması yapmaya çalıştığınızda yazmanız gerekmez. Önerdiğiniz çözümün bir başka avantajı, çok fazla anahtarınız varsa, ssh istemcisinin bağlanmaya çalıştığınız sunucu için alakasız anahtarlar önermemesidir, aslında sadece bu sunucu için olan anahtarları sağlayacaktır ve ' t ssh / config dosyasında listelenen tüm anahtarları denerken sunucunun MaxAuthTries'e erişilmesi nedeniyle bağlantıyı reddetmesine neden olun.
daminetreg

1
Teşekkürler @daminetreg. Özel sorunum, özel anahtarımı ona aktarmadan bir geliştirme makinesinde gitoza erişmeye ihtiyaç duymaktı. Bu çözüm ( ForwardAgent yesbenim eklemekle birlikte .ssh/config) bu sorunu fevkalade çözdü. Anlaşıldığı ssh-add &>/dev/nullgibi, varsayılan davranışı klasörünüzde ssh-addbulduğu anahtarları eklemek gibi görünebilir .ssh.
Aaron

1
Anladığım kadarıyla Mac OS'de bir -K anahtarı var: stackoverflow.com/questions/1909651/…
Nicu Tofan

3
@TNick -K, OS X GUI'lerinin yabancı sunuculara kimlik doğrulaması yapmak için kullandığı OS X'in anahtar zincirine anahtarlar ekler. Bu Q'daki poster bir SSH Tüneli üzerinden bağlanıyor, ancak yine de yalnızca uzak bir sunucuya bağlanıyor. A - [SSH Tüneli] -> B İçinde bulunduğum durum uzak bir sunucudayım ancak kimlik doğrulamasının ev sistemimdeki kimlik bilgilerine karşı olmasını istiyorum. A <- [Auth] - B - [Connect] -> C Yani -Kaslında yardımcı olmuyor, ancak diğer Q için harika bir çözüm.
Aaron

112

Bu sorunu Mac OSX'te (10.10) ssh-add için -K seçeneğini kullanarak çözdüm:

ssh-add -K ~/.ssh/your_private_key

MacOS 10.12 ve sonraki sürümler için ssh yapılandırmanızı burada açıklandığı gibi düzenlemeniz gerekir: https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain


3
bu kalıcı olarak ayarlamak isteyen insanlar için daha iyi bir cevaptır
punkrockpolly

12
Bu yüzden bu bit: "Mac OSX (10.10) üzerinde" ...
Andrew K.

1
Bu iyi ve Mac OSX üzerinde çalışıyor, ancak Ubuntu üzerinde çalışmıyor (testimde 14.04).
haxpor

5
Bu benim için çalışmadı (OSX 10.12.4'te)
guptron

2
man ssh-addMacOS High Sierra'ya göre ssh-add -K, parolayı anahtarlığa kaydedecek ve yeniden başlattıktan sonra ssh-add -A, parolanızı girmenize gerek olmayan sadece kullanın .
DawnSong

36

Ubuntu Hızlı İpuçları bölümünde belirtildiği gibi anahtarlığı eklemeniz yeterlidir https://help.ubuntu.com/community/QuickTips

Ne

Ssh-agent ve ssh-add'i sürekli başlatmak yerine, ssh anahtarlarınızı yönetmek için anahtarlık kullanmak mümkündür. Anahtarlık takmak için sadece buraya tıklayabilir veya işi yapmak veya komut satırından apt-get yapmak için Synaptic'i kullanabilirsiniz.

Komut satırı

Dosyayı kurmanın başka bir yolu terminali (Uygulama-> Aksesuarlar-> Terminal) açmak ve aşağıdakileri yazmaktır:

sudo apt-get install keychain

Dosya düzenle

Daha sonra $ {HOME} /. Bashrc veya /etc/bash.bashrc dosyanıza aşağıdaki satırları eklemelisiniz:

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh

İkinci komut meraktan tam olarak ne yapıyor? bu sadece geçerli kullanıcının izinlerini açar?
Vincent Buscarello

1
Bu .bir takma adsource
Brad Solomon

18

@ Aaron'un çözümünü denedim ve benim için pek işe yaramadı, çünkü terminalimde yeni bir sekme açtığımda anahtarlarımı tekrar ekleyeceğim. Bu yüzden biraz değiştirdim (anahtarlarımın çoğunun da parola korumalı olduğunu unutmayın, bu yüzden çıktıyı / dev / null'a gönderemiyorum):

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi

Bunun yaptığı, ssh-add -lbelirli bir anahtarın (eklenen tüm anahtarları listeleyen) çıktısını kontrol etmesidir ve bulamazsa,ssh-add .

Şimdi terminalimi ilk açtığımda özel anahtarlarımın şifreleri isteniyor ve bilgisayarımı yeniden başlatana kadar (veya oturumu kapatmadım) tekrar sorulmuyor.

Bir sürü anahtarım olduğundan ssh-add -l, performansı artırmak için çıktısını bir değişkente saklıyorum (en azından performansı geliştirdiğini tahmin ediyorum :))

PS: Linux'tayım ve bu kod dosyama gitti ~/.bashrc- Mac OS X kullanıyorsanız, o zaman .zshrcveya.profile

EDIT: @Aaron tarafından yorumlarda belirtildiği gibi, .zshrcdosya zshkabuktan kullanılır - bu yüzden bunu kullanmıyorsanız (emin değilseniz, büyük olasılıkla, bashbunun yerine kullanıyorsunuz ), bu kod .bashrcdosyanıza gidin .


3
.zshrciçin zshyerine kullanımı kabuk bash. Eğer kullanıyorsanız bashMac OS X (varsayılan), olurdu .bashrcda orada.
Aaron

1
Sonra ssh-add -ldönüş kodu echo $?anahtar eklemek veya eklemek için karar vermek için kullanılabilir. Im benim linux makine bash ile, ssh-add -lanahtar dosya adı çıktı olmaz. Dönüş kodu her zaman çalışır.
Bharat G

12

Benim durumumda çözüm şuydu:

Yapılandırma dosyasındaki izinler 600 olmalıdır. chmod 600 config

Yukarıdaki yorumlarda belirtildiği gibi generalopinion tarafından

Yapılandırma dosyasının içeriğine dokunmanıza gerek yoktur.


Linux Mint 17.1'de benim için yeterli değildi.
Benares

600'ün mantıklı olduğunu düşünmüyorum. man ssh , ~/.ssh/configdosyanın kullanıcı için okuma / yazma olduğunu ve başkaları tarafından yazılamayacağını söyler .
DawnSong

600 sadece kullanıcı için okuma ve yazma
Enthusiasmus

6

Ubuntu 16.04'te de aynı sorunu yaşadım: bazı anahtarlar kalıcı olarak eklendi, diğerleri ssh-addiçin her oturumda yürütmek zorunda kaldım . Kalıcı olarak eklenen anahtarların hem özel hem de genel anahtarın bulunduğunu ~/.sshve her oturumda unutulan anahtarların yalnızca özel anahtarlar olduğunu ~/.sshöğrendim. Bu nedenle çözüm basit: Yürütmeden önce hem özel hem de genel anahtarı kopyalamanız gerekir .~/.sshssh-add

Not: Gnome wiki'den anladığım kadarıyla yöntemim, Gnome Masaüstü Ortamının bir parçası olan gnome-keyring aracı sayesinde çalışıyor. Bu nedenle yöntemim muhtemelen yalnızca Gnome veya Gnome tabanlı DE kullanıyorsanız çalışmalıdır.


1
Yetersiz cevap. Bu, iki saat aradıktan sonra ek komut dosyalarına veya paketlere ihtiyaç duymadan sorunumu çözdü.
etagenklo

Flarkin muhteşem! Büyük dedektiflik işi. Bunu çözeceğimi sanmıyorum.
nicorellius

4

"~ / .Bashrc" içine aşağıdaki satırları eklemek sorunu benim için çözdü. Ubuntu 14.04 masaüstünü kullanıyorum.

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"

3

Ubuntu 14.04'te (belki daha erken, belki de hala) konsola bile ihtiyacınız yoktur:

  • seahorse"anahtar" için arama yaptığınız şeyi başlatın veya başlatın
  • orada bir SSH anahtarı oluşturun (veya bir tane içe aktarın)
    • parolayı boş bırakmaya gerek yok
    • ortak anahtarı bir sunucuya (veya daha fazlasına) bile göndermeniz önerilir
  • sonunda bir ssh-agent çalışıyor ve bu anahtar yüklendi, ancak kilitlendi
  • kullanıldığında sshkimlik (yani anahtar) aracı aracılığıyla alınacaktır
  • oturum sırasında ilk kullanımda parola kontrol edilir
    • ve girişte anahtarın kilidini otomatik olarak açma seçeneğiniz vardır
    • Bu, oturum açma yetkisinin anahtarın parolasını kaydırmak için kullanılacağı anlamına gelir
  • not: senin çağırmak kimliğinizi (yani ajan yönlendirme) iletmek istiyorsanız sshile -Aveya varsayılan yap o
    • Aksi takdirde daha sonra üçüncü bir makinede oturum açtığınız bir makinede bu anahtarla kimlik doğrulaması yapamazsınız

3

Ubuntu'yu iki id_rsa anahtarı kullanarak çalıştırıyorum. (bir kişisel çalışma için). ssh-add bir anahtarı (kişisel) hatırlar ve şirketi her seferinde unutur.

Kişisel anahtarımı gördüğüm ikisi arasındaki farkı kontrol ederken 400 hak, şirkette 600 hak vardı. (u + w vardı). Kullanıcı yazımını doğrudan şirket anahtarından kaldırmak (uw veya 400'e ayarlanmış) sorunumu düzeltti. ssh-add artık her iki anahtarı da hatırlıyor.



1

çok basit ^ _ ^ iki adım

1.yum anahtarlık yüklemek

2. .bash_profile dosyasının altına kod ekleyin

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh

12
Ubuntu Yum aptal yok;)
Adam F

1

Balık kabuğu kullananlar için aşağıdaki işlevi kullanabilir ve daha sonra ~/.config/fish/config.fishayrı bir yapılandırma dosyasında veya içinde çağrılabilir ~/.config/fish/conf.d/loadsshkeys.fish. O ile başlayan tüm anahtarları yükleyecektir id_rsa içine ssh-agent.

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

Eğer sahip olmak istiyorsanız ssh-agentsize kullanabilirsiniz bir terminal açtığınızda otomatik başlatılan tuvistavie / balık-ssh-agent bunu yapmak için.

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.