Meu problema é encontrar uma maneira de fazer o SSH em um servidor Linux (Ubuntu 18.04) cujo endereço IP muda diariamente.
Tenho um cliente que ocasionalmente ajudo nas tarefas administrativas. Preciso ssh na máquina quando eles precisam de ajuda, mas eles não têm um IP estático; portanto, o IP público do servidor está constantemente mudando. Criei um pequeno script para relatar o endereço IP da máquina Linux e descobri que ele muda uma vez por dia ao meio-dia.
Eu sou capaz de configurar o SSH e funciona local e remotamente ... até que o endereço IP mude. Quando isso acontece, não consigo mais me conectar remotamente, mesmo usando o novo endereço IP.
- Preciso reiniciar o serviço SSH toda vez que o endereço IP for alterado?
- Se sim, por quê?
- Há alguma outra ação que preciso tomar quando o endereço IP for alterado para permitir o acesso SSH?
ATUALIZAR
Para ficar claro, meu problema NÃO é encontrar o novo endereço IP. Eu tenho um script para fazer isso já. O problema é que o servidor para de responder quando o IP é alterado, mesmo que eu tente conectar usando o novo endereço IP.
Se eu reiniciar o serviço SSH na máquina de destino, tenho acesso remoto novamente. Mas não entendo por que devo fazer isso. Gostaria de conhecer a causa raiz na esperança de encontrar uma solução melhor.
A maioria das pessoas parece achar que o SSH deve funcionar enquanto conhecermos o novo IP, então isso é algo exclusivo da 18.04? Eu instalei este servidor para o cliente recentemente, portanto, todas as configurações ainda são padrão. (O não saberia como mudar isso.)
fonte
ListenAddress <dynamic host name>
no arquivo de configuração sshd, talvez porque alguém não queira que usuários internos possam fazer o ssh no servidor. Isso realmente exigiria reiniciar o servidor ssh toda vez que o IP mudar.Respostas:
As outras respostas parecem ter esquecido uma coisa em sua pergunta:
O DDNS ajudará você a descobrir o novo endereço IP, mas esse não parece ser o problema aqui.
Infelizmente, o servidor que está obtendo um novo IP não deve ser um problema na configuração padrão em que o ISP fornece um roteador, o servidor tem um endereço interno atrás do roteador e o roteador faz o encaminhamento de porta. Pode ser necessário fornecer mais informações sobre a topologia de rede para obter uma boa resposta.
O que eu poderia imaginar é que o servidor não está atrás de um roteador e faz sua própria conexão PPPoE; e a) a ligação do servidor ssh ao endereço de interface específico no ponto de reinicialização do servidor; b) um firewall na máquina que permite a entrada do ssh apenas o IP do servidor com o firewall não atualizando quando o IP é alterado.
Para verificar o primeiro caso, faça a
netstat -nta | grep -w 22 | grep LISTEN
. Se diz 0.0.0.0:22, tudo bem; se listar um IP específico, verifique o arquivo de configuração sshd (/etc/sshd.conf
)ListenAddress
.Para verificar o segundo caso, faça
iptables -L -n
e verifique se uma das regras daINCOMING
cadeia corresponde ao IP e à porta 22 do servidor.Se um deles tiver o endereço atual do servidor, será necessário alterá-lo para 0.0.0.0 (verifique as implicações de segurança) ou atualize a regra / configuração sempre que o IP for alterado.
Editar
Como o servidor está atrás de um roteador, as idéias acima provavelmente não se aplicam (*). Nesta configuração, o roteador possui um IP externo (que muda diariamente) e seus dispositivos internos devem ter alguns endereços 10.xyz ou 192.168.xy que não devem ser alterados. Você se conecta ao endereço externo e o roteador deve ter uma regra de encaminhamento de porta para o endereço interno.
Esse encaminhamento de porta não deve ser interrompido quando o IP externo for alterado (as conexões ssh existentes serão eliminadas no entanto), mas talvez seja uma regra que não foi configurada por você, mas por alguma mágica do UPNP, com o roteador descartando o UPNP quando obtiver um novo endereço e sshd invocando a regra somente quando reiniciar. Você mesmo configurou um encaminhador de porta no roteador.
Ou, é o IP interno do servidor que muda - nesse caso, algo está gravemente quebrado com o seu DHCP. Dê ao seu servidor um endereço interno fixo.
Ou você está usando IPV6? Existem algumas configurações em que um dispositivo continua alterando seu IP para facilitar o rastreamento. Veja, por exemplo, https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - mas, nesse caso, tenha vergonha de não mencioná-lo em sua postagem original. Isso pode significar que seu roteador não está executando o NAT, e minhas idéias originais ainda são válidas mesmo atrás de um roteador.
fonte
O DNS dinâmico é uma opção, outra é receber o correio do servidor ou enviar seu IP. Uma simples chamada HTTP serviria (para um terminal em que você controla e registra solicitações).
Também é possível resolver toda a rede pública ao contrário; o servidor pode configurar um túnel reverso ou uma conexão VPN, que não será afetada pela alteração de IP.
Em relação aos serviços que não respondem ao novo endereço: isso depende completamente da configuração da sua rede. Por exemplo: IP da WAN em uma interface interna via DHCP e um servidor SSH configurado para ouvir apenas o IP na sua interface conhecida na inicialização significaria que o sshd deve ser reiniciado nas alterações na interface.
fonte
Você realmente deve procurar serviços de DNS. Na medida em que é possível conectar remotamente a uma determinada máquina com endereço IP dinâmico; ddns é a solução mais usada.
vá para https://noip.com e inscreva-se em uma conta (é, err ... supostamente ... coff .. cof .. Grátis para 1-3 máquinas rodando na mesma rede (se não me engano, não cite eu aqui: já faz algum tempo que não confio em nenhum desses serviços 'gratuitos' ...). Existem também outras alternativas, como o Afraid DNS ( https://freedns.afraid.org/ E mesmo, o Open DNS da Cisco: também pode ser utilizado (desde que este não seja seu único cliente, sugiro que você se inscreva em uma avaliação abrangente da conta, faça uma rodada e depois se inscreva para o verdadeiro deal >>> eles ainda têm uma dessas extensões para download, semelhantes a GUI, que renovariam automaticamente o nome do host ddns sempre que o IP de seus clientes mudasse. É realmente, a maneira mais fácil e experiente que não conheço a tecnologia. caso você precise ligar para um de seus clientes e pedir para baixar a GUI ...])
fonte
Às vezes, leva algum tempo para que as alterações no DHCP entrem em vigor. Tente reciclar o cliente DHCP na máquina de destino
Não. Você só precisa reciclar seu serviço ssh quando a configuração for alterada (
/etc/ssh/sshd_conf
).Não.
Eu tenho uma solução que supõe que você tenha o sendmail configurado em sua máquina de destino.
Este script envia um email que mostra o endereço IP que o mundo pensa que temos (Obrigado ipify.org). O email sempre terá o endereço IP mais atual.
Coloque o script em
/etc/dhcp/dhclient-exit-hooks.d
Se isso não funcionar, você sempre pode configurar um cron para enviar o endereço IP atual (perca a instrução de caso).
fonte
Pensando fora da caixa - você poderia organizar um endereço IPv6 fixo? Geralmente, são apenas os endereços IPv4 que precisam ser alterados devido à sua escassez.
fonte
O que venho fazendo há quase um ano. Encontrei seu problema em janeiro deste ano enquanto fazia um discurso na minha universidade local.
Este script está em execução na minha máquina desde então: // Praticamente auto-explicativo //
O Python 3.x deve funcionar perfeitamente Talvez não seja a melhor solução, mas funciona.
Você receberá um email na sua Caixa de entrada sempre que o IP público da máquina for alterado.
Agora, com relação às suas perguntas:
Preciso reiniciar o serviço toda vez que o endereço IP mudar? Se, reiniciando o serviço, você quer dizer restabelecer a conexão ssh, sim.
Se sim, por quê? Porque se o endereço com o qual você está tentando se comunicar não fornecer mais o serviço que você está procurando. Não é mais sua máquina.
Há alguma outra ação que preciso tomar quando o endereço IP for alterado para permitir o acesso SSH? Apenas SSH para o novo endereço.
Felicidades! JSR
fonte
Vale a pena ver isso de um lado diferente: geralmente, é muito mais simples criar uma conexão externa a partir da máquina que requer sua atenção (DNS, NAT e outras configurações de firewall não importam nada ou são muito mais simples).
Você pode usar isso para estabelecer uma solução simples e à prova de balas para entrar em uma máquina remota
R
. O único requisito é que você possa fornecerssh
acesso público a uma de suas próprias máquinas locais (vamos chamá-loS
). Em seguida, proceda da seguinte maneira:Crie uma
ssh
conexão externa deR
paraS
, estabelecendo um túnel reverso de volta paraR
:ssh -L 22:<address-of-S>:22000
Em
S
, use o túnel reverso parassh
dentro da máquina remotaR
:ssh -p 22000 127.0.0.1
A etapa 1 pode ser acionada manualmente e sob demanda pelo lado remoto sempre que sua assistência for necessária. Como alternativa, você pode criar um serviço
R
que manterá continuamente esse túnel reverso paraS
.Usei essa configuração para fazer login em sistemas remotos (móveis) protegidos por firewalls / NAT e que não possuíam nenhuma entrada DNS.
fonte
Se você só precisa de login remoto, use mosh . Além de ser capaz de lidar de maneira excelente com alterações de IP (com quase nenhuma latência durante o switch), ele também tem outras vantagens em relação à simples
ssh
, como eco preditivo local, baixa latência, recuperação muito mais rápida de links quebrados.Se você precisar especificamente
ssh
(por exemplo, de encaminhamento X11 ou algo assim), sugiro configurar a VPN (por exemplo, OpenVPN), preferencialmente sobre UDP, com uma curta manutenção da atividade. As conexões TCP (ou seja, seu ssh) pela VPN serão recuperadas e permanecerão conectadas após a alteração do IP; levará apenas mais tempo (até um minuto ou mais), mas você pode jogar com/proc/sys/net/ipv4/tcp_*
entradas para torná-la mais aceitável.Editar:
ssh
de autenticação, mas uma vez autenticada, a conexão permanece até você sair (ou reiniciar) e você pode investigar a falhassh
quando quiser (por exemplo, strace -f -p pid_of_sshd )mosh
semssh
, resposta adaptada daqui :No servidor, execute:
você obtém um resultado como
QzdRHbAWzL7eRobi75DCrz
Na execução do cliente:
Observe que
$serverip
deve ser um ip, sem resolução de nome de host.A decisão de como você pega a chave de um lado para o outro é sua. Eu sugiro criptografar com uma chave pré-compartilhada e enviar mensagens instantâneas, enviar correspondência ou fazer com que um usuário local dite isso por telefone.
ssh
, instaleinetd
e execute o ssh a partir daí, não como um daemon independente, por exemplo, nesta linha de configuração do inetd.conf "clássico", isso executará um novo daemon sempre que você efetuar login (observe que nem todos garfos inetd manipulam ipv6):ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i
fonte