ssh-ajanının amacı nedir?


70

Resmi tanımı okudum:

ssh-agent, genel anahtar kimlik doğrulaması için kullanılan özel anahtarları tutan bir programdır (RSA, DSA, ECDSA). Buradaki fikir, ssh-agent'ın X oturumunun veya bir oturum açma oturumunun başlangıcında başlatıldığı ve diğer tüm pencerelerin veya programların ssh-agent programına istemci olarak başlatıldığıdır. Ortam değişkenlerini kullanarak aracı, ssh (1) kullanarak diğer makinelere giriş yaparken doğrulama için yerleştirilebilir ve otomatik olarak kullanılabilir.

"..a özel anahtarları tutmaya yönelik bir program .." - IMHO - ssh anahtarları kullanıcı tarafından ssh-keygen komutuyla üretilir ve ~ / .ssh dosyasında basitçe basittir. Zaten onları tam olarak nasıl tutar - sadece .ssh'de saklanmazlar mı?

"ssh-agent programın müşterileri olarak başlatıldı" - anlamıyorum. Buna nereden ihtiyaç duyulur? Genellikle sadece bu şekilde ssh kullanın:

 ssh -i ~/.ssh/private_key_name username@hostname

El ile tam olarak ne anlama geliyor "istemciler" - ne istemciler? Sadece ssh komutunu terminalden bağlanmaya çalıştırmıyor musunuz - başka istemciler var ve neden sadece ssh komutu gibi o ssh özel dosyasının yolunu kullanamıyorlar?

Yanıtlar:


75

SSH temsilcisi, sizin için kimlik doğrulama verilerinin imzalanmasını işler. Bir sunucunun kimliğini doğrularken, siz olduğunuzu kanıtlamak için özel anahtarınızı kullanarak bazı verileri imzalamanız gerekir.

Bir güvenlik önlemi olarak, çoğu kişi özel anahtarlarını bir parola ile duyarlı bir şekilde korur, bu nedenle herhangi bir kimlik doğrulama girişimi bu parolayı girmenizi gerektirir. Bu istenmeyen bir durum olabilir, bu yüzden ssh aracısı anahtarı sizin için önbelleğe alır ve aracının şifresini çözmek istediğinde şifreyi yalnızca bir kez girmeniz gerekir (ve ssh aracısının pam ile tümleştirilebilmesi nedeniyle genellikle hangi dağıtımların yaptığı).

SSH temsilcisi bu anahtarları hiçbir zaman istemci programlarına vermez, ancak yalnızca müşterilerin bu verileri gönderebileceği ve üzerinde imzalı verilerle yanıt verebileceği bir soket sunar. Bunun bir yararı, özel anahtarınızı tamamen güvenmediğiniz programlarla bile kullanabilmenizdir.

SSH ajanının bir diğer avantajı, SSH üzerinden iletilebilmesidir. Böylece, A sunucusuna ssh gönderirken, aracınızı iletirken, A sunucusunda anahtarınızın var olmasına (şifrelenmiş formda bile) ihtiyaç duymadan, A'dan başka bir ana B'ye ssh yapabilirsiniz.


10
Bunun en eksiksiz cevap olduğunu düşünüyorum, ancak hala bir nokta eksik. Bir anahtar aracının kullanılması, birden çok anahtarın kolayca kullanılmasına da izin verir. Anahtarın yolunu belirtmek yerine, bir anahtar aracı kullanırken ssh içindeki her anahtarı deneyecektir.
Patrick

3
@Patrick dezavantajı da olabilir - bir sunucuda çok fazla geçersiz anahtar deneyin ve geçerli anahtara ulaşmadan bağlantıyı sonlandırın. Tabii ki, o da ne ~/.ssh/configs' IdentityFileseçeneği ile veya ajan olmadan, iyi gelir
Tobias Kienzler

Bir ajanı olmadan eşit derecede mümkün görünüyor @Patrick
Andrey Fedorov

@AndreyFedorov Evet, aracı olmadan birden fazla anahtara sahip olabilirsiniz, ancak ~/.ssh/confighangi anahtara hangi anahtarın kullanılacağını da belirleyebilirsiniz , böylece tam olarak hangisine ihtiyaç duyduğunu bilir.
Patrick

3
ssh-agentÖzel bir anahtarın bir parola ile korunmadığı durumlarda bunun gerekli olmadığını varsayabiliriz.
pkaramol

16

Bunun yararı ssh-agent, parolanızı yalnızca bir kez girmeniz gerekmesidir. Özel RSA anahtarınız bir parola ile şifrelenmemişse, ssh-agent gerekli değildir. Bu sshkomut bir müşterinin bir örneği olabilir.


7

sshHer biri kendi anahtarı ve parolasıyla çeşitli farklı makinelere düzenli olarak ssh-agentgiriyorsanız , çalıştırma işlemi, oturumunuzun başlangıcında her bir anahtar için parola 1'i bir kez girmenize olanak tanır ve ardından her makineye defalarca kimlik doğrulaması yapabilirsiniz. Parolanızı tekrar girmek zorunda kalmadan istediğiniz gibi.

Diğer bir avantaj, mansayfaya göre, aracının talep kanalı üzerinden hiçbir zaman özel bir anahtar göndermemesidir; farklı kutular arasında atlıyorsanız, özel anahtarlarınız korunur.

1life Tuşların ajandada tutulacağı zamanı ayarlayabilirsiniz .


6

Wikipedia makalesi muhtemelen en iyi açıklamaya sahiptir:

Sunucuya yapılan doğrulama, sorgulama yanıt kimlik doğrulamasına dayanır. ssh sunucuya bir kullanıcı adı ve bir anahtar isteği ile bağlanır. Ssh arka plan programı isteği alır ve kimlik doğrulama dosyasında depolanan ortak anahtara dayanarak bir meydan okuma gönderir. ssh, bir anahtar yanıtı oluşturmak için özel anahtarı kullanır ve bağlantının diğer ucunda bulunan bekleyen sshd'ye gönderir. Özel anahtarı kendisi göndermez. Ssh arka plan programı, önemli yanıtı doğrular ve eğer geçerliyse, sisteme erişim izni verir. ssh-agent bunu, SSH bağlantılarını dinleyen bir soket oluşturarak kolaylaştırır. Kullanıcı basitçe ssh-agent'ı başlatır, tuşlarını nasıl bulacağını söyler (varsayılan konumda değilse), kullanılacak her anahtarın parolasını tek seferde girer,

Yine wikipedia makalesinden sözlü olarak:

... ssh-agent bir soket oluşturur ve ardından bağlantıları ssh'den kontrol eder. Bu sokete bağlanabilecek herkesin de ssh-agent'a erişimi vardır. İzinler normal bir Linux veya Unix sisteminde olduğu gibi ayarlanır. Aracı başladığında, / tmp içinde kısıtlayıcı izinlere sahip yeni bir dizin oluşturur. Soket klasörde bulunur.

Tipik olarak bir sistem veya kullanıcının rc dosyaları birinde soktu gibi $HOME/.bashrcya $HOME/.profile(bash kabuklar için) ortam değişkenleri böylece ssh-agenttamamen çevreye dahil olsun ayarlayın.

Fedora 14 sistemimde, X11 alt sisteminin bir parçası olarak oldukça erken başladı. Bu dosyada /etc/X11/xinit/xinitrc-common:

# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
    if [ "x$TMPDIR" != "x" ]; then
        SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
    else
        SSH_AGENT="/usr/bin/ssh-agent"
  fi
fi

Değişken $SSH_AGENTdaha sonra, buradaki gibi diğer X11 başlangıç ​​komut dosyalarında kullanılır /etc/X11/xinit/Xclients:

exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"

Buraya dahil edilerek, aşağıdaki ortam değişkenleri bir ana kabuğun parçası olarak ayarlanmaktadır, bu nedenle tüm çatallı çocukların da bunlara sahip olması gerekir, örneğin:

SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;

Bunun biraz daha fazla karmaşıklığı var ama kısaca, temelde olan şey bu ssh-agent.

Örneğin GNOME'da, ssh-agentaslında kullanıcı başına bir başlangıç ​​uygulaması olarak başlatılır:

                     başlangıç ​​uygulamaları ss

TL; DR

Alt satırda, ssh-agentssh anahtarlarınız gerektiğinde parolalarıyla (bir taneleri olduğunu varsayarsak) yalnızca bir kez açmanız gerekecek ve ondan sonra bellekteki şifresi çözülmüş formda (RAM) kullanmanız gerekecek.


1

"ssh-agent programına istemciler olarak başlatılır" Tüm programlar ortam değişkenleri olsun böylece ssh-agent (yerel) Giriş oturumu başlatma işlemi sırasında başlatılan fikrine atıfta $SSH_AGENT_PIDve $SSH_AUTH_SOCKajan bağlamak için gerekli olan.

Özel anahtar işlemeyi ssh'den çıkarmanın bir başka avantajı, ssh-ajanının gpg-agent ile değiştirilebilmesidir. Böylece SSH için OpenPGP anahtarlarını (kimlik doğrulama özelliği ile) kullanabilirsiniz. Akıllı karttaki OpenPGP anahtarları için güzel bir çözü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.