Sözdizimi
ssh-add [-CcDdKkLlNqvXx] [-E fingerprint_hash] [-H hostkey_file] [-h destination_constraint]
[-S provider] [-t life] [file ...]
ssh-add -s pkcs11 [-Cv] [certificate ...]
ssh-add -e pkcs11
ssh-add -T pubkey ...
Açıklama
ssh-add, özel anahtar kimliklerini kimlik doğrulama aracısı ssh-agent(1)'a ekler. Herhangi bir argüman olmadan çalıştırıldığında, ~/.ssh/id_rsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ecdsa_sk, ~/.ssh/id_ed25519 ve ~/.ssh/id_ed25519_sk dosyalarını ekler. Bir özel anahtar yüklendikten sonra ssh-add, özel anahtar dosyasının adına -cert.pub eklenerek elde edilen dosya adından ilgili sertifika bilgilerini yüklemeye çalışır. Komut satırında alternatif dosya adları da belirtilebilir.
Herhangi bir dosya bir parola (passphrase) gerektiriyorsa, ssh-add kullanıcıdan bu parolayı ister. Parola kullanıcının tty'sinden okunur. Birden fazla kimlik dosyası verilmişse, ssh-add son girilen parolayı tekrar dener.
ssh-add'in çalışabilmesi için kimlik doğrulama aracısının çalışıyor olması ve SSH_AUTH_SOCK çevre değişkeninin aracının soket adını içeriyor olması gerekir.
Seçenekler aşağıdaki gibidir:
-C: Anahtarlar aracıya yüklenirken veya aracıdan silinirken, yalnızca sertifikaları işle ve düz anahtarları atla.-c: Eklenen kimliklerin, kimlik doğrulama için kullanılmadan önce onaya tabi tutulması gerektiğini belirtir. Onay işlemi ssh-askpass(1) tarafından gerçekleştirilir. Başarılı onay, istek sahibine girilen metin yerine ssh-askpass(1) programından dönen sıfır çıkış durumu ile bildirilir.-D: Aracıdaki tüm kimlikleri siler.-d: Kimlik eklemek yerine, kimlikleri aracıdan kaldırır. Eğer ssh-add argümansız çalıştırılmışsa, varsayılan kimliklerin anahtarları ve bunlara karşılık gelen sertifikaları kaldırılır. Aksi takdirde, argüman listesi, aracıdan kaldırılacak anahtarları ve sertifikaları belirtmek üzere genel anahtar dosyalarının yollarını içeren bir liste olarak yorumlanır. Belirtilen bir yolda genel anahtar bulunamazsa, ssh-add sona .pub ekleyerek tekrar dener. Eğer argüman listesi "-" karakterinden oluşuyorsa, ssh-add kaldırılacak genel anahtarları standart girdiden okur.
-E fingerprint_hash Anahtar parmak izleri gösterilirken kullanılan karma (hash) algoritmasını belirtir. Geçerli seçenekler şunlardır: “md5” ve “sha256”. Varsayılan değer “sha256”dır.
-e pkcs11 pkcs11 PKCS#11 paylaşımlı kitaplığı tarafından sağlanan anahtarları kaldırır.
-H hostkey_file -h bayrağı aracılığıyla hedef kısıtlamalı (destination-constrained) anahtarlar kullanılırken, sunucu anahtarlarını aramak için bir bilinen sunucular (known hosts) dosyası belirtir. Birden fazla dosyada arama yapılmasına izin vermek için bu seçenek birden fazla kez belirtilebilir. Hiçbir dosya belirtilmezse, ssh-add varsayılan ssh_config(5) bilinen sunucular dosyalarını kullanır: ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts ve /etc/ssh/ssh_known_hosts2.
-h destination_constraint Anahtar eklerken, bunların yalnızca belirli sunucular üzerinden veya belirli hedeflere doğru kullanılabilmesini kısıtlar.
‘[kullanıcı@]hedef-sunucuadı’ biçimindeki hedef kısıtlamaları, anahtarın yalnızca kaynak sunucudan (ssh-agent(1) çalıştıran sunucu) belirtilen hedef sunucuya, isteğe bağlı bir kullanıcı adıyla kullanılmasına izin verir.
‘kaynak-sunucuadı>[kullanıcı@]hedef-sunucuadı’ biçimindeki kısıtlamalar, yönlendirilmiş bir ssh-agent(1) üzerinde bulunan bir anahtarın, belirli bir sunucu aracılığıyla (‘kaynak-sunucuadı’ ile belirtilen) ‘hedef-sunucuadı’ ile belirtilen daha ilerideki bir sunucuda kimlik doğrulamak için kullanılmasına izin verir.
Anahtarlar yüklenirken birden fazla hedef kısıtlaması eklenebilir. Hedef kısıtlamalarına sahip bir anahtarla kimlik doğrulaması yapılmaya çalışıldığında, ssh-agent(1) yönlendirmesi de dahil olmak üzere tüm bağlantı yolu bu kısıtlamalara karşı test edilir ve işlemin başarılı olabilmesi için her bir bağlantı aşamasına (hop) izin verilmiş olması gerekir. Örneğin, bir anahtar uzak bir sunucuya, ‘sunucu-b’ye yönlendirilmişse ve başka bir sunucuya, ‘sunucu-c’ye kimlik doğrulamaya çalışıyorsa, işlem yalnızca ‘sunucu-b’ye kaynak sunucudan izin verilmişse ve sonraki ‘sunucu-b>sunucu-c’ aşamasına da hedef kısıtlamaları tarafından izin verilmişse başarılı olacaktır.
Sunucular, sunucu anahtarları (host keys) ile tanımlanır ve ssh-add tarafından bilinen sunucular dosyalarından aranır. Sunucu adları için joker karakter (wildcard) kalıpları kullanılabilir ve sertifika sunucu anahtarları desteklenir. Varsayılan olarak, ssh-add tarafından eklenen anahtarlar hedef kısıtlamalı değildir.
Hedef kısıtlamaları OpenSSH 8.9 sürümünde eklenmiştir. Yönlendirilmiş bir ssh-agent(1) kanalı üzerinden hedef kısıtlamalı anahtarlar kullanılırken hem uzak SSH istemcisinde hem de sunucusunda destek gereklidir.
Hedef kısıtlamalarının, yalnızca bir anahtar kullanıldığında veya iş birliği yapan bir ssh(1) tarafından yönlendirildiğinde ssh-agent(1) tarafından zorunlu kılınabileceğini unutmamak da önemlidir. Özellikle bu durum, uzak bir SSH_AUTH_SOCK soketine erişimi olan bir saldırganın bunu tekrar yönlendirip farklı bir sunucuda (ancak yalnızca izin verilen bir hedefe doğru) kullanmasını engellemez.
-K: Bir FIDO kimlik doğrulayıcısından (authenticator) yerleşik (resident) anahtarları yükler.-k: Anahtarlar aracıya yüklenirken veya aracıdan silinirken, yalnızca düz özel anahtarları işle ve sertifikaları atla.-L: Şu anda aracı tarafından temsil edilen tüm kimliklerin genel anahtar parametrelerini listeler.-l: Şu anda aracı tarafından temsil edilen tüm kimliklerin parmak izlerini listeler.-N: Sertifikalar eklenirken, ssh-add varsayılan olarak aracının, sertifikayı geçerlilik süresinin dolmasından kısa bir süre sonra otomatik olarak silmesini talep eder. Bu bayrak bu davranışı engeller ve aracıya eklenen sertifikalar için bir geçerlilik ömrü belirtmez.-q: Başarılı bir işlemden sonra sessiz kalır (çıktı vermez).
-S provider FIDO kimlik doğrulayıcı barındırmalı anahtarlar eklenirken kullanılacak bir kitaplığın yolunu belirtir ve dahili USB HID desteğinin kullanılması yönündeki varsayılan davranışı geçersiz kılar.
-s pkcs11 pkcs11 PKCS#11 paylaşımlı kitaplığı tarafından sağlanan anahtarları ekler. Sertifika dosyaları isteğe bağlı olarak komut satırı argümanları olarak listelenebilir. Eğer bunlar mevcutsa, PKCS#11 beltecinden (token) yüklenen ilgili özel anahtar kullanılarak aracıya yüklenirler.
-T pubkey ... Belirtilen pubkey (genel anahtar) dosyalarına karşılık gelen özel anahtarların, her biri üzerinde imzalama ve doğrulama işlemleri gerçekleştirerek kullanılabilir olup olmadığını test eder.
-t life Aracıya kimlik eklerken maksimum bir geçerlilik ömrü belirler. Geçerlilik ömrü saniye cinsinden veya sshd_config(5) içinde belirtilen bir zaman biçiminde belirtilebilir.
-v: Ayrıntılı (verbose) mod. ssh-add'in ilerleyişi hakkında hata ayıklama mesajları yazdırmasını sağlar. Bu, sorunların giderilmesinde yararlıdır. Birden fazla -v seçeneği ayrıntı düzeyini artırır. Maksimum değer 3'tür.-X: Aracının kilidini açar.-x: Aracıyı bir parola ile kilitler.
--apple-use-keychain Kimlikler eklenirken, her bir parola kullanıcının anahtar zincirinde (keychain) de saklanır. Kimlikler -d ile kaldırılırken, her bir parola anahtar zincirinden de kaldırılır.
--apple-load-keychain Kullanıcının anahtar zincirinde saklanan parolaları kullanarak aracıya kimlikleri ekler.
Ortam
DISPLAY, SSH_ASKPASS ve SSH_ASKPASS_REQUIRE ssh-add bir parolaya ihtiyaç duyarsa ve bir terminalden çalıştırılmışsa, parolayı mevcut terminalden okur. Eğer ssh-add ile ilişkilendirilmiş bir terminal yoksa ancak DISPLAY ve SSH_ASKPASS tanımlanmışsa, SSH_ASKPASS tarafından belirtilen programı (varsayılan olarak “ssh-askpass”) çalıştırır ve parolayı okumak için bir X11 penceresi açar. Bu durum, özellikle ssh-add'in bir .xsession veya ilgili bir betikten çağrıldığı durumlarda kullanışlıdır.
SSH_ASKPASS_REQUIRE, askpass programının kullanımı üzerinde daha fazla kontrol sağlar. Bu değişken “never” olarak ayarlanırsa, ssh-add asla bir askpass programı kullanmaya çalışmaz. “prefer” olarak ayarlanırsa, ssh-add şifre isterken TTY yerine askpass programını kullanmayı tercih eder. Son olarak, değişken “force” olarak ayarlanırsa, DISPLAY değişkeninin tanımlı olup olmadığına bakılmaksızın tüm parola girişleri için askpass programı kullanılır.
SSH_AUTH_SOCK Aracı ile iletişim kurmak için kullanılan bir UNIX etki alanı (UNIX-domain) soketinin yolunu tanımlar.
SSH_SK_PROVIDER Herhangi bir FIDO kimlik doğrulayıcı barındırmalı anahtar yüklenirken kullanılacak kitaplığın yolunu belirtir ve yerleşik USB HID desteğinin kullanılması yönündeki varsayılan davranışı geçersiz kılar.
APPLE_SSH_ADD_BEHAVIOR Daha önceki macOS sürümlerinde kullanılan -A ve -K seçeneklerinin eski işleyişini etkinleştirir veya devre dışı bırakır. Bu seçenekler sırasıyla --apple-load-keychain ve --apple-use-keychain olarak yeniden adlandırılmıştır. Bununla birlikte, -A ve -K seçenekleri aşağıdaki durumlar haricinde eski sürümlerdeki gibi davranmaya devam eder. -S veya SSH_SK_PROVIDER ile bir güvenlik sağlayıcısı belirtilmişse veya APPLE_SSH_ADD_BEHAVIOR değişkeni “openssh” değerine ayarlanmışsa, ssh-add standart OpenSSH davranışını kullanır: -A bayrağı tanınmaz ve -K bayrağı yukarıdaki AÇIKLAMA bölümünde belgelendiği gibi davranır.
Aksi takdirde, ssh-add -A ve -K seçenekleri eski macOS sürümlerindeki gibi davranacaktır. APPLE_SSH_ADD_BEHAVIOR değişkeni “macos” değerine ayarlanmadığı sürece standart hataya bir uyarı yazdırılacaktır. Not: macOS'in gelecekteki sürümleri, bu çevre değişkeni ayarlanmadığı sürece ne -A ne de -K seçeneğini destekleyecektir.
Dosyalar
~/.ssh/id_ecdsa ~/.ssh/id_ecdsa_sk ~/.ssh/id_ed25519 ~/.ssh/id_ed25519_sk ~/.ssh/id_rsa Kullanıcının ECDSA, kimlik doğrulayıcı barındırmalı ECDSA, Ed25519, kimlik doğrulayıcı barındırmalı Ed25519 veya RSA kimlik doğrulama kimliğini içerir.
Kimlik dosyaları, kullanıcının kendisi dışındaki hiç kimse tarafından okunabilir olmamalıdır. ssh-add'in, başkaları tarafından erişilebilir durumdaki kimlik dosyalarını yok sayacağını unutmayın.
Çıkış Durumu
Çıkış durumu başarı durumunda 0, belirtilen komut başarısız olduğunda 1 ve ssh-add kimlik doğrulama aracısı ile iletişim kuramadığında 2'dir.
Ayrıca Bakınız
ssh(1), ssh-agent(1), ssh-askpass(1), ssh-keygen(1), sshd(8)
Yazarlar
OpenSSH, Tatu Ylonen tarafından yapılan orijinal ve ücretsiz ssh 1.2.12 sürümünden türetilmiştir. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt ve Dug Song birçok hatayı gidermiş, daha yeni özellikler eklemiş ve OpenSSH'i geliştirmişlerdir. Markus Friedl, SSH protokolü sürüm 1.5 ve 2.0 desteklerine katkıda bulunmuştur.