Como posso forçar o SSH a ignorar o IdentityFile listado em “Host *” para um host específico?

0

Meu arquivo de configuração do SSH está configurado para usar um IdentityFile específico na seção Host * como a chave padrão. Para um host específico, desejo oferecer uma chave diferente (e somente essa chave, nunca a chave padrão).

Meu arquivo ~ / .ssh / config tem esta aparência:

Host specialhost
HostName specialhostname.mydomain.com
IdentityFile %d/.ssh/special-key
LogLevel debug
IdentitiesOnly yes 

Host *
IdentityFile %d/.ssh/regular-key
IdentitiesOnly yes 

Independentemente do que eu faça, ou independentemente da ordem das seções no arquivo de configuração, meu cliente SSH (OS X OpenSSH_6.2p2) oferece o 'regular-key' primeiro (que o servidor aceita, que não é o que eu queria).

A página do manual ssh_config indica o seguinte sobre IdentityFile :

It is possible to have multiple identity files specified in configuration files; all these identities will be tried in sequence.

A "sequência" a que se refere não está clara para mim, pois o IdentityFile listado na seção Host * é sempre oferecido primeiro, mesmo que "specialhost" esteja listado antes dele (como no exemplo acima). O truque IdentitiesOnly sugerido aqui só parece ser relevante para as chaves oferecidas por ssh-agent. Algumas outra similar questions não renderam quaisquer respostas.

Eu quero deixar a chave-normal na seção Host * porque eu uso essa chave com dezenas de outros hosts e não quero duplicar o IdentityFile em todas as entradas do host.

Existe alguma maneira de forçar o SSH a oferecer apenas a 'chave especial' usando apenas a configuração SSH (e sem copiar minhas diretivas IdentityFile para qualquer outro host)? Eu posso ver como eu poderia conseguir isso tirando as chaves da seção Host * , adicionando-as ao agente e usando IdentitiesOnly yes para specialhost, mas eu realmente preferiria evitar o uso de ssh-agent a menos que não houvesse outro jeito.

    
por Scott Dudley 02.01.2015 / 17:46

1 resposta

4

Uma linha Host pode ter mais de um padrão. E não está realmente escrito na documentação, mas um "!" (exclamação) no início de um padrão significa "se um host corresponde a este padrão, então não aplica a seção". Em outras palavras, você pode fazer isso:

Host * !special1 !special2
IdentityFile etc...

E deve corresponder a qualquer host, exceto "special1" e "special2".

Eu não acho que a ordem dos padrões seja importante. O nome do host que está sendo verificado deve corresponder a um padrão que não seja de exclamação e não deve corresponder a nenhum padrão de exclamação.

    
por 02.01.2015 / 19:42