Múltiplos 'Host *' em ssh_config?

24

Meu entendimento da maneira como o ~ / .ssh / config funciona é que cada linha 'Host' entra em vigor para qualquer host correspondente após aquele ponto no arquivo de configuração.

Eu tenho vários servidores pessoais e servidores de trabalho aos quais preciso me conectar. Estou tentando fazer algo como o seguinte:

# General Settings
ControlMaster auto
ControlPath   ~/.ssh/controlmaster/%r@%h:%p
ForwardAgent  yes
ForwardX11    yes
GSSAPIAuthentication no
PubkeyAuthentication yes

# Personal Servers
Host *
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

Host host1
Hostname host1.com

Host host2
Hostname host2.com

# Work Servers
Host *
User alan.young
IdentityFile ~/.ssh/work_id_rsa

Host work1
Hostname work1.companyserver.com

Host work2
Hostname work2.companyserver.com

Host *
User devuser

Host dev1
Hostname dev1.companyserver.com

Host dev2
Hostname dev2.companyserver.com

Os documentos parecem indicar que host1 e host2 devem usar 'personal_id_rsa' e o harleypig do usuário. work1, work2, dev1 e dev2 devem usar 'work_id_rsa' e os dois primeiros devem ser o usuário 'alan.young' e dev1 e dev2 devem ser o usuário 'devuser'

No entanto, isso não está acontecendo. Seja qual for o host que eu coloquei primeiro é o que todos os hosts a seguir tentam se conectar. Eu estou entendendo mal ou sentindo falta de algo?

    
por harleypig 13.07.2011 / 03:12

2 respostas

31

Do ssh_config manual :

Since the first obtained value for each parameter is used, more host-specific declarations should be given near the beginning of the file, and general defaults at the end.

Portanto, no seu exemplo, todos os hosts usarão User harleypig e IdentityFile ~/.ssh/personal_id_rsa .

Pense nas diretivas Host com curingas como substitutos: use as seguintes configurações somente se ainda não tiverem sido definidas. Você precisa escrever algo assim:

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

Você pode colocar vários padrões em uma linha Host se um determinado conjunto de aliases de host não puder ser correspondido com curingas, por exemplo, Host host* more* outlier .

    
por 13.07.2011 / 14:58
13

Você definitivamente está fazendo errado.

  • Você deve sempre colocar Host * como a última entrada.
  • Você não pode ter várias entradas Host *

Se suas máquinas de trabalho tiverem um formato de nome que você pode generalizar para segmentar apenas as máquinas de trabalho, por exemplo: machine1.work.com, host.work.com, fileserver.work.com, você poderá segmentar suas máquinas de trabalho como :

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

O mesmo se aplica às suas máquinas pessoais.

    
por 13.07.2011 / 07:26

Tags