Soru Ssh-agent identititesinin bir alt kümesine erişimi yönlendirmek


İki şirket için çalışıyorum (onlara RedCorp ve BlueCorp diyelim). İkisi de bana güveniyorlar ama birbirlerine güvenmiyorlar ve ben eith'in sırlarını diğerine ifşa etmek istemiyorum.

Dizüstü bilgisayarımın ssh-agent'ında her şirkete erişim için iki tane özel anahtar bulunur. Koşabilirim:

ssh -A redcorp-server1

ve tüm redcorp'un diğer sunucularına oradan yönlendirilmiş ajan bağlantım sayesinde erişebilirsiniz.

Aynı şekilde, ben de koşabilirim:

ssh -A bluecorp-server1

ve bluecorp'un diğer sunucularının hepsine buradan erişin.

Sorun şu ki, redcorp-server1'de oturum açtığımda, root kullanıcısı onun $ SSH_AUTH_SOCK'unu iletilen ajan bağlantımı gösterecek şekilde ayarlayabilir ve BlueCorp’a kırılmak için diğer kimliğimi kötüye kullanabilir.

Bunu nasıl önleyebilirim?

ssh'in IdentitiesOnly seçeneği istediğimi yapmaz. Bu sadece redcorp-server1 için doğrulama yaparken sunduğum anahtarı kontrol eder; iletilen ajan bağlantımın redcorp-server1 üzerinde bir ssh işleminin kimliklerimin herhangi birini kullanarak kimlik doğrulamasına izin vermesi gerçeğini değiştirmez.

Bulduğum tek çözüm, iki ayrı ssh aracısını çalıştırmak ve her birine yalnızca bir anahtar yüklemek. Ancak bu büyük bir acıdır: Bir ssh_config stanza'nın belirli bir ana bilgisayara bağlanırken hangi ajanlarımın kullanacağımı belirtmesi için bir yol yoktur. Bunun yerine, dizüstü bilgisayarımda, her bir kolda, SSH_AUTH_SOCK'u ssh komutunu çalıştırmadan önce doğru aracıya yönlendiren kabuk takma adları yapmak zorunda kaldım. Ayrıca, ssh'i bir aktarım olarak kullanan rsync ve bir düzine başka araç kullanıyorum ve bunların her birini, ssh'i bu özel şekilde çağırmak için farklı bir sözdizimi kullanarak yapılandırılması gerekiyor.

Bunu yapmanın daha iyi bir yolu var mı?


6
2018-03-19 00:54


Menşei


Bu işlevselliğin mevcut olduğunu düşünmüyorum. SSH aracısı isteklerini filtreleyen bir proxy aracı yazmak harika bir fikir olacaktır, böylece bu proxy altındaki oturumlar yalnızca bir anahtar alt kümesini görebilirdi. Muhtemelen bir önek olarak kullanılmak üzere yapılmış olabilir ssh komut satırı gibi ssh-agent-filter -i allow_this_fingerprint ssh rest-of-command-line - Celada
ForwardAgent'ı bağlantılarınızda kullanmanız mümkün mü? - Jenny D
Bu çok az görüş ve oy sahip olduğu biraz iç karartıcı. İnsanlar çoğunlukla sorunun farkında değiller. - mc0e


Cevaplar:


Uygulandım SSH-madde filtre kendim için kullan:

$ afssh -c id_bluecorp -- server1.bluecorp.com
$ afssh -c id_bluecorp -- server2.bluecorp.com
$ afssh -c id_redcorp -- server42.redcorp.com

Bu zaten Debian'da (ve Ubuntu).


6
2018-01-17 15:57



Faydalı bir araç gibi geliyor. Bunu daha da kullanışlı hale getirecek birkaç özellik düşünebilirim. 1. Filtreden bir anahtar eklemek için destek. 2. Sadece o sunucuya kimlik doğrulamak için kullandığım anahtarı iletmeden bir sunucuya kimlik doğrulamak için bir anahtar kullanma desteği. 3. Filtrenin imza isteyebileceği birden fazla aracı belirtmek için destek. (Üçüncü olsa da ayrı bir araç olarak daha uygun olabilir.) - kasperd
@kasperd 1 .: bir sorun olarak eklendi 2: Ssh'e aracı sormadan bir anahtar kullanmasını veya onaylanan ilk bağlantı için gereken anahtarı eklemesini söyleyebilirsiniz. Ajan için, yerel ssh işleminden geldiği için yerel olarak gönderilen isteklerden ayrı olarak söylemek mümkün değildir. - Timo Weingärtner
Şifrelenmemiş bir dosyada gizli anahtar olsaydı, ssh istemcisinin bir dosyadaki anahtarı bulmasını söylerdim. Ancak ssh-agent'ı kullanmamın temel sebebi, şifreli bir dosyada anahtarın olmaması. Sorduğum özelliklerden birinin ssh-agent-filter yerine ssh istemcisine bir değişiklik yapılmasını gerektirdiğini anlıyorum. Ssh istemcisi kimlik doğrulaması için kullanılacak aracı bulmak için iki farklı ortam değişkenini okuyabiliyorsa ve yönlendirme için kullanılacak aracı ise, bu mümkün olmalıdır. - kasperd


Tarafından belirtilen ssh-aracını iletecek openssh için bir yama var. SSH_AUTH_SOCK_FORWARD uzak ana bilgisayara ortam değişkeni ve her zamanki gibi SSH_AUTH_SOCK env. var. ana bilgisayara kimlik doğrulama için aracı.

Bu, uzak makinede kullanmak istediğiniz anahtarı filtrelemek ve env'yi değiştirmek için ssh-agent filtresini kullanabileceğiniz anlamına gelir. ssh-agent filtresinden var SSH_AUTH_SOCK_FORWARD tüm anahtarlarınızı SSH_AUTH_SOCK ajan.

Yamayı burada bulabilirsiniz:

https://bugzilla.mindrot.org/show_bug.cgi?id=1937

Umarım openssh'e uygulanır.


1
2017-11-24 13:59





Problemi anlamadım. $ SSH_AUTH_SOCK değerini uygun değere ayarlar ve verirseniz, ssh çağrısı yapan programlarda herhangi bir değişiklik yapılması gerekmez. Tabi ki, örn. bir rsync çağrısı, ssh-aracısının seçimi ile uyumlu olmalıdır.


-2
2018-03-20 03:21



Eğer problemi çözmüyorsanız, belki de bunun hakkında yorum yapın, ancak bunu bir cevap olarak ileri sürmeyin. OP'nin dediği gibi, aracı bir ssh_config stanza'dan seçemezsiniz. - mc0e