Bu, güvenlik ve rahatlık arasındaki değişimin tipik bir örneğidir. Neyse ki çeşitli seçenekler var. En uygun çözüm kullanım senaryosuna ve istenen güvenlik seviyesine bağlıdır.
şifre ile ssh-key, hayır ssh-agent
Anahtarın kimlik doğrulaması için her kullanıldığında parolanın şimdi girilmesi gerekir. Güvenlik açısından en iyi seçenek bu olsa da, en kötü kullanılabilirliği sunar. Bu aynı zamanda sırayla girmenin yükünü azaltmak için sırayla seçilen zayıf bir parolaya yol açabilir.
ile parola içeren ssh-key ssh-agent
Aşağıdakini eklemek, oturum açma sırasında ssh anahtarlarını / anahtarlarını ~/.bash_profileotomatik olarak başlatır ssh-agentve yükler:
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
Şimdi her girişe şifre girilmelidir. Kullanılabilirlik açısından biraz daha iyi olsa da, bu ssh-agentoturum açma oturumu sırasında anahtarın kullanılıp kullanılmamasına bakılmaksızın parolayı isteyen dezavantajı vardır . Her yeni oturum açma, ayrıca ssh-agent, açıkça öldürülmediği sürece, oturumu kapattıktan sonra bile bellekte eklenmiş tuşlarla çalışmaya devam eden ayrı bir örnek oluşturur.
ssh_agentOturumu kapattıktan sonra öldürmek için aşağıdakini ekleyin.~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
veya aşağıdakilere ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
Collin Anderson'ın cevabındassh-agent olduğu gibi, dosya sisteminde sabit bir yerde aracıya kalıcı bir iletişim soketi oluşturarak birden fazla örnek oluşturmaktan kaçınılabilir . Bu, birden fazla aracı örneği üretme konusundaki bir gelişmedir, ancak şifresi çözülen anahtarın açıkça öldürülmediği sürece, oturum kapattıktan sonra hala bellekte kalır.
Masaüstlerinde, Gnome Keyring SSH Agent gibi masaüstü ortamına dahil olan ssh aracıları, genellikle bir oturum açma oturumu sırasında ilk kez ssh-anahtarını kullandığınızda parola istemek için yapılabileceklerinden daha iyi bir yaklaşım olabilir. şifresi çözülmüş özel anahtarı oturumun sonuna kadar hafızada saklayın.
ile parola içeren ssh-key ssh-ident
ssh-identssh-agentsizin adınıza yönetebilen ve gerektiğinde kimlikleri yükleyebilen bir yardımcı programdır . Bir erişim gerektiren kaç terminal, ssh veya oturum açma oturumuna bakılmaksızın, gerektiğinde yalnızca bir kez anahtar ekler ssh-agent. Ayrıca bağlı olan ana bilgisayara veya ssh dizinine bağlı olarak farklı bir aracı ve farklı anahtarlar ekleyebilir ve kullanabilir. Bu, farklı konaklarla ajan iletimi kullanırken anahtarların izole edilmesini sağlar. Ayrıca GitHub gibi sitelerde birden fazla hesap kullanılmasına izin verir.
Etkinleştirmek için ssh-identyükleyin ve aşağıdaki takma adları bilgisayarınıza ekleyin ~/bash_profile:
alias ssh='/path/to/ssh-ident'
ile parola içeren ssh-key keychain
keychainssh-agentsizin adınıza yöneten ssh-agentve oturum açma oturumu sona erdiğinde çalışmaya devam etmesini sağlayan küçük bir yardımcı programdır . Sonraki girişlerde, keychainmevcut ssh-agentörneğe bağlanacaktır . Uygulamada bu, parolanın yalnızca yeniden başlatmanın ardından ilk giriş sırasında girilmesi gerektiği anlamına gelir. Sonraki oturum açmalarda, varolan ssh-agenteşgörünümden şifrelenmemiş anahtar kullanılır. Bu, cronşifresiz ssh tuşları olmadan işlerde şifresiz RSA / DSA kimlik doğrulamasına izin vermek için de yararlı olabilir .
Etkinleştirmek için keychainyükleyin ve aşağıdakine benzer bir şey ekleyin ~/.bash_profile:
eval `keychain --agents ssh --eval id_rsa`
Görüş güvenlik açısından, ssh-identve keychaindaha kötü ssh-agentbelirli bir oturum ömrü ile sınırlı durumlarda, ancak kolaylık yüksek düzeyde sunuyoruz. Güvenliğini artırmak için keychain, bazı insanlar --clearkendi ~/.bash_profileanahtarlık çağrısına seçenek ekler . Bu parolaları yaparak giriş yaparken yukarıdaki gibi tekrar girilmelidir, ancak cronkullanıcı oturumu kapattıktan sonra işler hala şifrelenmemiş anahtarlara erişebilir. keychain Wiki sayfası daha fazla bilgi ve örnekler vardır.
parola olmadan ssh-key
Bir güvenlik açısından, bu en kötü seçenektir, çünkü özel anahtar, maruz kalması durumunda tamamen korunmaz. Bununla birlikte, parolanın bir yeniden başlatma işleminden sonra tekrar girilmesine gerek olmadığından emin olmanın tek yolu budur.
parola içeren ssh-key, ile ssh-agent , parolayı komut dosyasından geçenssh-add
Parolayı ssh-addbir komut dosyasından geçirmek basit bir fikir gibi görünse de , örneğin echo "passphrase\n" | ssh-add, ssh-add parolayı nereden okuduğunustdin/dev/tty göründüğü kadar düz değil , doğrudan okumak için açılır .
Bu edilebilir çalıştı ile expectotomatik etkileşimli uygulamalar için bir araç. Aşağıda, komut dosyasında depolanan bir parolayı kullanarak bir ssh anahtarı ekleyen bir komut dosyası örneği verilmiştir:
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
Parolanın komut dosyasında düz metin olarak depolandığından, güvenlik açısından, parola içermeyen bir ssh anahtarına sahip olmaktan çok daha iyi olduğunu unutmayın. Bu yaklaşım kullanılacaksa, expectparolayı içeren betiğin kendisine ayarlanmış uygun izinlere sahip olduğundan emin olmak önemlidir ; bu, yalnızca anahtar sahibi tarafından okunabilir, yazılabilir ve çalıştırılabilir olmasını sağlar.