Linux Sistemlere SSH Anahtarı ile Erişim

Bu yazıda, Linux makinelerimize SSH anahtarı ile erişimi nasıl yapabileceğimizi göreceğiz. Örnek ortamımızda 2 adet Linux cihaz var. Bunlardan bir tanesi “ubuntu”, diğeri ise “rhel9” isimli cihazlar. Amacımız, Ubuntu Server 22.04.3 LTS işletim sistemli cihazımızdan, Red Hat Enterprise Linux 9 işletim sistemli cihazımıza, “ali” kullanıcısı için, SSH anahtarı kullanarak giriş yapmak.

İlk Durum

Yukarıda da bahsettiğim gibi, 2 farklı cihazımız var. Bu cihazların ikisinde de “ali” isimli bir kullanıcı var. Bu iki cihaz arasında, parola kullanarak SSH yapmakta bir problem yok.

Parola ile SSH denemesi
Parola ile SSH denemesi

Şimdi “ubuntu” cihazımızda bir SSH anahtar çifti oluşturalım ve bunu “rhel9” cihazımıza SSH yaparken kullanmayı deneyelim.

SSH Anahtar Çiftinin Oluşturulması

SSH anahtar çiftini oluşturmak için, “ssh-keygen” komutundan faydalanacağız:

ali@ubuntu:~$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ali/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ali/.ssh/id_rsa
Your public key has been saved in /home/ali/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:TqFXFJxvckB7x38WmpljL----- ali@ubuntu
The key's randomart image is:
ali@ubuntu:~$

Yukarıdaki örnekte; “rsa” tipinde (-t ile belirtildi) ve 4096 bit’lik (-b ile belirtildi) bir SSH anahtar çifti oluşturuyoruz. Varsayılan olarak, ev dizininizin altında, .ssh dizini içerisinde, id_rsa isimli bir private key ve aynı isimli, .pub uzantılı bir public key oluşturuluyor. Dilerseniz, farklı isim ve path’ler verebilirsiniz. Passphrase kısmı ise, oluşturacağınız anahtarın parolası olacak. Boş bırakabileceğiniz gibi, bir anahtar parolası belirlemeniz şiddetle tavsiye edilir.

SSH Anahtarının Karşıya Kopyalanması

Oluşturduğumuz bu anahtar çiftinden public olanı, oturum açmak istediğimiz sunucularda ilgili alana kopyalamamız gerekiyor. Bunun için birkaç yöntem var. Biz ise ilk denememizi, “ssh-copy-id” aracını kullanarak yapacağız:

ali@ubuntu:~$ ssh-copy-id -i .ssh/id_rsa.pub ali@rhel9
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/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
ali@rhel9's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'ali@rhel9'"
and check to make sure that only the key(s) you wanted were added.

ali@ubuntu:~$ ssh ali@rhel9
Activate the web console with: systemctl enable --now cockpit.socket

Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Wed Jan 24 18:42:31 2024 from 10.0.0.10
[ali@rhel9 ~]$

Yukarıdaki örnekte; “ssh-copy-id” komutunu kullanarak, -i ile kopyalamak istediğimiz açık anahtarı belirttik. Devamında ise bunu hangi kullanıcı@cihaz için kullanmak istediğimizi belirttik. Tabii bu işlemin yapılabilmesi için, karşı cihazda ilgili kullanıcının parolasını bilmemiz gerekiyordu.

Çıktıları incelerseniz, parola girişi yapıldıktan sonra anahtarın karşıya başarılı şekilde yüklendiğini ve “ssh ali@rhel9” komutu ile bir deneme yapmamızın önerildiğini görüyorsunuz. Bu komutu çalıştırdığımızda ise, parola sorulmadan “rhel9” cihazına geçebildiğimizi görüyoruz.

Parola Erişimi Kapalı Cihazlar İçin

Parola ile erişimin kapalı olduğu senaryolarda, “ssh-copy-id” işinizi göremeyecektir. Bu durumda bir şekilde siz ya da yetkisi olan bir kullanıcı, açık anahtarınızı ilgili yere kopyalamalıdır.

Aynı anahtarı, parola ile SSH’ın kapalı olduğunu bildiğimiz, Oracle Linux Server 8.9 işletim sistemli “ol8” cihazımıza kopyalamayı deneyelim:

ali@ubuntu:~$ ssh-copy-id -i .ssh/id_rsa.pub ali@ol8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/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
ali@ol8: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
ali@ubuntu:~$

Gördüğünüz gibi, cihaza SSH yapamadığımız için, anahtarımızı koymamız da mümkün değil. Böyle bir durumda şunları yapabilirsiniz:

  • Cihazda geçici süreliğine parola ile SSH’a izin verebilirsiniz.
  • Erişimi olan bir kullanıcıdan, key’inizi ilgili alana kopyalamasını isteyebilirsiniz.
  • Terminal erişimi alıp, key’inizi elle girebilirsiniz.

Peki neresi bu ilgili alan? Anahtarımızı başarıyla gönderdiğimiz rhel9 cihaza bakarsak:

[ali@rhel9 .ssh]$ ll
total 4
-rw-------. 1 ali ali 736 Jan 24 18:52 authorized_keys
[ali@rhel9 .ssh]$ pwd
/home/ali/.ssh
[ali@rhel9 .ssh]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqJ8Tn8r6thhm6iO4+490mDR+QXYc/Zj3/y6Oy8HUaAPuUhBcshkND9idtwiAPJ7QTMOGpY+vi9HQCpLvJHP2HCkT1iiRwt7QHuT0dwPue0Y2Dk+5pBPGIaFH9BcT9B6y4wty5wg/HwjfzA43Wgq+Rv23qw31MIeJQJd31gBa3ZSbTo7Yj6U7zD4z91ZouGOTuTDL0FPVbYyfm3K1DgPkvQ842K7TeBnV1Qj+F+w7vOKzUkcUh2RpMsvaelEralZT8/uBnvkY9Aw1234567890mlt/Dx4ffGs+icBTu6pss1RAn8Sq6KYZDZFrXNi96BpxM65X5YkM0O0qtuX8m8Po/hbqsS1158wY0vYSmE5dXS7iTnu9ldvZ3OOJezxReVqwPOuGE7NUl04AT42+jtXFl5Ln1pWvq7qdY8m0RXpr80uCmh83fjd+WinlHlivCy9U8/5s3DKwAfzv2s0GuRhx2gh0k/rr6eOzXzvgmGlp6QoPwOlhIs86uuiRFhkIj8pIpX8iCuPCwq8pC+XrYyVn78WlWE7KOcrBG4O4Ag2Db+GxhToW9/HqbkRIMTOWAEmHIV3k8a9pAwOhtTDEcXTAD5FifYAyIFuxMILoJ3GuUqlGki3SBo6n1OXnpsxIUGwypbOjZMSKvImeM043U04zC6qPt7QD+XisuAs7yENffQ== ali@ubuntu
[ali@rhel9 .ssh]$

Kullanıcının ev dizini altında, .ssh dizini içerisinde, “authorized_keys” isimli bir dosya olduğunu ve public key’imizin bu dosyanın içinde yazdığını göreceksiniz. Bu noktada, “.ssh” dizini yoksa, SSH yapacak kullanıcı sahiplikli ve 700 izinli olarak bu dizini oluşturmalı, devamında da yine kullanıcı sahipliklik ve 600 izinli “authorized_keys” dosyasını oluşturmalı ve bu dosyanın içine, SSH yapmasını istediğiniz kullanıcının public key’ini eklemelisiniz:

[root@ol8 ali]# ls -la
total 16
drwx------. 2 ali  ali   83 Jan 23 17:28 .
drwxr-xr-x. 3 root root  17 Jan 23 17:07 ..
-rw-------. 1 ali  ali   85 Jan 24 18:57 .bash_history
-rw-r--r--. 1 ali  ali   18 Aug  2  2022 .bash_logout
-rw-r--r--. 1 ali  ali  141 Aug  2  2022 .bash_profile
-rw-r--r--. 1 ali  ali  376 Aug  2  2022 .bashrc
[root@ol8 ali]# mkdir .ssh
[root@ol8 ali]# chown ali:ali .ssh
[root@ol8 ali]# chmod 700 .ssh
[root@ol8 ali]# vim .ssh/authorized_keys
[root@ol8 ali]# chown ali:ali .ssh/authorized_keys
[root@ol8 ali]# chmod 600 .ssh/authorized_keys

Bu düzenleme sonrasında, açık anahtarı kullanarak rahatlıkla SSH yapılabildiğini göreceksiniz:

ali@ubuntu:~$ ssh ali@ol8
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Jan 24 18:57:16 2024 from 10.0.0.1
[ali@ol8 ~]$

MobaXterm Kullanarak SSH Anahtarı ile Giriş

SSH anahtarınızı, ilgili cihazlara dağıttıktan sonra, private ve public key’inizin bir kopyasını da kendi bilgisayarınıza alın. Private key’inizi kullanarak oturum açacaksınız. Public key’inizi ise, gelecekte bağlanmanız muhtemel cihazlara eklenmek üzere elinizin altında tutmak kolaylık sağlayabilir.

MobaXterm’de kayıtlı session ayarlarına gelip, kullanacağınız private key’i göstermeniz yeterli olacaktır:

MobaXterm ile SSH Anahtarı Kullanımı
MobaXterm ile SSH Anahtarı Kullanımı