SSH Anahtarlarını kurmanın ilk adımı, istemci makinesinde (genellikle bir bilgisayarda) bir anahtar çifti oluşturmaktır:
$ ssh-keygen
Başlangıç için ssh-keygen 2048 bitlik bir RSA anahtar çifti oluşturacaktır, bu çoğu kullanım durumu için yeterli güvenliği sağlayacaktır.
Alternatif olarak, daha büyük bir 4096 bitlik anahtar oluşturmak için isteğe bağlı olarak -b 4096 bayrağını geçirebilirsiniz
Komutu girdikten sonra aşağıdaki istemi görebilmeniz gerekir:
Output Enter file in which to save the key (/your_home/.ssh/id_rsa):
Anahtar çiftini ana dizininizdeki .ssh/ alt dizinine veya özel bir alternatif yola kaydetmek için enter tuşuna basın. Aşağıdaki istem görünmelidir:
Output Enter passphrase ( leave empty for no passphrase):
İsteğe bağlı olarak, şiddetle tavsiye edilen güvenli bir parola girebilirsiniz. Parola, yetkisiz kullanıcıların oturum açmasını önlemek için ek bir güvenlik katmanı sağlar. Güvenlik hakkında daha fazla bilgi edinmek için, Linux Sunucusunda SSH Anahtar Tabanlı Kimlik Doğrulama Nasıl Yapılandırılır adlı eğitimimize bakın.
Daha sonra aşağıdaki çıktıyı görmelisiniz:Output Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+
Artık kimlik doğrulaması için kullanabileceğiniz bir genel ve bir özel anahtarınız olmalı. İşlemin bir sonraki adımı, SSH anahtar tabanlı kimlik doğrulamasını kullanarak oturum açabilmeniz için genel anahtarı sunucunuza yerleştirmektir.
Genel anahtarınızı Ubuntu ana bilgisayarına kopyalamanın en hızlı yolu, ssh-copy-id adlı bir yardımcı program kullanmaktır. Bu yöntem, mevcutsa şiddetle tavsiye edilir. İstemci makinenizde ssh-copy-id yoksa, bu bölümde verilen iki alternatif yöntemden birini (parola tabanlı SSH üzerinden kopyalama veya anahtarı manuel olarak kopyalama) kullanabilirsiniz.
ssh-copy-id aracı birçok işletim sisteminde varsayılan olarak bulunur ve yerel sisteminizde de kullanılabilir. Çalışması için sunucunuza parola tabanlı bir SSH erişiminizin olması gerekir. Yardımcı programı kullanmak için, bağlanmak istediğiniz uzak sunucuyu belirtmeniz ve parola ile SSH erişiminiz olan kullanıcı hesabını eklemeniz yeterlidir. Bu, genel SSH anahtarınızın kopyalanacağı hesap olacaktır.
Sözdizimi şöyledir:
$ ssh-copy-id username@remote_host
Aşağıdaki mesajı görebilirsiniz:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Bu, yerel bilgisayarınızın uzak ana bilgisayarı tanımadığı anlamına gelir. Bu durum büyük olasılıkla yeni bir ana bilgisayara ilk kez bağlandığınızda gerçekleşir. Devam etmek için "evet" yazın ve ENTER tuşuna basın.
Ardından, yardımcı program daha önce oluşturduğumuz id_rsa.pub anahtarını bulmak için yerel hesabınızı tarayacaktır. Anahtarı bulduğunda, sizden uzak kullanıcının hesabının parolasını isteyecektir:
Output /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@111.111.11.111's password:
Şifreyi girin (güvenlik nedeniyle yazdıklarınız görüntülenmeyecektir) ve ENTER tuşuna basın. Yardımcı program, sağladığınız şifreyi kullanarak uzak ana bilgisayardaki hesaba bağlanacaktır. Ardından, ~/.ssh/id_rsa.pub anahtarınızın içeriğini, uzak hesabın ana ~/.ssh dizinindeki authorized_keys adlı bir dosyaya kopyalayacaktır.
Bundan sonra aşağıdaki çıktıyı görmelisiniz:
Output Number of key(s) added: 1 Logging into the machine, with: "ssh 'username@111.111.11.111'" and check to make sure that only the key you wanted was added.
İşlemin bu noktasında id_rsa.pub anahtarınız uzak hesaba yüklenmiştir.
Eğer ssh-copy-id'niz yoksa ancak sunucunuzdaki bir hesaba parola tabanlı SSH erişiminiz varsa, anahtarlarınızı geleneksel bir SSH yöntemi kullanarak yükleyebilirsiniz.
Bunu, yerel bilgisayarımızdaki genel SSH anahtarının içeriğini okumak ve bunu bir SSH bağlantısı üzerinden uzak sunucuya iletmek için cat komutunu kullanarak yapabiliriz. Diğer taraftan, kullandığımız hesap altında ~/.ssh dizininin mevcut olduğundan emin olabilir ve ardından, üzerinden geçtiğimiz içeriği bu dizindeki authorized_keys adlı bir dosyaya çıktı olarak gönderebiliriz.
İçeriğin üzerine yazmak yerine eklemek için >> yönlendirme simgesini kullanacağız. Bu, daha önce eklenen anahtarları yok etmeden anahtar eklememize olanak tanır.
Komutun tamamı şu şekilde:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Aşağıdaki mesajı görebilirsiniz:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Bu, yerel bilgisayarınızın uzak ana bilgisayarı tanımadığı anlamına gelir. Bu durum, yeni bir ana bilgisayara ilk kez bağlandığınızda gerçekleşir. Devam etmek için "evet" yazın ve ENTER tuşuna basın.
Daha sonra uzak kullanıcı hesabı parolasını girmeniz istenecektir:
Output username@111.111.11.111's password:
Şifrenizi girdikten sonra, id_rsa.pub anahtarınızın içeriği uzak kullanıcının hesabındaki authorized_keys dosyasının sonuna kopyalanacaktır. Bu işlem başarılı olduysa 3. Adıma geçin.
Sunucunuza şifre tabanlı SSH erişiminiz yoksa yukarıdaki işlemi manuel olarak tamamlamanız gerekecektir.
id_rsa.pub dosyanızın içeriğini uzak makinenizdeki ~/.ssh/authorized_keys dosyasına manuel olarak ekleyeceğiz.
id_rsa.pub anahtarınızın içeriğini görüntülemek için yerel bilgisayarınıza şunu yazın:
cat ~/.ssh/id_rsa.pub
Anahtarın içeriğini göreceksiniz, aşağıdaki gibi görünmelidir:
Output ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle 7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G /12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U /ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Uzaktaki sunucunuza elinizdeki yöntemi kullanarak erişin.
Uzak sunucudaki hesabınıza eriştiğinizde, ~/.ssh dizininin mevcut olduğundan emin olun. Komut, gerekirse dizini oluşturacak veya zaten mevcutsa hiçbir şey yapmayacaktır:
mkdir -p ~/.ssh
Artık, authorized_keys dosyasını bu dizin içinde oluşturabilir veya değiştirebilirsiniz. id_rsa.pub dosyanızın içeriğini authorized_keys dosyasının sonuna ekleyebilir ve gerekirse dosyayı şu komutu kullanarak oluşturabilirsiniz:
Aşağıdaki komutta public_key_string'i, yerel sisteminizde çalıştırdığınız cat ~/.ssh/id_rsa.pub komutunun çıktısıyla değiştirin. ssh-rsa AAAA ile başlamalıdır.
echo public_key_string >> ~/.ssh/authorized_keys
Artık Ubuntu sunucumuza şifresiz kimlik doğrulama ile erişmeyi deneyebiliriz.
Yukarıdaki prosedürlerden birini tamamladıysanız, uzak hesabın şifresi olmadan uzak ana bilgisayara giriş yapabilmeniz gerekir.
Temel süreç daha önce kullandığımızla aynıdır:
$ ssh username@remote_host
Bu sunucuya ilk defa bağlanıyorsanız (yukarıdaki son yöntemi kullandıysanız), aşağıdakine benzer bir şey görebilirsiniz:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Bu durum, yerel bilgisayarınızın uzak ana bilgisayarı tanımadığı anlamına gelir. "Evet" yazın ve devam etmek için ENTER tuşuna basın.
Özel anahtarınız için bir parola girmediyseniz, hemen oturumunuz açılacaktır. Anahtarı oluştururken özel anahtar için bir parola girdiyseniz, şimdi girmeniz istenecektir (güvenlik nedeniyle tuş vuruşlarınızın terminal oturumunda görüntülenmeyeceğini unutmayın). Kimlik doğrulamasından sonra, Ubuntu sunucusunda yapılandırılmış hesapla sizin için yeni bir kabuk oturumu açılacaktır.
Anahtar tabanlı kimlik doğrulama başarılı olduysa, parola kimlik doğrulamasını devre dışı bırakarak sisteminizi daha da güvenli hale getirmeyi öğrenmek için devam edin.
Hesabınıza parola olmadan SSH üzerinden giriş yapabildiyseniz, hesabınız için SSH anahtar tabanlı kimlik doğrulamasını başarıyla yapılandırmışsınız demektir. Ancak, parola tabanlı kimlik doğrulama mekanizmanız hala etkindir, yani sunucunuz hala kaba kuvvet saldırılarına açıktır.
Bu bölümdeki adımları tamamlamadan önce, bu sunucudaki kök hesap için SSH anahtarı tabanlı kimlik doğrulamasının yapılandırıldığından veya tercihen, bu sunucuda sudo ayrıcalıklarına sahip kök olmayan bir hesap için SSH anahtarı tabanlı kimlik doğrulamasının yapılandırıldığından emin olun. Bu adım, parola tabanlı oturum açma işlemlerini kilitleyeceği için, yönetici erişimine sahip olmaya devam edebilmeniz çok önemlidir.
Uzak hesabınızın yönetici ayrıcalıklarına sahip olduğunu doğruladıktan sonra, uzak sunucunuza SSH anahtarlarıyla (root olarak veya sudo ayrıcalıklarına sahip bir hesapla) oturum açın. Ardından, SSH daemon'unun yapılandırma dosyasını açın:
sudo nano /etc/ssh/sshd_config
Dosyanın içinde PasswordAuthentication adlı bir yönerge arayın. Bu yönerge yorum satırına alınmış olabilir. Satırın yorum satırından çıkarın ve değerini "no" olarak ayarlayın. Bu, hesap parolalarınızı kullanarak SSH üzerinden oturum açmanızı engelleyecektir:
/etc/ssh/sshd_config ... PasswordAuthentication no ...
İşiniz bittiğinde dosyayı kaydedip kapatın. CTRL + X tuşuna, ardından dosyayı kaydetmeyi onaylamak için Y tuşuna ve son olarak nano'dan çıkmak için ENTER tuşuna basın. Bu değişiklikleri uygulamak için sshd hizmetini yeniden başlatmamız gerekiyor:
$ sudo systemctl restart ssh
Önlem olarak, bu oturumu kapatmadan önce yeni bir terminal penceresi açın ve SSH hizmetinin düzgün çalıştığını test edin:
$ ssh username@remote_host
SSH servisinizi doğruladıktan sonra tüm mevcut sunucu oturumlarını güvenle kapatabilirsiniz.
Ubuntu sunucunuzdaki SSH daemon'ı artık yalnızca SSH anahtarlarına yanıt veriyor. Parola tabanlı kimlik doğrulama başarıyla devre dışı bırakıldı.
Eğitim tamamlandığında sunucunuzda SSH anahtarı tabanlı kimlik doğrulaması yapılandırılmış olmalı, bu sayede hesap parolası sağlamadan oturum açabilirsiniz.