AgentForwarding kullanımdayken ssh_config dosyasındaki IdentityFile yönergesini kullanma


15

.Ssh / config içindeki IdentityFile yönergesini kullanarak iletilen anahtarları belirtmek mümkün mü?

Üretim sunucumuzda Capistrano / GIT aracılığıyla bazı kodları dağıtmaya çalışırken bu tuhaflıkla karşılaştım. Hem kişisel hem de iş GIT anahtarlarım her zaman SSH aracıma yüklenir ve böylece kişisel anahtarım ilk önce aracıya eklenir. Capistrano ile konuşlandırırken ajan iletmeyi kullanıyorum, böylece ana bilgisayar `git çekme 'işlemini doğrulamaya çalıştığında aşağıdaki hata ile başarısız oldu:

HATA: "Bazılarına" izin verilmesi, "kullanıcınıza" reddedildi.

çünkü uygun anahtarı (ssh aracısında daha sonra geldi) denemeden önce kişisel git anahtarımı kullanarak kimlik doğrulaması yapmaya çalıştı ve erişim iznim olmayan yabancı bir repoya eriştiğimi varsaydım. Potansiyel olarak sadece kişisel işime her çalışma deposuna erişebilirim, ancak yerel makinemde .ssh / config içindeki özel etki alanlarını tanımlayarak bu sorunu çözebilirim:

Ana bilgisayar personal.github.com
Ana bilgisayar adı github.com
Kullanıcı git
IdentityFile ~ / .ssh / some_key

Ana bilgisayar work.github.com
Ana bilgisayar adı github.com
Kullanıcı git
IdentityFile ~ / .ssh / some_other_key

ve bu şekilde git asla karışmaz. Üretim kodlarımda iletilen anahtarlar için .ssh / config kuralları oluşturmak mümkün mü, böylece her zaman yeni kodu çekerken hangi anahtarı kullanacaklarını biliyorlar mı? Temelde yapmak istiyorum:

Ana bilgisayar work.github.com
Ana bilgisayar adı github.com
Kullanıcı git
IdentityFile some_forwarded_key

Teşekkürler!

Yanıtlar:


22

Yönlendirilen aracıdan hangi özel anahtarı kullanmak istediğinizi belirtmek için bir anahtarın genel bölümünü kullanabilirsiniz. Bu, herhangi bir “ara” makinede (yerel ssh aracısını yönlendirdiğiniz makineler) fazladan bir dosya (anahtarın genel kısmı) oluşturmayı gerektirir .

  1. Ara makinenin, istenen anahtarın ortak kısmının bir kopyasının uygun bir yerde olmasını sağlayın (örn. ~/.ssh/some_other_key.pub).

    Anahtarın herkese açık kısmı zaten olan herhangi bir makineden:

    scp some_other_key.pub intermediate:.ssh/
    

    veya ara makinede:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    Anahtarın kaynağını / sahibini / amacını daha iyi tanımlamak (veya aynısını saklamaya çalışmak) için genel anahtarın sondaki “yorum” kısmını düzenlemek isteyebilirsiniz.

  2. Yukarıdaki ortak anahtar dosyasının yol adını -iveya ile kullanın IdentityFile.

  3. Ayrıca ssh'ın yönlendirilen aracıdan ek kimlikler sunmaya çalışmasını engellemek için IdentitiesOnly yes(içinde .ssh/configveya içinde -o) kullanmanız gerekebilir .


Bu benim için 10 çözümden daha işe yarayan tek şey.
Tracy Fu

1
Bununla oynarken, ara makinede ~ / .ssh / id_rsa.pub içinde kullanmak istediğiniz özel anahtarla ilişkilendirilmiş ortak anahtarı koyarsanız, varsayılan olarak kullanılacağını, ~ / .ssh / yapılandırma.
bschlueter

Chris ve bschlueter teşekkürler! Şimdi bağlanmak: ssh someserver -t "ssh-add -L | grep something_unique> ~ / .ssh / id_rsa.pub; cd bazı / diğer / klasör; bash --login"
blablabla

Bunu ssh -v -T ...sunucu ile denediğimde ortak anahtarı kabul eder, ancak ssh diyor No such identity: /home/name/.ssh/id_rsa: No such file or directoryve daha sonra kimlik doğrulaması başarısız oluyor. Tüm yapılandırmalarımda ForwardAgent etkin. Sorun ne olabilir?
Lars Nyström
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.