Parar a configuração do ssh na primeira partida

18

Eu adicionei um proxy local para todos os meus hosts na minha configuração .ssh, no entanto, quero fazer shell no meu vm local sem o comando proxy. Saída da minha tentativa ssh:

debug1: /Users/bbarbour/.ssh/config line 1: Applying options for local.dev
debug1: /Users/bbarbour/.ssh/config line 65: Applying options for *

Dada a seguinte configuração do ssh, como evito que o ProxyCommand seja aplicado à entrada local.dev?

Host local.dev
    HostName dev.myserver.com
    User developer
...
Host *
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p
Bill Caldeira
fonte

Respostas:

22

Você pode excluir local.dev do ProxyCommand, usando !antes dele:

Host * !local.dev
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p

Da documentação ssh_config :

Se mais de um padrão for fornecido, eles deverão ser separados por espaços em branco.

Uma entrada de padrão pode ser negada prefixando-a com um ponto de exclamação (`! ') . Se uma entrada negada for correspondida, a entrada Host será ignorada, independentemente de outros padrões na linha corresponderem. Portanto, correspondências negadas são úteis para fornecer exceções para correspondências curinga.

A documentação também dizia:

Para cada parâmetro, o primeiro valor obtido será usado . Os arquivos de configuração contêm seções separadas por especificações de `` Host '', e essa seção é aplicada apenas a hosts que correspondem a um dos padrões fornecidos na especificação. O nome do host correspondente é o fornecido na linha de comando.

Portanto, você também pode desativar o ProxyCommand para local.dev substituindo o valor que você definiu em Host *:

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none
cuonglm
fonte
8

Uma opção no arquivo de configuração é aplicada na primeira vez em que corresponde. Como você não possui nenhum ProxyCommand na entrada do host, aquele na sua* será utilizado entrada.

Existem duas maneiras de contornar isso:

  • Para os hosts em que você não deseja usar o comando proxy, basta adicionar a linha
    ProxyCommand nenhum
  • Para a *entrada, observe especificamente que a entrada não deve ser aplicada ao host local.devnegando-o com um!
    Host! Local.dev *
Jenny D
fonte
para separar vários hosts, use espaço. vírgula (,) não funcionou para mim. ID do Distribuidor: Ubuntu Descrição: Ubuntu 17.10 Lançamento: 17.10 Nome de código: artful
Aruna
Obrigado @ArunaFromLK - Não acredito que perdi isso e que ninguém mais viu isso em 3,5 anos! Atualizei a resposta agora.
Jenny D