Altera o ssh ControlPath com declaração específica do host

2

Eu tenho uma situação em que preciso acessar o mesmo host SSH (GitHub) com duas chaves SSH diferentes. Isso não é problema e eu posso configurá-lo facilmente, aliasando o nome do host. O problema surge quando essa configuração é combinada com minha configuração de multiplexação de SSH. Não consigo substituir meu ControlPath padrão por uma declaração específica do host.

Talvez seja assim que funciona? Talvez seja um bug? Estou fazendo algo errado?

Eu estou no Mac 10.7 pelo caminho.

Aqui está minha configuração:

Host *
  ControlMaster auto 
  ControlPath ~/.ssh/connections/ssh-%r@%h:%p

Host github.com-X
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa_X
  IdentitiesOnly yes 
  ControlPath ~/.ssh/connections/ssh-%r@%h-X:%p

Host github.com
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h

Eu modifiquei um pouco, mas parece que sempre recebo o ControlPath conforme especificado na declaração Host *.

ssh -T [email protected]

Faz o login como o usuário correto usando id_rsa_X, mas cria o soquete de domínio aqui:

~/.ssh/connections/[email protected]:22

Em vez de:

~/.ssh/connections/[email protected]:22

Então, mais tarde, quando tento emitir um comando SSH usando id_rsa, recebo o usuário id_rsa_X devido à multiplexação de conexão. Em outras palavras:

ssh -T [email protected]

Me dá uma mensagem de saudação para o usuário cuja chave é id_rsa_X.

Alguma idéia?

EDIT: Resposta ao comentário por vgoff - Não, parece estar lendo todas as minhas configurações ...

$ ssh -vT [email protected]
OpenSSH_5.6p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/<username>/.ssh/config
debug1: Applying options for *
debug1: Applying options for github.com-X
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/<username>/.ssh/connections/[email protected]:22" does not exist
<snip>

Você pode ver que ele leu todas as configurações e tenta usar o ControlPath incorreto.

    
por petrsnd 10.10.2013 / 06:51

1 resposta

5

Você precisa mover as opções menos específicas mais abaixo em ~/.ssh/config . As opções Host * são aplicadas primeiro e não são sobrescritas por opções posteriores, conflitantes, mesmo que sejam mais específicas. No entanto, novas opções que não foram especificadas em Host * serão aplicadas e acho que foi isso que você viu no seu log.

Fonte: link

ssh(1) obtains configuration data from the following sources in the following order:

  1. command-line options
  2. user's configuration file (~/.ssh/config)
  3. system-wide configuration file (/etc/ssh/ssh_config)

For each parameter, the first obtained value will be used. The configuration files contain sections separated by ''Host'' specifications, and that section is only applied for hosts that match one of the patterns given in the specification. The matched host name is the one given on the command line.

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.

    
por 09.12.2013 / 16:21