Ha több szerverhez csatlakozol, hamar eleged lesz az olyan parancsokból, mint az ssh -p 2222 -i ~/.ssh/id_ed25519_web janos@203.0.113.10. Az SSH kliens beállításfájljában, a ~/.ssh/config fájlban minden szervernek adhatsz egy rövid nevet a címmel, a felhasználónévvel, a porttal és a kulccsal együtt, és onnantól elég annyi, hogy ssh web1. Ugyanez a név működik az scp, az rsync, az sftp és a git parancsban is.
A cikk példáit 2026 novemberében teszteltük: kliensként egy AlmaLinux 10.2 virtuális gépről (OpenSSH 9.9) és macOS-ről (OpenSSH 10.3), szerverként Debian 13 (OpenSSH 10.0) és AlmaLinux 10.2 gépekhez csatlakozva. A beállítások a saját gépeden (laptop, asztali gép) kellenek, nem a szerveren; egy Linux VPS-hez ugyanígy használhatók.
Hol van a fájl?
| Rendszer | Saját beállítások | Az összes felhasználóé |
|---|---|---|
| Linux, macOS | ~/.ssh/config |
/etc/ssh/ssh_config |
| Windows 10 és 11 (beépített OpenSSH) | C:\Users\<név>\.ssh\config |
C:\ProgramData\ssh\ssh_config |
A fájl alapból nem létezik, neked kell létrehoznod. A Windows-os útvonalak a Microsoft dokumentációja szerint érvényesek, ott a fájlt kiterjesztés nélkül (config, nem config.txt) mentsd.
Ne keverd össze a szerver beállításfájljával: a /etc/ssh/sshd_config (a d betűvel) a szerveren azt szabályozza, ki és hogyan léphet be. Erről az SSH szerver biztonsági beállításai cikk szól; az SSH alapjait a Linux Secure Shell (SSH) cikk mutatja be.
Az első bejegyzés
Hozd létre a könyvtárat és a fájlt a megfelelő jogosultságokkal:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/config
chmod 600 ~/.ssh/config
nano ~/.ssh/config
Egy szerver bejegyzése:
Host web1
HostName 203.0.113.10
Port 2222
User janos
IdentityFile ~/.ssh/id_ed25519_web
IdentitiesOnly yes
Mentés után a csatlakozás:
ssh web1
Ez pontosan azt csinálja, mint az ssh -p 2222 -i ~/.ssh/id_ed25519_web janos@203.0.113.10. A Host sor utáni sorok behúzása nem kötelező, csak olvashatóbbá teszi a fájlt; a bejegyzés a következő Host sorig tart.
A leggyakoribb beállítások
| Beállítás | Mire való | Parancssori megfelelője |
|---|---|---|
Host |
A rövid név (vagy minta), amelyre a bejegyzés vonatkozik | |
HostName |
A szerver valódi címe vagy IP-címe | |
User |
Felhasználónév | -l janos vagy janos@ |
Port |
Az SSH port, ha nem 22 | -p 2222 |
IdentityFile |
A privát kulcs fájlja | -i ~/.ssh/kulcs |
IdentitiesOnly yes |
Csak a megadott kulcsot próbálja | |
ServerAliveInterval |
Életjel küldése másodpercenként | -o ServerAliveInterval=60 |
ProxyJump |
Csatlakozás egy köztes gépen keresztül | -J bastion |
LocalForward |
Helyi porttovábbítás | -L 8080:127.0.0.1:80 |
DynamicForward |
SOCKS proxy | -D 1080 |
ControlMaster, ControlPath, ControlPersist |
Egy kapcsolat megosztása több munkamenet között |
A beállítások nevében a kis- és nagybetű nem számít (hostname és HostName ugyanaz). A teljes lista a man ssh_config paranccsal olvasható.
Kulcsok: IdentityFile és IdentitiesOnly
Ha több kulcsod van, az IdentityFile adja meg, melyiket használja a kliens az adott szerverhez. Az IdentitiesOnly yes nélkül a kliens előbb az SSH ügynökben (ssh-agent) tárolt és az alapértelmezett nevű kulcsokat (~/.ssh/id_ed25519, ~/.ssh/id_rsa stb.) is végigpróbálja. Sok kulcs esetén a szerver még a megfelelő kulcs előtt bonthatja a kapcsolatot a Too many authentication failures hibával, mert a sikertelen próbálkozások számát korlátozza.
Host github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
Kulcspárt az ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_web paranccsal hozhatsz létre, a nyilvános kulcsot pedig az ssh-copy-id -i ~/.ssh/id_ed25519_web.pub web1 paranccsal másolhatod fel. A kulcsos belépés beállításának lépései a Hogyan csatlakozzak a VPS-emhez SSH-n keresztül? cikkben vannak.
Minták és a sorrend: az első találat érvényes
A Host után több nevet és mintát is megadhatsz: a * tetszőleges karaktersorozatot, a ? egy karaktert jelent, a ! kizár.
Host web1
HostName 203.0.113.10
Host web2
HostName 203.0.113.11
# Minden web kezdetű gépre
Host web*
User deploy
Port 2222
# Minden gépre, kivéve a régi szervert
Host * !regi-szerver
ServerAliveInterval 60
A kliens a fájlt felülről lefelé olvassa, és minden beállításnál az első talált értéket használja; a később következő, szintén illeszkedő blokkok ugyanazt a beállítást már nem írják felül, csak a még meg nem adottakat töltik ki. A fenti példában a web1 a saját blokkjából kapja a címet, a web* blokkból a felhasználót és a portot, a Host * blokkból az életjelet.
Ebből következik a legfontosabb szabály: az általános Host * blokk a fájl végére kerüljön. A teszten egy User root sort tartalmazó Host * blokkot a fájl elejére téve a web1 is root felhasználót kapott, hiába állt a saját blokkjában User admin.
A parancssorban megadott kapcsolók mindent felülírnak: az ssh -l janos web1 a fájltól függetlenül a janos felhasználóval csatlakozik.
Keepalive: ne szakadjon meg a tétlen kapcsolat
Ha a kapcsolat néhány perc tétlenség után Broken pipe vagy Connection reset hibával megszakad, általában egy útválasztó vagy tűzfal bontja a forgalom nélküli kapcsolatokat. A ServerAliveInterval megadott másodpercenként életjelet küld a titkosított csatornán, így a kapcsolat nem tűnik tétlennek:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
A ServerAliveCountMax 3 azt jelenti, hogy három megválaszolatlan életjel után (itt kb. három perc) a kliens bontja a kapcsolatot, így egy valóban elérhetetlenné vált szervernél sem marad végtelenül lefagyva a terminál.
ProxyJump: csatlakozás egy köztes gépen keresztül
Ha egy szerver nem érhető el közvetlenül az internetről, csak egy köztes gépről (bastion, jump host), a ProxyJump egy lépésben átvisz rajta:
Host bastion
HostName bastion.pelda.hu
User janos
IdentityFile ~/.ssh/id_ed25519_web
Host belso
HostName 10.0.0.5
User janos
IdentityFile ~/.ssh/id_ed25519_web
ProxyJump bastion
Az ssh belso először a bastion géphez csatlakozik, majd azon keresztül egy titkosított csatornát nyit a belső gép 22-es portjára. Mindkét gépre a saját gépedről, a saját kulcsoddal jelentkezel be: a privát kulcs nem kerül a köztes gépre, és ügynöktovábbításra (ForwardAgent) sincs szükség.
A teszten a macOS-es kliens egy AlmaLinux 10.2 gépen keresztül ért el egy Debian 13 gépet, amelynek a címe a kliensről közvetlenül nem volt elérhető (ssh -o ProxyJump=none belso időtúllépéssel hibát adott). A ssh -v belso kimenete megmutatja a köztes lépést is (a címeket a fenti példához igazítottuk):
debug1: Setting implicit ProxyCommand from ProxyJump: ssh -v -W '[%h]:%p' bastion
Authenticated to bastion.pelda.hu ([203.0.113.20]:22) using "publickey".
Authenticated to 10.0.0.5 (via proxy) using "publickey".
Több köztes gépet vesszővel adhatsz meg (ProxyJump bastion1,bastion2), alkalmi használatra pedig a -J kapcsoló is elég: ssh -J bastion janos@10.0.0.5.
Porttovábbítás: LocalForward és DynamicForward
Egy csak a szerveren, helyben (127.0.0.1) figyelő szolgáltatást, például egy adatbázist vagy egy webes kezelőfelületet, a saját gépedről is elérhetsz egy SSH-alagúton keresztül:
Host web1-alagut
HostName 203.0.113.10
User janos
IdentityFile ~/.ssh/id_ed25519_web
# A saját gép 8080-as portja -> a szerver 127.0.0.1:8000
LocalForward 8080 127.0.0.1:8000
# SOCKS proxy a saját gép 1080-as portján
DynamicForward 1080
# Az alagút felépítése a háttérben, parancssor nélkül
ssh -f -N web1-alagut
# A szerver 8000-es portja most a saját gépen érhető el
curl http://127.0.0.1:8080/
A teszten a kliens a 8080-as és az 1080-as portot csak a 127.0.0.1 és a ::1 címen nyitotta meg, így a hálózat többi gépe nem érte el. A curl http://127.0.0.1:8080/ és a curl --socks5-hostname 127.0.0.1:1080 http://localhost:8000/ is a szerveren csak helyben futó webszerver oldalát adta vissza. A SOCKS proxy böngészős használatát az SSH SOCKS proxy létrehozása Linux szerveren keresztül cikk írja le.
A háttérben futó alagutat a folyamat leállításával zárhatod le, vagy ha a lent leírt megosztott kapcsolatot is használod, az ssh -O exit web1-alagut paranccsal.
Megosztott kapcsolat: ControlMaster
Ha sokszor csatlakozol ugyanahhoz a szerverhez (sok scp, rsync vagy git művelet, több terminálablak), az első kapcsolatot nyitva tarthatod, és a továbbiak ezen keresztül, új bejelentkezés nélkül indulnak:
mkdir -p ~/.ssh/cm
chmod 700 ~/.ssh/cm
Host *
ControlMaster auto
ControlPath ~/.ssh/cm/%r@%h:%p
ControlPersist 10m
A ControlPath a megosztott kapcsolat socketfájlja (%r a felhasználó, %h a cím, %p a port), a ControlPersist 10m pedig azt jelenti, hogy az utolsó munkamenet bezárása után még tíz percig nyitva marad a kapcsolat. A teszten az első ssh web1 true 0,13 másodpercig tartott, a második a megosztott kapcsolaton 0,006 másodpercig; egy távoli szervernél, jelszavas kulccsal vagy kétlépcsős azonosítással a különbség sokkal nagyobb.
# Fut-e megosztott kapcsolat?
ssh -O check web1
# A megosztott kapcsolat lezárása
ssh -O exit web1
A megosztott kapcsolaton keresztül indított munkamenetek a fő kapcsolattal együtt szakadnak meg. A Windows beépített OpenSSH kliense a Win32-OpenSSH projekt leírása szerint ezt a funkciót nem támogatja (ezt nem próbáltuk ki), ott hagyd ki ezeket a sorokat.
Include: a beállítások több fájlban
Sok szerver esetén a bejegyzéseket külön fájlokba is szervezheted:
Include config.d/*.conf
Host *
ServerAliveInterval 60
A relatív útvonal a ~/.ssh könyvtárhoz képest értendő, így a fenti sor a ~/.ssh/config.d/ könyvtár .conf végű fájljait olvassa be. Az Include sort a fájl elejére, minden Host blokk elé tedd: egy Host blokkon belül álló Include csak akkor érvényes, ha az a blokk illeszkedik. A teszten egy Host a blokk után álló Include fájl Host b bejegyzése hatástalan maradt, a fájl elejére téve működött.
Mi lesz a tényleges beállítás? ssh -G
Ha nem vagy biztos benne, melyik blokk melyik értéke érvényes, az ssh -G kiírja az adott névre ténylegesen használt összes beállítást, csatlakozás nélkül:
ssh -G web1 | grep -E '^(hostname|port|user|identityfile|proxyjump) '
Ez a legjobb módja a sorrendből vagy egy elgépelt mintából eredő hibák megtalálásának. A tényleges kapcsolódás lépéseit az ssh -v web1 mutatja.
Jogosultságok: “Bad owner or permissions”
Az SSH kliens nem hajlandó olyan config fájlt használni, amelyet más felhasználó is módosíthat. Ilyenkor ezzel a hibával áll le:
Bad owner or permissions on /home/janos/.ssh/config
A teszten ezt a 666-os, és mivel a felhasználó elsődleges csoportjának más tagja is volt, a 664-es jogosultság is kiváltotta. A javítás:
chmod 600 ~/.ssh/config
chmod 700 ~/.ssh
A fájl tulajdonosa is te legyél (chown $USER ~/.ssh/config), ha például sudo-val szerkesztetted és a root tulajdonába került. A jogosultságokról bővebben: Fájljogosultságok (chmod, chown) Linuxon.
A rövid név más programokban
A config fájlt minden OpenSSH-ra épülő program olvassa, így a rövid név mindenhol működik, ahol egy szervercímet kell megadni:
# Fájlmásolás
scp mentes.tar.gz web1:/home/janos/
rsync -av ./public/ web1:/var/www/html/
sftp web1
# Git tároló a szerveren
git clone web1:repo.git
A teszten mindegyik működött; az rsync csak azután, hogy a Debian szerverre is telepítettük az rsync csomagot (a Debian 13 cloud image-en alapból nincs rajta, és az rsync mindkét oldalon szükséges). A fájlmásolás részleteit a Fájlok másolása szerverek között (scp, rsync, sftp) cikk mutatja be.
A dokumentációjuk szerint a Visual Studio Code Remote - SSH bővítménye is ebből a fájlból olvassa a gépeket (a Remote-SSH: Connect to Host... listájában a Host nevek jelennek meg), ahogy sok grafikus SFTP-kliens és terminálprogram is.
Teljes példa
Include config.d/*.conf
Host web1
HostName 203.0.113.10
User janos
Port 2222
IdentityFile ~/.ssh/id_ed25519_web
IdentitiesOnly yes
Host bastion
HostName bastion.pelda.hu
User janos
IdentityFile ~/.ssh/id_ed25519_web
Host belso
HostName 10.0.0.5
User janos
IdentityFile ~/.ssh/id_ed25519_web
ProxyJump bastion
Host db-alagut
HostName 203.0.113.10
User janos
Port 2222
IdentityFile ~/.ssh/id_ed25519_web
LocalForward 3307 127.0.0.1:3306
# Az általános beállítások mindig a végére
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
ControlMaster auto
ControlPath ~/.ssh/cm/%r@%h:%p
ControlPersist 10m
