~/.ssh/config în Linux / Bash

Rețea și transfer date OpenSSH (ProxyJump din 7.3)

Fișierul de configurare al clientului SSH: nume scurte pentru servere, utilizator, port și cheie implicite.

Sintaxă comandă
Host ALIAS
    HostName ADRESĂ
    User UTILIZATOR
    Port PORT
    IdentityFile ~/.ssh/CHEIE

Ce face ~/.ssh/config

În loc să scrii de fiecare dată ssh -p 2222 -i ~/.ssh/id_ed25519_iasi ana@203.0.113.10, pui aceste setări o dată în ~/.ssh/config sub un nume scurt și rulezi ssh server-iasi. Același alias funcționează în scp, rsync și git.

Fișierul are blocuri Host, care pot folosi măști (*.dexblog.test, *). Pentru fiecare opțiune contează prima valoare găsită, de sus în jos, așa că blocurile specifice se pun primele și Host * la final. Comanda ssh -G ALIAS afișează configurația rezultată fără să se conecteze. Setările valabile pentru toți utilizatorii sunt în /etc/ssh/ssh_config.

Opțiuni și argumente

Opțiune / Parametru Descriere
Host ALIAS Începe un bloc pentru numele (sau masca) folosit în comanda ssh.
HostName Adresa reală (IP sau domeniu) a serverului.
User Utilizatorul folosit la conectare.
Port Portul SSH (implicit 22).
IdentityFile Cheia privată folosită pentru acest server.
IdentitiesOnly yes Încearcă doar cheia din IdentityFile, nu toate cheile din agent.
ProxyJump GAZDA Trece printr-un server intermediar (bastion) până la serverul final.
ServerAliveInterval SECUNDE Trimite un semnal periodic ca să nu se închidă conexiunile inactive.

Exemple

Exemplul 1: Un alias pentru serverul din Iași

-F alege fișierul de configurare (aici unul local, ca exemplul să nu atingă ~/.ssh), iar -G afișează setările finale fără conexiune. 2>/dev/null ascunde un mesaj despre terminal, care apare la unele versiuni când comanda rulează dintr-un script.

cat > config <<'EOF'
Host server-iasi
    HostName 203.0.113.10
    User ana
    Port 2222

Host *
    ServerAliveInterval 60
EOF
ssh -F ./config -G server-iasi 2>/dev/null | grep -E '^(user|hostname|port|serveraliveinterval) '

Rezultat

user ana
hostname 203.0.113.10
port 2222
serveraliveinterval 60

Exemplul 2: Prima valoare câștigă

Blocul Host * pune User root și Port 2222. Pentru server-iasi, User ana a fost găsit primul, deci rămâne; portul vine din Host *. Pentru web1.dexblog.test, utilizatorul vine din masca *.dexblog.test, iar HostName lipsește, deci se folosește chiar numele dat.

cat > config <<'EOF'
Host server-iasi
    HostName 203.0.113.10
    User ana

Host *.dexblog.test
    User deploy

Host *
    User root
    Port 2222
EOF
ssh -F ./config -G server-iasi 2>/dev/null | grep -E '^(user|port) '
echo ---
ssh -F ./config -G web1.dexblog.test 2>/dev/null | grep -E '^(user|hostname|port) '

Rezultat

user ana
port 2222
---
user deploy
hostname web1.dexblog.test
port 2222

Exemplul 3: Server intern accesat printr-un bastion

Cu ProxyJump, ssh baza-date se conectează întâi la bastion și de acolo mai departe, într-o singură comandă.

# în ~/.ssh/config:
# Host bastion
#     HostName 203.0.113.5
#     User ana
# Host baza-date
#     HostName 10.0.0.12
#     User ana
#     ProxyJump bastion
ssh baza-date hostname

Ieșire în terminal

db-iasi-01

Greșeli frecvente

  • Punerea blocului Host * la începutul fișierului: valorile lui câștigă în fața celor din blocurile specifice de mai jos.
  • Permisiuni prea largi pe fișier: SSH refuză un ~/.ssh/config pe care îl pot scrie și alții (Bad owner or permissions). Folosește chmod 600 ~/.ssh/config.

Comenzi înrudite

  • ssh: Conectează în siguranță un terminal criptat la distanță pe un alt server Linux.
  • ssh-keygen: Generează perechi de chei SSH (privată și publică), le schimbă parola și le afișează amprenta.
  • scp: Copiază fișiere în mod securizat între mașini diferite prin tunel criptat SSH.
  • rsync: Sincronizează fișiere și directoare rapid, transferând doar blocurile modificate (transfer delta).