SSH belépés jelszó nélkül, nyilvános kulcs segítségével

botond küldte be 2018. 06. 11., h – 19:44 időpontban

Tartalom

 

Bevezető

Rendszeres, terminálban végzett munka során gyakran kell átjelentkezni más számítógépekre SSH-n keresztül. Egy idő után fárasztóvá válik a sok jelszó begépelése, amikor például a felügyeletünk alatt álló szerverre kell belépnünk és ott egy-egy parancsot kell lefuttatnunk, vagy megnéznünk a log fájlokat. Arról nem beszélve hogy a jelszó bekérés miatt automatizált feladatokat sem végezhetünk a távoli gépeken, amit a helyi gépről kellene indítanunk. Ebben a leírásban oldjuk meg ezt a problémát.

 

 

Előfeltételek

Első körben rendelkeznünk kell a megfelelő eszközökkel, amikkel létrehozzuk a nyilvános kulcsot és eljuttatjuk a cél gépre. Erre a legkézenfekvőbb csomag az openssh-client. Ez az egyik legelterjedtebb nyílt forráskódú SSH kliens programcsomag Debianra, ami a kliens mellett tartalmazza a számunkra szükséges parancsokat. Amennyiben még nincs telepítve a rendszerünkre, pótoljuk az APT csomagkezelő segítségével:

apt-get install openssh-client

A csomagból nekünk most magán az SSH-n kívül az ssh-keygen és az ssh-copy-id parancsokra lesz szükségünk.

Jelen példában tételezzük fel, hogy a forrás gépünk neve ahonnan át szeretnénk jelentkezni a cél gépbe localhost, a cél gép neve pedig remotehost. A felhasználónevünk pedig az egyszerűség kedvéért legyen mindkét gépen user. Így tehát a user@localhost -ról szeretnénk jelszó használata nélkül átjelentkezni SSH-n a user@remotehost -ra.

 

Nyilvános kulcs generálása

Először generáljunk magunknak kulcsokat a forrás gépen (user@localhost). Ehhez egyszerűen futtassuk a következő parancsot:

ssh-keygen

Ekkor bekér pár dolgot, ezekre üssünk enter-eket:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
9e:2c:7b:4c:a0:8f:97:b9:5e:ab:50:b8:05:18:f1:55 user@localhost
The key's randomart image is:
+---[RSA 2048]----+
|  o.  ..E        |
|   + .           |
|  . o            |
|     o.          |
|    ..o.S        |
|    .+ o..       |
|    oo.==        |
|    ..=+o.       |
|     o=+.        |
+-----------------+

A legenerált kulcspárt a /home/user/.ssh/ könyvtárban helyezi el, ahol a fiók privát kulcsa az id_rsa fájl, és a nyilvános kulcs pedig az id_rsa.pub fájl.

 

Itt érdemes megjegyezni, hogy a normál módon létrehozott SSH felhasználók esetében a generált kulcsokat a /home/usernév/.ssh/ könyvtárban hozza létre. De ha például egy ISPConfig-os szerverkörnyezetet használunk, akkor ettől eltérő útvonalra kerülhetnek a fájlok (Pl Dokument root alá, stb) Így figyeljük az ssh-keygen program által jelzett fájl kimeneti útvonalakat.

 

Nyilvános kulcs felmásolása

Ha ezzel megvagyunk, akkor az ssh-copy-id paranccsal másoljuk fel a cél helyre a nyilvános kulcsot:

ssh-copy-id -i /home/user/.ssh/id_rsa.pub user@remotehost

 

Ha a célállomáson nem az alapértelmezett 22-es SSH portot használjuk, akkor az ssh-copy-id parancsnak is a -p kapcsolóval adhatjuk meg az egyedi portszámunkat, mint az ssh programnak:
ssh-copy-id -i /home/user/.ssh/id_rsa.pub user@remotehost -p <portszám>

 

Itt a -i kapcsolóval adjuk meg a nyilvános kulcs elérését, így biztosak lehetünk benne, hogy a megfelelő fájl kerül felmásolásra. Ezután a program felmásolja a kulcsot a cél helyre, de közben először megerősítést kér a műveletre, utána bekéri egyszer a cél fiók SSH jelszavát. A kimenet tehát:

The authenticity of host '[remotehost] ([192.168.1.10])' can't be established.
ECDSA key fingerprint is 41:fe:b9:e0:22:4d:20:07:bd:db:80:da:b8:85:25:1e.
Are you sure you want to continue connecting (yes/no)? yes [Enter]
/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
user@remotehost's password: (adjuk meg a cél állomás SSH jelszavát)

Number of key(s) added: 1

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

Ezzel készen is vagyunk. Teszteljük a jelszó nélküli belépést az ssh paranccsal:

ssh user@remotehost

Ha minden jól sikerült, akkor egyből meg is jelenik a MOTD szöveg, majd alatta a prompt:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
user@remotehost:~$

 

A felmásolt nyilvános kulcs a célállomáson lévő ~/.ssh/authorized_keys fájlba kerül, ahova bármennyi  nyilvános kulcs kerülhet. Ez azt jelenti, hogy egy SSH fiókba akárhány helyről is beléphetünk jelszó használata nélkül, ahonnan bemásoltuk a forrás hely nyilvános kulcsát.
A nyilvános kulcsok a fájlban sortörésekkel vannak elválasztva, így szerkesztőprogrammal megnyitva látszanak a forrás helyek user@host formában a kulcsok után. Így szükség esetén kézzel könnyedén eltávolítható a már feleslegessé vált forrásgép nyilvános kulcsa a teljes sor eltávolításával.

 

Konklúzió

Ezután már kényelmesen használhatjuk az SSH vagy SCP parancsokat shell scriptjeinkben anélkül, hogy jelszavainkat bárhol meg kellene adnunk. Így például cron-ból is végrehajthatjuk a távoli weboldal backup scriptünket, vagy bármi egyebet, ami SSH belépést igényel.