Az SSH config fájl (~/.ssh/config) használata példákkal

Linux 9 perc olvasás

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.

Egy ~/.ssh/config fájl a web1 bejegyzéssel és a Host * blokkal, az ssh web1 hostname parancs és az ssh -G által kiírt tényleges beállítások AlmaLinux 10.2 rendszeren

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
Vissza: Linux leírások (76)