Como fazer X11 Forwarding com SSH 

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:

Instalar servidor SSH Windows

Squid Proxy Instalação e Configuração.

Instalar e configurar Servidor OpenVPN no PfSense

Instalar cliente OpenVPN em Windows 

Instalar Open VPN em Linux

https://ubuntuforums.org/showthread.php?t=2485719

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer