Como ssh para servidores internamente por nome de host sem nome de domínio?

10

Preciso fazer login em vários servidores no trabalho para concluir meu trabalho. Estou cansado de digitar o FQDN de um servidor para acessar. Estou efetuando login / logout via ssh em nossa própria rede privada. Tenho 99% de certeza de que está em nossa própria rede privada, porque todos os servidores têm endereço IP 10.xyz. Existe uma maneira de ssh em servidores com apenas o nome do host e não o nome do domínio?

Temos servidores em vários países. A maneira como nossos servidores são nomeados é muito longa. É nomeado da seguinte forma:

hostname.country.domainname.com

Estou recebendo o túnel do carpo digitando ssh [email protected]

... sempre que acesso um de nossos servidores. Se eu estiver nos EUA e tentar acessar outro host que esteja nos EUA, basta digitar ssh me@hostname2e me conectar bem. No entanto, se estou nos EUA e tentar me conectar a um servidor na Inglaterra, não consigo digitar ssh [email protected]e me conectar hostname3.

A solução alternativa que fiz foi configurar um alias no meu arquivo ~ / .ssh / config para alguns servidores. No entanto, não acho viável adicionar mais de 1000 servidores a esse arquivo. Eu já adicionei mais de 20 servidores e meus colegas de trabalho acham que eu sou louco, embora eu ache que eles são loucos por digitar o FQDN quando estão procurando.

Existe uma maneira fácil de configurar algo para que não tenhamos que digitar nosso domainname.com toda vez?

Classificado
fonte

Respostas:

18

Você pode curinga e usar %hem sua configuração

por exemplo

Host *.eng
  Hostname %h.domainname.com

Agora, quando você fizer ssh foo.engisso, tentará se conectar foo.eng.domainname.com.

Você também pode adicionar outras opções a esta configuração; por exemplo, forçando o nome de usuário

Host *.eng
  Hostname %h.domainname.com
  User me

Agora, quando você fizer ssh foo.engisso, tentará se conectar foo.eng.domainname.comcomo usuário me.

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(bem, obviamente, recebo um erro antes que não seja um nome de host válido para mim!)

Então agora você precisa apenas de uma regra por país.

Stephen Harris
fonte
Meu primeiro pensamento foram aliases de DNS, o segundo foi o arquivo hosts, mas senti falta de vários servidores. Esta solução parece excelente. Qual configuração obtém as linhas que você postou?
Xalorous 22/09/16
Esta vai para $HOME/.ssh/configou você pode fazê-lo de todo o sistema em/etc/ssh/ssh_config
Stephen Harris
Isso funciona user@*.eng?
Xalorous
3
Com a regra que escrevi, você pode fazer ssh [email protected]e funcionará conforme o esperado. Tudo isso é reescrever o componente hostname. Ele vai mesmo trabalhar com scpe sftpe assim por diante.
Stephen Harris
9

Se você adicionar

search domainname.com

para /etc/resolv.conf, ea utilização hostname.country, ssh(e outros programas de rede, para que o assunto) será automaticamente anexar domainname.compara você 1 .

Não acho que a adição de domínios de países diferentes ao seu searchcaminho seja uma boa ideia, pois você pode ter um comportamento inesperado se dois servidores em dois países diferentes compartilharem o mesmo nome de host 2

Acredito que esse método é melhor do que alterar a sshconfiguração, pois isso permite hostname.countryresolver independentemente do programa que você está usando ( telnet, VNC, ...).

Vejo resolv.conf(5)


1 Mais precisamente, ele será anexado domainname.comse não puder ser resolvido hostname.countrypor si só.

2 Nesse cenário hostname, o servidor será resolvido no país cujo domínio está listado primeiro no searchcaminho.

Joseph R.
fonte
2
BTW, você também pode fazer isso como não raiz e por processo pela variável env LOCALDOMAIN. man resolv.conf
rudimeier 22/09/16
Isso funciona para resolver o host SSH, mas se você estiver usando o GSS / Kerberos, os nomes não corresponderão e a falha de authing.
Nick T
7

Você pode usar a CanonicalDomainsopção na sua configuração ssh.

Adicionar o seguinte ao seu arquivo de configuração ssh fará com que o ssh tente anexar domainname.coma qualquer host que tenha no máximo 1 ponto em seu nome:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Com esta configuração ssh foo.eng, tentará primeiro foo.eng.domainname.come faça o fallback para foo.engse o host não puder ser encontrado. Da mesma forma, ssh github.comvocê tentará primeiro github.com.domainname.com; portanto, se você deseja se conectar ao GitHub, seu servidor DNS não deve retornar registros para hosts inexistentes.

O CanonicalizeMaxDotspode ser usado para controlar quantos pontos podem aparecer no hostname antes ssh considera totalmente qualificado e não acrescentar domainname.com. o padrão é 1, o que deve ser suficiente para você, considerando o esquema que você possui atualmente, mas se você chegar a algo como hostname.city.countryisso, precisará aumentá-lo.

user2313067
fonte