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_profile
otomatik olarak başlatır ssh-agent
ve 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-agent
oturum 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_agent
Oturumu 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-ident
ssh-agent
sizin 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-ident
yü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
keychain
ssh-agent
sizin adınıza yöneten ssh-agent
ve oturum açma oturumu sona erdiğinde çalışmaya devam etmesini sağlayan küçük bir yardımcı programdır . Sonraki girişlerde, keychain
mevcut 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-agent
eş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 keychain
yü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-ident
ve keychain
daha kötü ssh-agent
belirli 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 --clear
kendi ~/.bash_profile
anahtarlık çağrısına seçenek ekler . Bu parolaları yaparak giriş yaparken yukarıdaki gibi tekrar girilmelidir, ancak cron
kullanı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-add
bir 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 expect
otomatik 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, expect
parolayı 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.