Na verdade, não parece haver nenhuma maneira padrão de fazer.
Existe uma solução mais óbvia: a partir do namespace da rede, inicie um ssh
server e, em seguida, conecte-se a ele de qualquer máquina remota com a opção usual,
ssh -Y [email protected]
então qualquer programa gráfico pode ser iniciado no servidor X11 da máquina remota. Todos os tipos de variações sobre o mesmo tema, como vnc
, também funcionam.
Como alternativa , pode-se usar os instrumentos usuais: iptables
, netcat
, socat
. Aqui está uma maneira de fazer isso com socat
: o truque é que, enquanto os espaços localhost
no servidor e em seu novo namespace de rede foram separados, seus soquetes X11 unix não. Na verdade, a partir do namespace da rede, você pode abrir imediatamente os aplicativos gráficos que serão exibidos no servidor X de sua máquina principal. Assim, forçando o namespace da rede a gravar em um novo soquete unix em sua máquina pai, podemos redirecionar os dados enviados para o novo soquete para o servidor X cliente por meio do encaminhamento ssh X11 usual em a máquina do servidor, sem sequer ligar o novo espaço de rede, dando uma solução mais simples.
Isso é feito da seguinte maneira: no novo namespace de rede,
export DISPLAY=:1
Isso gravará em um novo soquete do Unix, /tmp/.X11-unix/X1
, que ainda não está conectado a nada. No cliente remoto, use o comando
socat exec:'ssh me@remoteserver socat unix-l\:/tmp/.X11-unix/X1 -' unix:/tmp/.X11-unix/X0
(observe o escape do : ). O comando acima envia a entrada do soquete unix/:1
no servidor para o soquete unix/:0
no cliente. Talvez seja necessário relaxar os controles xhost
locais (= no cliente) e verificar a propriedade do soquete unix/:1
(= :1
= /tmp/.X11-unix/X1
). Isso é consideravelmente mais simples que o método anterior: não há necessidade de configurar um servidor ssh no novo namespace da rede, nem mesmo de obter um endereço IP. Ele também ignora todos os problemas de autorização do X11, como usar xhost
para permitir que alguns usuários remotos ou o uso de cookies mágicos do MIT com socat
(nem sei se isso pode ser feito).
Existem outras maneiras de fazer isso (por exemplo, suprimindo a opção -nolisten tcp
no servidor cliente X, então use socat para encaminhar o soquete :1
unix para a porta TCP6000 do cliente, por exemplo), mas mesmo negligenciando que causam sérios problemas de segurança, eles não são padronizados por qualquer extensão de imaginação.