'Host *' multiplo in ssh_config?


27

La mia comprensione del modo in cui funziona ~ / .ssh / config è che ogni riga 'Host' ha effetto per qualsiasi corrispondenza host dopo quel punto nel file di configurazione.

Ho un numero di server personali e server di lavoro a cui devo collegarmi. Sto cercando di fare qualcosa di simile al seguente:

# Impostazioni generali
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent sì
ForwardX11 sì
GSSAPIA autenticazione n
PubkeyAutenticazione sì

# Server personali
Ospite *
Harleypig utente
IdentityFile ~ / .ssh / personal_id_rsa

Host host1
Nome host host1.com

Host host2
Nome host host2.com

# Server di lavoro
Ospite *
User alan.young
IdentityFile ~ / .ssh / work_id_rsa

Lavoro ospitante 1
Nome host work1.companyserver.com

Lavoro ospitante 2
Nome host work2.companyserver.com

Ospite *
Devuser dell'utente

Host dev1
Nome host dev1.companyserver.com

Host dev2
Nome host dev2.companyserver.com

I documenti sembrano indicare che host1 e host2 dovrebbero usare "personal_id_rsa" e l'utente harleypig. work1, work2, dev1 e dev2 dovrebbero usare 'work_id_rsa' e i primi due dovrebbero essere l'utente 'alan.young' e dev1 e dev2 dovrebbero essere l'utente 'devuser'

Tuttavia, questo non sta accadendo. Qualunque sia 'Host *' che metto per primo è ciò con cui tutti i seguenti host tentano di connettersi. Sto fraintendendo o perdendo qualcosa?


Grazie, tra entrambe queste risposte sono stato in grado di far funzionare le mie connessioni.
Harleypig,

Risposte:


36

Dal ssh_configmanuale :

Poiché viene utilizzato il primo valore ottenuto per ciascun parametro, dovrebbero essere fornite più dichiarazioni specifiche dell'host vicino all'inizio del file e impostazioni predefinite generali alla fine.

Quindi, nel tuo esempio, tutti gli host useranno User harleypige IdentityFile ~/.ssh/personal_id_rsa.

Pensa alle Hostdirettive con caratteri jolly come fallback: usa le seguenti impostazioni solo se non sono state ancora impostate. Devi scrivere qualcosa del genere:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

È possibile inserire più motivi su una Hostriga se un determinato set di alias host non può essere associato a caratteri jolly, ad es Host host* more* outlier.


15

Stai decisamente sbagliando.

  • Dovresti sempre inserire Host *come ultima voce.
  • Non puoi avere più Host *voci

Se le tue macchine di lavoro hanno un formato nome che puoi generalizzare per indirizzare solo le macchine di lavoro, ad esempio: machine1.work.com, host.work.com, fileserver.work.com, puoi scegliere come target le tue macchine di lavoro come:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

Lo stesso vale per le tue macchine personali.


Per me, mettere Host *all'inizio del file sembra funzionare bene. Forse il fatto che stai usando un carattere jolly supera il fatto che si tratta della prima voce quando le priorità?
Zaz,

A proposito, Host *.work.comè una sintassi non valida. Funziona solo al contrario:Host myserver*
Daniel Andrei Mincă,

3
@ MincăDanielAndrei funziona in entrambi i modi, è solo un'espressione jolly e puoi usarlo come qualsiasi altro jolly. Host git-codecommit. *. Amazonaws.com Questo è un esempio funzionante dal mio ~ / .ssh / config
Hameedullah Khan,

@HameedullahKhan sul serio, l'ho provato e non risponde. Se lo fai Host *subdomain.com, non risponderà.
Daniel Andrei Mincă,

1
@ MincăDanielAndrei Quel comportamento è documentato nelle pagine man, se non funziona (neanche per me) è un bug.
goetzc,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.