Posso configurar o ubuntu para anexar um domínio ao final de uma solicitação de nome de host ssh?


9

Eu tenho muitos servidores e todos terminam com o mesmo servers.company.net, por exemplo, vded-xx-001.servers.company.net, e queria saber se é possível fazê-lo para que eu possa digitar apenas o vded- xx-001 e anexa automaticamente o servers.company.net?

Então, eu gostaria de digitar

ssh user@vded-xx-001

e tê-lo realmente conectado a

ssh user@vded-xx-001.servers.company.net

Tentei configurar meu domínio de pesquisa de DNS como servers.company.net, em / etc / network / interfaces, mas isso não alcançou o resultado desejado.

Alguém capaz de me apontar na direção certa?

desde já, obrigado


Existe algum motivo para você não poder simplesmente adicionar search company.netao /etc/resolv.conf?
Hennes

@Hennes A adição da pesquisa company.net e servers.company.net ao resolv.conf funcionou. No entanto, há um aviso na parte superior do arquivo de que minhas alterações serão substituídas; se este for o caso, como as tornarei permanentes?
precisa saber é o seguinte

1
Eu adoraria responder a essa e ancinho na rep extra, mas este post já responde a isso muito bem: :-) askubuntu.com/questions/157154/...
Hennes

Na verdade, ao contrário do que é discutido nessa pergunta, normalmente é melhor incluir uma lista de domínios de pesquisa em /etc/network/interfaces(usando uma dns-searchopção) ou no campo de configuração de conexão do NetworkManager Search domains.
Jdthood

Em vez de mexer na configuração do resolvedor local, esta solução é mais simples e portátil.
1811 OrangeDog

Respostas:


19

Provavelmente você já resolveu isso, mas talvez mais tarde isso possa ajudar alguém: você não precisa mexer no seu resolv.conf, apenas pode usar algo como isso em seu ~ / .ssh / config:

Host vded-*-001 test-*-something-fixed-*
        HostName %h.servers.company.net
        User someusername

Então, mais tarde, você pode simplesmente usar:

ssh vdev-alotofstuff-001
ssh vdev-somethingels-001
ssh test-02-something-fixed-somethingelse

Saudações,


Essa deve ser a resposta aceita.
Slm

Essa é uma maneira de resolver o problema, mas não resolve o problema da resolução de nomes em todo o sistema, apenas resolve o problema para nomes de host ssh. A melhor prática para mim é ser capaz de obter o systemwide hostname direita e não ter que personalizar um determinado serviço (ssh) para ser capaz de resolver determinados nomes de host
Philippe Gachoud

1
Apenas no caso de eu esquecer e procurar novamente mais tarde, se você quiser permitir nomes curtos e longos enquanto compartilha a mesma configuração, basta especificar uma primeira entrada Host vded-*.servers.company.net, com Hostname %h. Então, em uma segunda entrada Host vded-*com Hostname %h.servers.company.nete todos os outros parâmetros, como usuário, IdentityFile, etc.
bksunday

6

Esta é a solução mais fácil. Funciona para todos os hosts, não requer raiz ou acesso a nenhum sistema DNS / resolvedor.

Adicione ao topo do seu ~/.ssh/configarquivo (ou crie, se ele ainda não existir):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

Documentação ( man 5 ssh_config):

CanonicalizeHostname

Controla se a canonização explícita do nome do host é executada. O padrão, não , não é reescrever nenhum nome e deixar que o resolvedor do sistema lide com todas as pesquisas de nome de host. Se definido como sim , em seguida, para conexões que não usam um ProxyCommand , ssh tentará canonizar o nome do host especificado na linha de comando usando os CanonicalDomains sufixos e CanonicalizePermittedCNAMEs regras. Se CanonicalizeHostname estiver definido como sempre , a canonização também será aplicada às conexões com proxy.

Se essa opção estiver ativada, os arquivos de configuração serão processados ​​novamente usando o novo nome de destino para selecionar qualquer nova configuração nas sub- rotinas Host e Match .


Funciona melhor para mim. Você não precisa adicionar CanonicalDomains, apenas a 1ª linha. Dessa forma, funciona mesmo se você se conectar a outras redes.
Adam Wallner

2
@AdamWallner você não adicionar CanonicalDomains, ele funcionará apenas no domínio de pesquisa da rede atual. Se você o fizer (e puder listar vários), ele funcionará para resolver todos esses nomes de host, em qualquer rede à qual você possa se conectar.
1811 OrangeDog

2

Sim, você pode fazer isso criando um arquivo de configuração chamado ~/.ssh/confige inserindo o seguinte conteúdo:

Host vded-xx-001
User user
Port 22
HostName vded-xx-001.servers.company.net

Agora você só precisa digitar isso (você nem precisa mais do nome de usuário):

$ ssh vded-xx-001

Isso também funciona com o utilitário de linha de comando scp:

$ scp filename vded-xx-001:/path/

Estou ciente de que isso funciona para hosts individuais, mas eu tenho centenas e estava esperando que eu poderia criar uma regra que capta VDED- * e, em seguida, para o nome do host faz host.servers.company.net
Tim Lassie Freeborn

1
@ TimLassieFreeborn: você pode escrever um script que gere as entradas necessárias para o arquivo de configuração. Eu não sei se você pode fazê-lo dinamicamente, no entanto.
Flimm

@TimLassieFreeborn ver a minha resposta
OrangeDog

2

A solução para o meu problema foi adicionar o domínio de pesquisa a resolv.conf:

search servers.company.net

Isso me permitiu entrar

ssh user@vded-xx-001

para qualquer um dos meus servidores e ele se conecta ao endereço correto.

Obrigado @Hennes pela resposta


2
Supondo que você esteja executando o Ubuntu 12.04 ou posterior, não deve editar o /etc/resolv.conf diretamente porque o utilitário resolvconf gera esse arquivo. (Na verdade, ele gera /run/resolvconf/resolv.conf no qual o /etc/resolv.conf é um link simbólico.) Em vez disso, você deve definir as configurações de DNS através do configurador da interface, ifup ou NetworkManager. Ifup : edite / etc / network / interfaces e adicione uma dns-search servers.company.netlinha à sub-rotina da interface de rede externa da máquina. NM : adicione servers.company.netao Search domainscampo na guia IPv4 da conexão.
Jdthood 19/04

Se /etc/resolv.confnão houver um link simbólico ../run/resolvconf/resolv.confna sua máquina, execute sudo dpkg-reconfigure resolvconfpara restaurar o link simbólico.
Jdthood

1

Se você estiver usando identidades SSH - e com tantos servidores que vale a pena examinar -, como a OrangeDog disse, a configuração de CanonicaliseHostname e CanonicaliseDomains também permitirá a correspondência com uma entrada de autoridade de certificação nos hosts conhecidos

entrada known_hosts @ cert-Authority * .example.com ssh-rsa AAAddadfkjaeio ...

sem as opções da Canonicalise, você precisará usar "ssh host.example.com"

Com as opções da Canonicalise, "ssh myhost" corresponderá.

Eu teria adicionado isso como um comentário à resposta do OrangeDogs se o representante permitisse ...


0

Para uma solução rápida que funciona em diferentes programas, você também pode definir o domínio vded-xx-001para redirecionar para um endereço IP específico, editando /etc/hostspara incluir uma linha como esta:

173.194.41.90  vded-xx-001

Isso funciona no seu navegador: http://vded-xx-001/

Bem como com utilitários de linha de comando como SSH:

$ ssh user@vded-xx-001

(Eu pessoalmente prefiro a solução de configuração SSH .)


0

Para a resolução de nomes de domínio em todo o sistema, gosto de definir as coisas uma vez na minha rede. Então, eu defini no servidor DHCP o nome de domínio e o servidor DNS para que ele dê a todas as máquinas o direito, resolv.confincluindo

  • IP do servidor DNS primário
  • Domínio
  • diretiva de pesquisa

Isso depende do servidor DHCP e da configuração de rede que você deseja ... Pessoalmente, não gosto de configurações personalizadas da máquina quando é algo geral para a rede

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.