Basicamente, eu quero poder fazer algo como o teamviewer, onde, independentemente da configuração da rede, desde que meu servidor ssh (Máquina A) e cliente ssh (Máquina B) tenham acesso à Internet (e algum terceiro servidor, Máquina C) ), Posso obter acesso - o motivo é que quero poder mover a máquina A, conectá-la à energia, conectá-la automaticamente a uma das várias redes wifi pré-configuradas (cada uma única / diferente) , sem ter configurado o encaminhamento de porta ou similar nas redes e poder fazer login nela pela Internet a partir da Máquina B
Como posso fazer isso? Não me importo de configurar algo em um servidor com um endereço IP estático para ajudar com o handshake, mas também não me importo com um servidor de terceiros, se algo já existir (como acontece com o teamviewer)
editar para maior clareza: tenho 3 máquinas, AB e C
A é um pi framboesa decapitado que será ligado / desligado em locais aleatórios, conecte-se a uma rede wifi pré-configurada
B é a máquina com um monitor, teclado, etc. adequados, dos quais quero conectar
C é um servidor AWS alugado que possuo com um endereço IP estático, pode fazer SSH de forma confiável a partir de B e pode instalar o que for necessário para ajudar B a se conectar a A
fonte
ssh
túneis, muito brevemente. Eu nunca consegui que eles ficassem acordados, mesmo comautossh
; se o uplink caísse por qualquer motivo, eles sempre teriam que ser reiniciados manualmente. Eventualmente, configurei uma pequena VPN para mim com o OpenVPN, e ele fez o trabalho bem.Respostas:
Como você possui a máquina C na Internet, crie uma conta especial com o nome lá
sesame
e, em A, crie uma conta com uma chave pública / privada da qual copiou a chave pública para asesame
conta em C.Agora você pode fazer login de A a C, mas, em vez de fazer isso, faça:
(você pode combinar isso com uma declaração de suspensão ou, por exemplo, 10 segundos e envolvê-la em um loop sem fim, para que a conexão seja restabelecida se o Wi-Fi desativado fizer com que ela se quebre)
Na máquina B, normalmente efetue login em qualquer conta que você tenha em C (pode ser, mas não precisa ser a
sesame
conta, contas diferentes são o que eu uso). E quando você estiver em C, faça o login em A usando:Obviamente, você pode usar um número diferente de 19930.
É possível executar o comando
ssh -N -R ...
from/etc/rc.local
se sua chave privada em A não estiver protegida por senha. Nesse caso, certifique-se de criarsesame
uma conta separada com funcionalidade limitada, para que, quando sua máquina A for comprometida / roubada, o risco para o servidor C seja limitado. É também por isso que recomendo usar uma conta separada para ir de B a C.Você pode realmente definir o shell de login para
sesame
nos/etc/passwd
para/bin/false
, então você não pode usar a conta de login.fonte
sesame
conta em C; pode ser que seja possível executá-la/bin/false
como shell de logon (já que o ssh nunca efetua login) ou limitá-la adicionando umcommand=
parâmetro em~/.ssh/authorized_keys
/bin/false
.ssh localhost -p portnum
claro)Instale um túnel IPv6 (como o Sixxs ) no seu Raspberry Pi. Agora você terá um endereço IPv6 estático permanente que ficará online sempre que seu Pi estiver online. Certifique-se de proteger seu Pi como ele está conectado ao mundo agora.
Se o seu B estiver conectado a uma rede IPv6, conecte-se diretamente ao Pi. Se B não estiver conectado a uma rede IPv6, use C como um servidor de salto, em que você se conecta por IPv4 a C e, em seguida, ssh por IPv6 de C a seu Pi.
fonte
Também dê uma olhada nisso:
A tecnologia usada é a mesma descrita na resposta aceita, mas usa alguns scripts para automatizar as coisas e tornar a solução mais genérica. Ele também faz as configurações completas dentro de um contêiner do Docker, para que o sistema principal esteja seguro caso algo seja comprometido.
No entanto, ele não fornece conexão automática de A a C, deve ser iniciado manualmente. Talvez você possa personalizar um pouco a solução para que ela faça exatamente o que você deseja.
fonte
Talvez você precise usar outro conceito que não seja ssh ou tunelamento. Sugiro que você use o conceito de mensagens como whatsapp ou telegrama. Mas acho que, se você quiser usar algo como o vim, não é tão bom quanto o ssh.
O telegrama possui um cliente telegram-cli que você pode modificar para aceitar e executar determinado comando e implementá-lo no raspi.
Se você usa o Telegram, pode simplificar sua rede e, pelo menos, reduzir a máquina C para executar o Hub, porque o servidor C está legendado com o servidor de mensagens de telegrama. Máquina também, você pode instalar o cliente de telegrama para um sistema operacional específico, se quiser .. segurança? a mensagem de telegrama está criptografada. Se alguém quiser fazer o ddo do seu raspi? eles ddos o servidor de telegrama primeiro ..
Desde que o seu raspi possa se conectar ao servidor de telegrama (simplesmente seu raspi se conecte à Internet), mesmo que o raspi esteja protegido por firewall / proxy / IP privado / IP dinâmico / dinâmico, você sempre poderá fazer o controle remoto.
Com esse conceito, você pode fazer o controle remoto em qualquer lugar, a qualquer hora.
fonte
Eu acho que você deve dar uma olhada no encaminhamento de porta ssh reversa. Em poucas palavras, você primeiro inicia um ssh de A para C usando a sintaxe abaixo e depois usa essa porta para voltar de C para A. Você não atingirá o firewall doméstico de A quando fizer isso porque o R-Pi já possui um tunel.
ssh -R 2210: localhost: 22 myCoolAwsSite.com
Por favor, considere ramificações de segurança quando fizer isso. Você pode adicionar algum cron jujitsu para que a conexão seja restabelecida após uma reinicialização.
fonte