X11Forwarding usando SSH e Netcat

2

Em minha máquina, preciso conectar-me pelos nós A , B e C para alcançar target :

localhost -> A -> B -> C -> target

A máquina A está configurada para recusar X11 Forwarding , então acho que eu não deveria conseguir abrir interfaces gráficas via conexões passando por ssh A .

No entanto, configurando ~/.ssh/config file e adicionando ProxyCommand usando netcat , consegui abrir um aplicativo gráfico em target , simplesmente executando ssh -XY target . A configuração em ~/.ssh/config é a seguinte:

Host A
    Hostname domainA
Host B
    Hostname domainB
    ProxyCommand ssh A nc %h %p
Host C
    Hostname domainC
    ProxyCommand ssh B nc %h %p
Host target
    Hostname domain-target
    ProxyCommand ssh C nc %h %p

A conexão em si está funcionando, e estou muito bem com isso. Acontece, porém, eu não entendi realmente o que está acontecendo por trás das cortinas.

Quando executo ssh -XY target , o que realmente acontece, e por que é que consigo abrir a GUI por meio desse túnel , embora o host A não permita X11 Forwarding ?

Eu entendo que é bom mostrar algum esforço, então aqui vai o mais longe que consegui, tentando entender a execução acima. Eu substituí target por TARGET e hospedei C com HOST_C .

$ ssh -vXY TARGET
OpenSSH_6.2p2, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/rubens/.ssh/config
debug1: /home/rubens/.ssh/config line 20: Applying options for TARGET
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Executing proxy command: exec ssh HOST_C nc TARGET 22
debug1: permanently_drop_suid: 1000
debug1: identity file /home/rubens/.ssh/id_rsa type 1
debug1: identity file /home/rubens/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0,
    remote software version OpenSSH_5.9p1 Debian-5ubuntu1.1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA (some numbers...)
debug1: Host 'TARGET' is known and matches the RSA host key.
debug1: Found key in /home/rubens/.ssh/known_hosts:51
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/rubens/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Authenticated to TARGET (via proxy).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Requesting X11 forwarding with authentication spoofing.
Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-48-generic x86_64)
...
rubens@TARGET:~
$ # prompt, and I'm able to open graphical apps, like gkrellm

A conexão parece ocorrer primeiro com o host C , que precisa que as conexões anteriores ocorram (dependências de empilhamento recursivo para trás e resolvê-las na ordem LIFO).

No host A , que é o primeiro nível de conexão, a permissão X11Forward é aplicada? Ou simplesmente cria um túnel de nc conexões, até a máquina target , e retorna um soquete aberto que depois uso em algo como:

ssh -XY (open socket resulting from connections A->B->C->target)

Se sim, está tudo bem? Eu consigo me conectar com X11Forwarding ? Ou talvez haja algo errado com a configuração do host A ?

    
por Rubens 04.08.2013 / 23:28

1 resposta

2

O host A não encaminha conexões X11, o host C faz. Você se conecta ao host C e abre um aplicativo X11 (cliente) que é exibido em sua máquina local (servidor). A conexão é passada através dos nós intermediários A e B, mas isso não está relacionado ao encaminhamento do X que é configurado entre seu host local e o host C.

Nota: Você não precisa do netcat, já que usa o OpenSSH que possui a opção -W para essa finalidade.

    
por 05.08.2013 / 01:21