Come importare la config SSH in un gestore di configurazioni SSH

Elenca gli host veri di ~/.ssh/config e di ogni file indicato da Include, poi esegui ssh -G nome per ciascuno e vedi indirizzo, porta, utente, chiave e jump host che ssh usa davvero. È questa vista risolta che un import deve riprodurre. Prima fai una copia del file, delle chiavi e di known_hosts, e usa un CSV quando i server stanno in un foglio di calcolo.

Aggiornata il . Eseguito su macOS 27 con OpenSSH 10.3 su una config di prova con Include, ProxyJump, LocalForward e Host *: l'elenco degli host con awk, ssh -G per ogni host e il ciclo per il CSV sono stati eseguiti, e l'output è mostrato con indirizzi di esempio.

Cosa c'è in un file di configurazione

Prima di spostare una config, sappi cosa vuol dire ogni parte, perché solo una parte descrive server:

Include config.d/*

Host web
  HostName 203.0.113.10
  User deploy
  Port 2222
  IdentityFile ~/.ssh/id_ed25519_work
  ProxyJump bastion
  LocalForward 5433 localhost:5432

Host *
  ServerAliveInterval 60
  • Host web è un server: un nome che scrivi, con il suo indirizzo e le sue impostazioni.
  • Host * e gli altri pattern come *.example.com non sono server. Aggiungono valori predefiniti a ogni host che corrisponde.
  • Include carica altri file, qui ~/.ssh/config.d/*, come se fossero incollati in quel punto.
  • ProxyJump e le righe Forward collegano i server tra loro e ai tunnel.

Per ogni opzione ssh tiene il primo valore che legge, tra tutti i blocchi corrispondenti. La guida al file di configurazione SSH spiega questa regola con esempi.

Elencare ogni host, anche dei file Include

Un rapido grep Host perde i file inclusi e mescola server e pattern. Questo elenca solo i nomi veri, dal file principale e da quelli inclusi:

awk 'tolower($1)=="host" { for (i = 2; i <= NF; i++) if ($i !~ /[*?!]/) print $i }' ~/.ssh/config ~/.ssh/config.d/*
web
bastion

Cambia il secondo percorso in base alle tue righe Include, o toglilo se non ne hai. Un nome che compare due volte è definito in due posti, e per ogni opzione vincono solo i valori del primo blocco.

Controllare ogni host con ssh -G

ssh -G stampa le impostazioni finali di un host, con tutti i file e i pattern applicati, e non si connette. È la verità che un import deve rispettare:

ssh -G web | grep -E '^(hostname|user|port|identityfile|proxyjump|localforward|remoteforward|dynamicforward) '
user deploy
hostname 203.0.113.10
port 2222
localforward 5433 [localhost]:5432
identityfile ~/.ssh/id_ed25519_work
proxyjump bastion

Cerca le sorprese: un user che arriva da Host *, un percorso di chiave che non esiste, o un jump host che non è nel tuo elenco. Per controllare che ogni file di chiave ci sia davvero:

ls -l ~/.ssh/id_ed25519_work ~/.ssh/id_ed25519_work.pub

I jump host hanno la loro guida, esempi di ProxyJump e jump host, e gli inoltri sono spiegati in tunnel SSH: locali, remoti e dinamici.

Fare una copia, poi esportare in CSV se serve

Tieni una copia di tutto ciò che un import legge, così puoi confrontare dopo e tornare indietro se serve:

mkdir -p ~/ssh-backup
cp -p ~/.ssh/config ~/.ssh/known_hosts ~/ssh-backup/
cp -rp ~/.ssh/config.d ~/ssh-backup/

Alcuni strumenti, e alcuni team, lavorano da un foglio di calcolo. Questo ciclo trasforma ogni host in una riga CSV con i valori che ssh usa davvero, in uno schema comune con le colonne di gruppi, tag e password lasciate vuote:

{
  echo 'Groups,Label,Tags,Hostname/IP,Protocol,Port,Username,Password'
  for h in $(awk 'tolower($1)=="host" { for (i = 2; i <= NF; i++) if ($i !~ /[*?!]/) print $i }' ~/.ssh/config ~/.ssh/config.d/*); do
    ssh -G "$h" | awk -v h="$h" '$1=="hostname"{n=$2} $1=="port"{p=$2} $1=="user"{u=$2} END{print ","h",,"n",ssh,"p","u","}'
  done
} > hosts.csv
Groups,Label,Tags,Hostname/IP,Protocol,Port,Username,Password
,web,,203.0.113.10,ssh,2222,deploy,
,bastion,,198.51.100.5,ssh,22,admin,

Cambia i percorsi nel ciclo come per l'elenco degli host. Compila gruppi come Acme e tag come prod in un foglio di calcolo prima di importare. Se hai aggiunto password al file, cancellalo quando hai finito.

Portare con sé known_hosts

Il tuo known_hosts contiene le impronte che hai già accettato. Importarlo vuol dire che la prima connessione dal nuovo strumento non ti chiede di nuovo di fidarti di ogni server. Per controllare che un host ci sia:

ssh-keygen -F 203.0.113.10
ssh-keygen -F '[203.0.113.10]:2222'

Un host su una porta diversa dalla 22 è salvato tra parentesi quadre con la porta, come nella seconda riga. Se HashKnownHosts è attivo, i nomi sono cifrati con hash e solo una ricerca come questa li trova. Altro in known_hosts spiegato.

Dopo l'import

  • Confronta qualche server con l'output di ssh -G: indirizzo, porta, utente, chiave e jump host.
  • Collegati a un server di ogni tipo: uno diretto, uno dietro un jump host, uno con un tunnel.
  • Tieni il file originale per scp, rsync e git, che continuano a leggerlo. L'import copia le impostazioni, non modifica ~/.ssh/config.
  • Ordina il risultato in gruppi e tag, come in come gestire molti server SSH.

I passaggi nell'app sono nella documentazione sull'import degli host.

Domande

Cos'è un gestore di configurazioni SSH?

Un'app che conserva le stesse cose di ~/.ssh/config, come indirizzi, utenti, porte, chiavi, jump host e tunnel, sotto forma di server salvati che modifichi da un modulo e ordini in gruppi, invece che blocchi in un file di testo.

I file Include vengono importati con ~/.ssh/config?

Dovrebbero, perché ssh li legge come parte del file. Prima di importare, controlla che ssh -G mostri le impostazioni che arrivano dai file inclusi, così sai cosa aspettarti.

I valori di Host * valgono per i server importati?

In ssh si applicano tutti i blocchi corrispondenti e vince il primo valore, quindi un server riceve i valori di Host * che non ha impostato da sé. ssh -G mostra il risultato finale per ogni host.

Posso importare host SSH da un file CSV?

Sì, se il gestore legge i CSV. Uno schema comune è Groups, Label, Tags, Hostname/IP, Protocol, Port, Username e Password, un server per riga.

Fonti

Altro in Configurazione e tanti server

Tutte le guide