Nesse artigo, vamos mostrar como fazer o X11 Forwarding com SSH utilizando duas máquinas com Linux. Nosso objetivo é executar uma aplicação x11 em uma máquina remota.
Para esse experimento, imagine que você deseja usar o Firefox em uma máquina remota para acessar um site que está bloqueado em sua máquina.
Nesse caso, vamos usar o Firefox como exemplo de aplicação X11 que vamos fazer o Forwarding.
O cenário abaixo apresenta 2 máquinas e um site da internet. Nas duas máquinas, temos a máquina do cliente (MyPC) e a máquina com o servidor SSH (External PC).
Sugestão de cenário usando VirtualBox
Nesse cenário, vamos iniciar uma sessão SSH do (MyPC) para o (External PC). Uma vez iniciada a sessão SSH, vamos executar o Firefox.
No entanto, o Firefox que vai ser apresentado em nossa tela é o Firefox que está sendo executado dentro da máquina (External PC).
Dessa forma, usaremos o FIrefox do (External PC) para acessar uma página na Internet.
Abaixo apresentamos um cenário que pode ser replicado facilmente usando o VirtualBox. Nesse caso, vamos levantar duas máquinas virtuais no VirtualBox.
Na primeira máquina virtual (VM1), vamos instalar o servidor Openssh-server para que possamos acessá-la via SSH. Nessa primeira máquina, vamos utilizar duas interfaces do VirtualBox.
A primeira interface, da (VM1), usará o modo NAT e consequentemente vai poder acessar a Internet através da máquina real (hospedeira). A segunda interface , da (VM1), estará em modo rede interna “Internal Network” e será usada para conexão com a segunda máquina virtual (VM2).
Na segunda máquina virtual (VM2), usaremos apenas uma interface em modo “Internal Network” e será usada para conexão com a primeira máquina virtual (VM1).
Configurando o servidor SSH para permitir X11 Forwarding
Inicialmente vamos entrar no terminal da máquina que tem o servidor SSH instalado, o (External PC). Dentro do terminal, vamos editar o arquivo de configuração do servidor SSH. Para isso, vamos usar o comando abaixo.
sudo nano /etc/ssh/sshd_config
Dentro do arquivo “sshd_config”, vamos até o final do arquivo de configuração e vamos descomentar a linha X11Forwarding e vamos alterar para “X11Forwarding yes”.
X11Forwarding yes
Essa alteração na configuração vai permitir o X11 forwarding e consequentemente poderemos abrir aplicações gráficas do computador remoto em nossa máquina.
Depois vamos salvar e sair do editor nano usando os comandos “Ctrl + x” e depois “y” + ENTER.
Agora, precisamos reiniciar o servidor. Para isso, podemos usar os comandos abaixo.
sudo systemctl restart sshd
Se quiser pode usar um outro comando abaixo.
sudo service sshd restart
Configurando o cliente ssh para fazer X11 Forwarding
Agora vamos configurar o cliente (MyPC) para que possa fazer uma conexão SSH ao servidor (External PC).
Para isso, vamos executar a linha de comando abaixo usando a opção “-X” que indica ao SSH que vai ter uma sessão com X11 Forwarding.
ssh -X [email protected]
O comando acima indica que estamos fazendo uma sessão SSH com as características abaixo.
“-X” = estabelecendo uma sessão SSH com X11 Forwarding.
“redes11” = usuário que estamos usando para se conectar na máquina do servidor SSH (External PC).
“192.168.10.1” = IP da máquina do servidor SSH (External PC).
Depois de iniciar a sessão vamos entrar com senha do usuário e pressionar ENTER.
Executando uma aplicação X11
Agora que estamos dentro da máquina remota com a sessão SSH que estabelecemos acima. Vamos executar uma aplicação como por exemplo o Firefox.
Para isso, vamos executar o comando abaixo.
firefox
Podemos observar uma mensagem que diz “X11 connection rejected because of wrong authentication” e também que houve um erro que diz “Error: cannot open display“.
Como resolver “X11 connection rejected because of wrong authentication“.
Para resolver o erro “X11 connection rejected because of wrong authentication” vamos configurar uma variavel de ambiente permitindo executar aplicações que estão no snap.
export XAUTHORITY=$HOME/.Xauthority
Em seguida vamos executar o comando para abrir o firefox novamente.
firefox
Agora podemos abrir páginas nesse navegador e a origem da requisição das páginas será do IP do (External PC).
Abrindo um Jogo usando X11 forwarding
Outra possibilidade é abrir um jogo que está instalado apenas no computador remoto (External PC).
Se você ainda não se conectou no (External PC) com a opção “-X” , vamos nos conectar no PC remoto usando o comando abaixo.
ssh -X [email protected]
Em seguida, no terminal, vamos executar o comando para abrir o jogo pingus.
pingus
E veremos a tela inicial do pingus. Se desejar pode jogar que vale a pena.
Caso queria aprender mais sobre o tema, veja esses livros que podem te ajudar a entender melhor os conceitos de redes apresentados aqui.
Considerações sobre X11 Forwarding no SSH
Abaixo vamos fazer algumas considerações sobre o uso do X11 Forwarding no SSH para executar aplicações.
Considerações sobre bloqueios de sites e proxy
A primeira consideração que podemos fazer está relacionada ao uso de máquinas remotas para acesso ao conteúdo da Internet como por exemplo um navegador de uma máquina externa sendo usado para apresentar páginas em sua máquina.
Agora, vamos supor que se você tem um proxy que bloqueia alguns sites e permite tráfego SSH. Nesse caso, usuários da sua rede poderiam utilizar o SSH para fazer o X11 forwarding de uma VPS ou máquina remota para acessar páginas utilizando o navegador da máquina remota. Imagine o problema que seria detectar isso.
Observe que a dificuldade na detecção desse comportamento está diretamente ligada a criptografia usada no SSH.
Dessa forma, os dados que são enviados da máquina remota, como por exemplo a exposição do navegador, seria criptografado entre a máquina remota e a máquina de um usuário dentro da rede.
Considerações sobre aplicações como jogos
Agora, vamos imaginar que dentro de sua empresa os jogos estão proibidos. Nesse caso, usuários de sua empresa poderiam usar o X11 Forwarding para jogar jogos que estão instalados em uma máquina remota ou em uma VPS e não precisariam instalar o jogo na máquina da empresa.
E vale lembrar que os dados que são enviados da máquina remota, como por exemplo o conteúdo do jogo, seria criptografado entre a máquina remota e a máquina de um usuário dentro da rede.
Dessa forma, dificultando a identificação do comportamento na rede.
Veja mais:
Squid Proxy Instalação e Configuração.
Instalar e configurar Servidor OpenVPN no PfSense
Instalar cliente OpenVPN em Windows
https://ubuntuforums.org/showthread.php?t=2485719
Juliana Mascarenhas
Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer
Tutorial Instalar VNC em Linux Ubuntu
O acesso remoto é uma ferramenta indispensável para administradores e usuários que precisam gerenciar servidores…
Tutorial: Instale seu Servidor DNS no Linux com Bind9 Passo a Passo
Nesse tutorial vamos dar todo o passo a passo para que você instale uma configuração…
SSH: Como criar chave pública
Nesse tutorial vamos ensinar a criar e configurar o acesso a um servidor SSH usando…
Socket em Python criando chat UDP
Tutorial para a criação de um chat simples utilizando sockets em UDP em Python 3….
Socket em Python, criando um Chat
Tutorial para a criação de um chat simples utilizando sockets TCP em Python 3. O…
Como usar apt get com proxy
Ao longo dos tempos sempre me deparo nos laboratórios de rede com a necessidade de…