Kulcstartó
Ez a dokumentum bemutatja, hogy miként lehet az SSH megosztott kulcsokat használni a kulcstartó (keychain) szoftverrel együtt. A dokumentum feltételezi a nyilvános kulcsú titkosítás alapvető ismeretét.
A kulcstartó (keychain) egy ssh-agent és ssh-add frontend-szoftver, amely lehetővé teszi a hosszú ideig futó munkameneteket, és a felhasználónak csak egyszer kell megadnia a jelszavakat. Emellett használható arra is, hogy szkriptek hozzáférjenek az SSH kapcsolatokhoz.
Háttér
Fennálló probléma
Minden egyes operációs rendszerbe való bejelentkezéskor jelszavakat kell beírni, ami kényelmetlen, különösen, ha sok operációs rendszert kell kezelni. Egyes rendszergazdáknak akár egy olyan szkriptre vagy cron-feladatra is szükségük lehet, amely kényelmes módon használja az SSH kapcsolatot. Akárhogy is, létezik megoldás erre a problémára, és az a nyilvános kulcsú hitelesítéssel kezdődik.
Hogyan működik a nyilvános kulcsú hitelesítés?
Tegyük fel, hogy egy kliensszámítógép csatlakozni szeretne az SSH szolgáltatáshoz egy szerverszámítógépen. A kliensszámítógép először létrehoz egy kulcspárt, majd megadja a nyilvános kulcsot a szerverszámítógépnek. Ezt követően, amikor a kliensszámítógép megpróbál csatlakozni a szerverszámítógépre, a szerverszámítógép egy kihívást (challenge) küld a kliensszámítógépnek, amelyet a nyilvános kulccsal titkosítanak. Kizárólag a megfelelő privát kulcs birtokosa (tehát kizárólag a kliensszámítógép) tudja azt visszafejteni, így a helyes válasz a kliensszámítógéptől a szerverszámítógépnek sikeres hitelesítést fog eredményezni magán a szerverszámítógépen.
Hogyan használjuk a nyilvános kulcsú hitelesítést?
Kulcspár létrehozása
Az első lépés egy kulcspár létrehozása. Ehhez használja a ssh-keygen parancsot:
user $ssh-keygenFogadja el az alapértelmezett értékeket, és ügyeljen arra, hogy erős jelszót adjon meg.
Ügyeljen arra, hogy erős jelszót válasszon, különösen, ha ezt a kulcsot root bejelentkezésekhez fogják használni!
A kulcspár-legenerálás befejezése után egy privát kulcsnak a ~/.ssh/id_rsa könyvtárban kell lennie, míg egy nyilvános kulcsnak a ~/.ssh/id_rsa.pub könyvtárban kell, hogy legyen. A nyilvános kulcs most készen áll a távoli gépre történő másolásra.
A privát kulcs jelszavának hozzáadása vagy módosítása a következő módon végezhető el:
user $ssh-keygen -p -f ~/.ssh/id_rsaSzerver előkészítése
A ~/.ssh/id_rsa.pub fájlt át kell másolni a sshd szolgáltatást futtató szerverre. Ezt a fájlt hozzá kell adni a távoli szerveren a csatlakozni kívánó felhasználóhoz tartozó ~/.ssh/authorized_keys fájlhoz. Miután az infrastruktúra személyzete engedélyezte az ssh hozzáférést a szerverhez, az alábbi lépésekkel beállítható az automatikus bejelentkezés nyilvános kulcs használatával a távoli szerveren:
user $ssh-copy-id -i ~/.ssh/id_rsa.pub server_user@serverA ssh-copy-id egy segédszkript ezeknek a lépéseknek az elvégzéséhez. Ha ez a segédszkript nem érhető el, akkor az alábbi lépések használhatók:
user $scp ~/.ssh/id_rsa.pub server_user@server:~/myhost.pub
user $ssh server_user@server "cat ~/myhost.pub >> ~/.ssh/authorized_keys"
user $ssh server_user@server "cat ~/.ssh/authorized_keys"Az utolsó sor kimenetének a ~/.ssh/authorized_keys fájl tartalmát kell mutatnia. Győződjön meg róla, hogy a kimenet helyesen jelenik-e meg.
Létrehozott környezet tesztelése
Elméletileg, ha minden jól ment, és a szerverszámítógépen futó sshd szolgáltatás engedélyezve van (mivel ez beállítható), akkor innentől kezdve lehetségesnek kell lennie az ssh hozzáférésnek jelszó megadása nélkül a szerverszámítógépen. A kliensszámítógépen lévő privát kulcsot továbbra is vissza kell fejteni az előzőleg használt jelszóval, de ezt nem szabad összetéveszteni a szerverszámítógépen lévő felhasználói fiók jelszavával.
user $ssh <server_user>@<server>Az id_rsa jelszavát kellett volna megadni, majd az ssh segítségével hozzáférést kellett volna kapni <server_user> felhasználóként a szerverszámítógépen. Ha ez nem történt meg, akkor jelentkezzen be <server_user> felhasználóként, és ellenőrizze, hogy a ~/.ssh/authorized_keys fájl tartalma minden bejegyzést (ami egy nyilvános kulcs) egyetlen sorban tartalmaz. Emellett érdemes ellenőrizni az sshd beállítását is, hogy biztosan engedélyezze a nyilvános kulcsú hitelesítést, ha az elérhető.
Ezen a ponton az olvasók talán azt gondolják: "Mi értelme van ennek, hiszen csak egy jelszót cseréltem le egy másikra?!". Nyugodjon meg a p*csáb*, a következő részben pontosan megmutatjuk, hogy miként használhatjuk ezt úgy, hogy a jelszót kizárólag egyszer kelljen megadni, és a (visszafejtett) kulcsot többszöri bejelentkezéshez újra fel lehessen használni.
Nyilvános kulcsú hitelesítés kényelmessé tétele
Tipikus kulcskezelés az ssh-agent segítségével
A következő lépés a privát kulcs(ok) egyszeri visszafejtése, és a lehetőség megszerzése az ssh használatára szabadon, jelszavak nélkül. Pontosan erre szolgál a ssh-agent szoftver.
Az ssh-agent szoftvert általában az X munkamenet elején indítják el, esetleg egy shell indítási szkript segítségével indítják el, például a ~/.bash_profile fájlban. A működése úgy történik, hogy létrehoz egy UNIX socketet, és regisztrálja a megfelelő környezeti változókat, így minden későbbi alkalmazás kihasználhatja a szolgáltatásait az adott socket-hez csatlakozva. Egyértelmű, hogy kizárólag akkor van értelme elindítani ezt a szoftvert az X munkamenet szülőfolyamatában, ha a visszafejtett privát kulcsokat minden későbbi X alkalmazásban használni kívánjuk.
user $eval `ssh-agent`Ez a ssh-agent szoftver a kulcsokat visszafejtve tartja, amíg le nem állítják a szoftvert. A kulcsok élettartamának beállításához használja a
-t argumentumot, ahogyan azt a man ssh-agent súgó is leírja.Amikor a ssh-agent szoftver fut, akkor ki kell írnia a futó ssh-agent PID azonosítóját, és be kell állítania néhány környezeti változót, nevezetesen a SSH_AUTH_SOCK és SSH_AGENT_PID értékeket. Automatikusan hozzá kell adnia a ~/.ssh/id_rsa fájlt a gyűjteményéhez, és meg kell kérdeznie a felhasználót a megfelelő jelszóról. Ha vannak más privát kulcsok, amelyeket hozzá kell adni a futó ssh-agenthez, akkor használja a ssh-add parancsot.
user $ssh-add somekeyfileMost jön a varázslat. A visszafejtett privát kulcs készen áll, így be lehet jelentkezni egy (nyilvános kulccsal beállított) szerverre anélkül, hogy jelszót kellene megadni:
user $ssh serverAz ssh-agent leállításához (és ezáltal a jelszó ismételt megadásának szükségességéhez később):
user $ssh-agent -kLehetséges, hogy több ssh-agent folyamat fut egyszerre, különösen akkor, ha a beállítása kezdetben némi erőfeszítést és próbálkozást igényelt. Ezeket a folyamatokat le lehet állítani, mint bármely más folyamatot, a killall ssh-agent parancs futtatásával.
Az ssh-agent még kényelmesebb használatához folytassa a következő résszel, amely a kulcstartó használatát ismerteti. Ügyeljen arra, hogy leállítsa a futó ssh-agentet, mivel a kulcstartó önállóan kezeli az ssh-agent munkameneteket.
Az ssh-agent maximális kényelmének kihasználása
A kulcstartó lehetővé teszi az ssh-agent újrafelhasználását a bejelentkezések között, és opcionálisan minden bejelentkezéskor bekérheti a jelszót. Először telepítsük fel a számítógépünkre:
root #emerge --ask net-misc/keychainFeltételezve, hogy a telepítés sikeres volt, most már használható a keychain.
Adja hozzá a következő sorokat a shell inicializálási fájlhoz (~/.bash_profile, ~/.zshrc, vagy hasonló) annak érdekében, hogy engedélyezze kulcstartó (keychain) szoftvert:
~/.bash_profileKeychain engedélyezése a Bash számárakeychain ~/.ssh/id_rsa
. ~/.keychain/${HOSTNAME}-sh
. ~/.keychain/${HOSTNAME}-sh-gpg
~/.zshrcKeychain engedélyezése a zsh számárakeychain ~/.ssh/id_rsa
. ~/.keychain/${HOST}-sh
. ~/.keychain/${HOST}-sh-gpg
További kulcsokat is hozzá lehet adni a parancssorhoz igény szerint. Emellett, ha azt szeretné, hogy minden egyes shell indításkor bekérje a jelszót, akkor adja hozzá a
--clear opciót.Ha nem Bash-t vagy nem zsh-t használ, akkor nézze meg a EXAMPLES részt a man keychain súgójában, ahol példákat talál más shell-ekben való használatra. Az alapötlet az, hogy ezek a parancsok minden egyes shell használatakor lefussanak.
Most próbálja ki. Először győződjön meg arról, hogy az előző szakaszban említett ssh-agent folyamatokat leállította, majd indítson el egy új shellt, általában egy új bejelentkezéssel vagy egy új parancssor megnyitásával. Ennek kérnie kell a jelszót minden egyes parancssorban megadott kulcshoz.
Minden ezt követően megnyitott shell újra felhasználja az ssh-agent szoftvert, így lehetővé téve a jelszó nélküli SSH kapcsolatok ismételt használatát.
Kulcstartó használata a Plasma 5 környezetben
A Plasma 5 felhasználók ahelyett, hogy a ~/.bash_profile fájlt használnák, hagyhatják, hogy a Plasma kezelje az ssh-agent szoftvert. Ennek érdekében szerkesszék a /etc/xdg/plasma-workspace/env/10-agent-startup.sh fájlt, amely fájlt a Plasma a Plasma elindításakor olvas be, valamint a /etc/xdg/plasma-workspace/shutdown/10-agent-shutdown.sh fájlt, amelyet a Plasma a Plasma leállásakor hajt végre.
Íme, hogy miként lehet ezeket a fájlokat szerkeszteni:
/etc/xdg/plasma-workspace/env/10-agent-startup.shSzerkesztés a Plasma 5 számáraSSH_AGENT=true
/etc/xdg/plasma-workspace/shutdown/10-agent-shutdown.shSzerkesztés a Plasma 5 számáraif [ -n "${SSH_AGENT_PID}" ]; then
eval "$(ssh-agent -k)"
fi
Most már csak annyi a teendő, hogy elindítunk egy tetszőleges parancssort, például a kde-apps/konsole szoftvert, és betöltjük a megfelelő kulcskészletet a használathoz. Például:
user $keychain ~/.ssh/id_rsaA kulcsokat a Plasma a munkamenet végéig meg fogja jegyezni (vagy amíg a ssh-agent folyamatot manuálisan le nem állítják).
Alternatív megoldás: KWallet használata a Plasma 5 alatt a kde-plasma/ksshaskpass szoftvercsomag segítségével
A Plasma automatikusan kérheti a jelszót az asztalra történő bejelentkezéskor. Telepítse a kde-plasma/ksshaskpass szoftvercsomagot, amely beállít egy környezeti változót, hogy a ksshaskpass alkalmazást használja, amikor az ssh-add nem a parancssorból fut. Ezután hozzon létre egy szkriptet az alábbiak szerint, és telepítse azt a Plasma -> Rendszerbeállítások -> Indítás és leállítás -> Automatikus indítás menüjében.
~/ssh.shAz ssh.sh szkriptfájl létrehozása#!/bin/sh
ssh-add < /dev/null
A Plasma újabb verziói úgy tűnik, hogy az automatikusan indított szkriptek esetében csak felhasználói jogosultságokat követelnek meg. Lehet, hogy a szkript hozzáadása előtt az Automatikus indítás GUI-n keresztül futtatnia kell a
chmod 700 ssh.sh parancsot.Összegző megjegyzések
Biztonsági megfontolások
Természetesen az ssh-agent használata bizonyos mértékű biztonsági kockázatot jelenthet az operációs rendszer számára. Ha egy másik felhasználó hozzáférést szerezne kapni egy futó shellhez, akkor jelszavak nélkül be tudna jelentkezni az összes szerverre. Ezért ez kockázatot jelent a szerverek számára, és a felhasználóknak mindenképpen konzultálniuk kell a helyi biztonsági irányelvekkel (ha vannak ilyenek). Biztosítsa a megfelelő intézkedéseket annak érdekében, hogy minden munkamenet biztonságban legyen.
Hibaelhárítás
A legtöbb esetben ez jól kell, hogy működjön, de ha problémák merülnének fel, akkor az alábbi pontok hasznosak lehetnek.
- Ha az ssh-agent nélküli csatlakozás nem működik megfelelően, akkor próbálja meg az ssh-t a
-vvvopcióval futtatni, hogy kiderítse, vajon mi történik. Néha a szerver nincs beállítva a nyilvános kulcsú hitelesítés használatára, máskor pedig úgy van beállítva, hogy egyébként is helyi jelszavakat kérjen! Ha ez a helyzet, akkor próbálja meg az ssh szoftvert a-oopcióval használni, vagy módosítsa a szerver sshd_config fájlját. - Ha az ssh-agent vagy a keychain használatával történő csatlakozás nem működik megfelelően, akkor elképzelhető, hogy a jelenlegi shell nem érti a használt parancsokat. Nézze meg az ssh-agent és a keychain man súgóját annak érdekében, hogy megtudja, vajon hogyan működnek más shell-ekben.
További olvasnivaló a témában
- SSH — a mindenütt jelen lévő eszköz a távoli számítógépekre való biztonságos bejelentkezéshez és az azokon való munkavégzéshez.
Külső források
- Keychain projektnek a hivatalos weboldala a Funtoo.org címen.
- IBM developerWorks cikk sorozat a Keychain mögött álló koncepciók bemutatása.
The following people contributed to the original document: Eric Brown, Marcelo Goes,
Editors: please do not add yourself here. Contributions are recorded on each article's associated history page, this list is only present to preserve authorship information, as wiki history does not allow for any external attribution.