AIX - Pas moyen de faire du X11 forwarding

Salut les gros barbus,

Je suis en train de décéder sur le problème suivant au boulot:
J’ai un laptop sous Windows 10 avec Bash on Windows dessus, j’y ai installé un serveur X11 (VcXsrv). Quand je lance un xclock depuis mon bash, ça répond bien. Ma config est la suivante:
Host *
XAuthLocation /usr/bin/xauth
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
# RhostsRSAAuthentication no
# RSAAuthentication yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
Port 22
Protocol 2,1
# Cipher 3des
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no

En local:
$ echo $DISPLAY
localhost:0.0

Donc jusque là tout va bien… Le problème est que je dois me connecter sur un AIX 7.2 et lancer un putain d’installateur graphique et là ça coince.
Depuis mon laptop:
ssh -XY _user_@_server_ip_
Première emmerde:
Warning: No xauth data; using fake authentication data for X11 forwarding.

La config SSH du serveur:
Host *
XAuthLocation /usr/bin/X11/xauth
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
# RhostsRSAAuthentication no
# RSAAuthentication yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
Port 22
Protocol 2,1
# Cipher 3des
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
UseRoaming no

Quand je suis connecté sur le serveur en SSH donc, voici ce qui se passe:

$ which xauth
/usr/bin/X11/xauth
$ echo $DISPLAY
laptop_name:0.0
$ xclock
  _X11TransSocketINETConnect() can't get address for laptop_name:6000: Hostname and service name not provided or found
Error: Can't open display: laptop_name:0.0
$ export DISPLAY=laptop_ip:0.0
$ xclock
Error: Can't open display: laptop_ip:0.0

J’ai donc l’impression que le protocole bloque car il ne trouve pas mon laptop, mais je pensais que tout l’intérêt du X11 forwarding est qu’il passe par le port du SSH et donc n’est pas bloqué au niveau réseau?! Quel est le fuck?

À l’aide les gens, please :’(:’(

L’erreur est claire non? je ne connais pas de machine qui s’appelle laptop_name
Deux choix:
_Soit tu modifie a la main ta variable DISPLAY et tu lui colles une IP
_Soit tu rajoutes a la main ton laptop_name dans /etc/hosts.

Après, t’auras peut être d’autres problèmes, comme un firewall reloud sur laptop_name mais c’est un autre débat :sweat_smile:

Ah ah non c’est moi qui ai remplacé le vrai machine name et la vraie IP par ça dans mon post, tu penses bien que j’ai pas laissé un bête name comme ça :smiley: J’ai voulu les mettre en italique dans mon post, mais à l’intérieur de la balise code ça marche pas

au temps pour moi, j’ai pas vu la suite, je suis resté bloqué sur l’erreur de nom.

iptables -L -vn

Ca donne quoi (sur ton laptop)?

Aïe, iptables n’est pas dispo sur le bash on windows (sur AIX non plus, d’ailleurs, ou en tout cas il n’est pas installé).

Par contre, sur le serveur, en checkant la variable SSH_CLIENT, je vois bien que j’utilise la bonne IP pour le laptop

J’ai lu un peu vite donc tu l’as peut être fait, mais ton serveur pingue bien ton laptop, et vice versa ?
Firewall windows désactivé ? pas de firewall entre les deux ?

Non ça ping pas, je pense qu’ils ont bloqué la fonction, et pas mal de ports aussi. Mais je peux faire du SSH, donc le X11 devrait fonctionner en mode forwarding… non?

Ce problème la est réglé ou pas?
Tu peux aussi suivre cette doc pour voir si tout est ok:
http://dustwell.com/how-x-over-ssh-really-works.html

1 « J'aime »

Ca c’est pas bon, là tu lui demande de se connecter directement à ton portable, sans passer par ton SSH. Normalement tu n’as pas besoin de toucher à la variable $DISPLAY toi même, c’est ton serveur ssh qui doit la configurer correctement au moment de la connexion.
Si dans ton bash_rc ou équivalent tu met à jour cette variable, tu vas écraser la bonne valeur qui doit être du type “localhost:10.0” ou “:10.0” ou équivalent.

Ton serveur est à jour ou c’est un vieux truc ?
Est-ce que tu peux donner le résultats de ces commandes là :

    $ sysctl net.ipv6.conf.all.disable_ipv6
    $ openssl version
    $ /usr/sbin/sshd -ddd

/edit :

Warning: No xauth data; using fake authentication data for X11 forwarding.

Ça c’est pas grave, le -Y permet de le contourner (si t’as confiance dans le serveur en question).

Effectivement je m’étais un peu emmelé les pinceaux à un moment, DONC:
J’ai viré les variables DISPLAY sur le laptop et le serveur.
Si je laisse DISPLAY vide sur le laptop jai le résultat suivant:

DISPLAY “(null)” invalid; disabling X11 forwarding

Si je mets, toujours sur le laptop, la variable DISPLAY à :0.0, alors je reviens sur le premier message d’erreur:

Warning: No xauth data; using fake authentication data for X11 forwarding.

Par rapport aux commandes demandées, voici l’output:

sysctl net.ipv6.conf.all.disable_ipv6
ksh: sysctl:  not found.
openssl version
OpenSSL 1.0.2j  26 Sep 2016
/usr/bin/sshd -ddd
ksh: /usr/bin/sshd:  not found.
which sshd
/usr/sbin/sshd
/usr/sbin/sshd -ddd
debug2: load_server_config: filename /etc/ssh/sshd_config
debug2: load_server_config: done config len = 770
debug2: parse_server_config: config /etc/ssh/sshd_config len 770
debug3: /etc/ssh/sshd_config:19 setting Protocol 2
debug2: /etc/ssh/sshd_config line 19: Deprecated option Protocol
debug3: /etc/ssh/sshd_config:24 setting HostKey /etc/ssh/ssh_host_rsa_key
debug3: /etc/ssh/sshd_config:25 setting HostKey /etc/ssh/ssh_host_dsa_key
debug3: /etc/ssh/sshd_config:27 setting KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256
debug3: kex names ok: [curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256]
debug3: /etc/ssh/sshd_config:35 setting SyslogFacility AUTH
debug3: /etc/ssh/sshd_config:36 setting LogLevel INFO
debug3: /etc/ssh/sshd_config:42 setting PermitRootLogin no
debug3: /etc/ssh/sshd_config:43 setting IgnoreRhosts yes
debug3: /etc/ssh/sshd_config:44 setting StrictModes yes
debug3: /etc/ssh/sshd_config:45 setting MaxAuthTries 5
debug3: /etc/ssh/sshd_config:47 setting PermitEmptyPasswords no
debug3: /etc/ssh/sshd_config:48 setting RhostsAuthentication no
/etc/ssh/sshd_config line 48: Deprecated option RhostsAuthentication
debug3: /etc/ssh/sshd_config:52 setting AuthorizedKeysFile .ssh/authorized_keys
debug3: /etc/ssh/sshd_config:55 setting RhostsRSAAuthentication no
/etc/ssh/sshd_config line 55: Deprecated option RhostsRSAAuthentication
debug3: /etc/ssh/sshd_config:92 setting AllowAgentForwarding yes
debug3: /etc/ssh/sshd_config:95 setting X11Forwarding yes
debug3: /etc/ssh/sshd_config:96 setting X11DisplayOffset 10
debug3: /etc/ssh/sshd_config:97 setting X11UseLocalhost no
debug3: /etc/ssh/sshd_config:100 setting TCPKeepAlive yes
debug3: /etc/ssh/sshd_config:116 setting banner /etc/ssh/sshd-banner
debug3: /etc/ssh/sshd_config:119 setting Subsystem sftp /usr/sbin/sftp-server
debug1: sshd version OpenSSH_7.5, OpenSSL 1.0.2j  26 Sep 2016
debug1: private host key #0: ssh-rsa SHA256:blablabla
debug1: private host key #1: ssh-dss SHA256:blablabla
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-ddd'
debug2: fd 3 setting O_NONBLOCK
debug1: Bind to port 22 on 0.0.0.0.
Bind to port 22 on 0.0.0.0 failed: The socket name is already in use..
debug2: fd 3 setting O_NONBLOCK
debug3: sock_set_v6only: set socket 3 IPV6_V6ONLY
debug1: Bind to port 22 on ::.
Bind to port 22 on :: failed: The socket name is already in use..
Cannot bind any address.

ça c’est étonnant parce que je lance ssh -XY user@server_ip et j’ai quand même le message de Warning!

Lis le papier que j’ai linké et vérifie notamment que le tunnel X est ouvert:
ps aux | grep {login}
Comme le dit @Merlin, tu ne devrais pas avoir le nom de ton laptop dans la variable DISPLAY mais soit rien, soit localhost - perso, j’étais parti sur une connexion X standard, en direct (qu’il est aussi possible de mettre en place avec ssh, qui n’utilise pas de tunnel ssl et qui, du coup, n’est pas sécurisé)

La papier précise bien qu’il faut avoir le path de xauth correctement configuré coté client, c’est a dire coté AIX pour toi.

Oui je suis tombé sur le même lien durant mes recherches avant de poster. Il est très bien fait d’ailleurs!

Donc je récapitule:

  1. SI je ne mets rien dans la variable DISPLAY de mon laptop
  • j’obtiens le message DISPLAY “(null)” invalid; disabling X11 forwarding
  • echo $DISPLAY renvoie rien
  • xclock renvoie Error: Can’t open display:
  1. Si je mets localhost:10 dans la variable DISPLAY de mon laptop
  • j’obtiens le message Warning: No xauth data; using fake authentication data for X11 forwarding.
  • echo $DISPLAY renvoie qq chsoe (du genre server.domain.com:10.0)
  • xclock renvoie Error: Can’t open display: server.domain.com:10.0

Le path de xauth a l’air ok car le ps aux me montre bien que le user a un process du genre /usr/bin/X11/x ouvert

oula. Ok, non, on reprends :slight_smile:

Tu peux avoir /usr/bin/X11/x ouvert sur ton laptop, ie TON SERVEUR.
le ps aux est a faire sur le client, a savoir l’AIX, et on s’occupe que de sshd. S’il y a un X actif sur l’AIX, c’est possible mais ca ne vient pas de toi.

Je t’invite quand meme a te delog de ton laptop, de te relog en X, de ne PAS TOUCHER a DISPLAY une fois que t’as X activé et de retenter un ssh -X.
J’ai l’impression qu’on parle pas le même langage et ca va être très compliqué a dépatouiller tout ca.

1/ La variable DISPLAY elle doit bien être à :0.0 sur le laptop et si tu lance ton xclock local sur le laptop ça doit fonctionner.

2/ Sur le serveur SSH (AIX), là tu ne dois pas toucher à la variable display, vérifie dans ton bash_rc, .profile ou équivalent selon le shell que tu utilises que tu n’a pas “export DISPLAY=quelquechose”

3/ A priori tu as bien xauth qui tourne et le message d’alerte que tu as ne concerne que l’authentification mais c’est normal, le fait de mettre “-Y” comme paramètre lors de la connexion lui permet de lui dire que tu as confiance dans ta connexion (ton ssh fait déjà le job d’authentification) et que du coup c’est ok pour toi.

4/ la commande sysctl n’a pas marché, c’est AIX, je connais moins, est-ce que tu peux vérifier si l’IPv6 est activé ? Il y a un bug dans les vielles versions d’OpenSSL qui fout la merde quand l’IPv6 est désactivé (ta version est concernée). Si tu as l’IPv6 désactivé alors il faudra ajouter “AddressFamily inet” dans le sshd_config de l’AIX.

5/ Si tout va bien quand tu te connecte sur le AIX, il va tout seul remplir la variable $DISPLAY avec un truc du genre “:10.”

6/ Lorsque tu te connecte en ssh ajoute -v pour avoir les sorties de debug, il y aura des messages d’erreur en plus ça va nous aider.

Lol, c’est le petit coté magique de X ;

Pour @Lupuss :

  • Serveur SSH : C’est ton AIX
  • Client SSH : C’est ton laptop
  • Serveur X : C’est ton laptop, c’est lui le serveur car c’est lui qui fait tourner un programme qui va gérer les fenêtres
  • Client X : C’est le programme que tu essaye d’ouvrir sur ton AIX (xcalc), ce programme va se connecter au serveur et lui envoyer les infos à afficher. Quand tu ouvres xclock sur ton laptop, alors xclock est un client local de ton serveur X aussi local, tout sur ton laptop.

Ah mais pour ça on est d’accord! Mon laptop est client pour SSH mais serveur pour X11. C’est vrai que j’ai écrit server_name par endroit car dans ma tête cette machine est le serveur sur lequel je dois installer des trucs, mais c’est le laptop qui fait tourner un serveur X.

Je réponds à tes questions dans un autre message.

Si on m’avait dit qu’un jour je serais payé pour faire du X… :ninja:

1 « J'aime »

Par rapport à tes questions / commentaires:

  1. oui ça fonctionne en « local »
  2. Non je n’ai pas d’endroit visible où c’est forcé
  3. OK
  4. Je vais regarder le fichier de config de ce pas!
  5. Je pense que c’est le cas vu que, selon ce que j’ai mis sur le laptop, $DISPLAY sur l’AIX ne me renvoie pas la même chose (donc a priori SSH le modifie bien)
  6. Je vais tester ça aussi!

En tout cas un GRAND MERCI pour votre aide :slight_smile:

Et donc voilà le résultat:
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to xxx.xxx.xxx.xx [xxx.xxx.xxx.xx] port 22.
debug1: Connection established.
debug1: identity file /home/lupuss/.ssh/identity type -1
debug1: identity file /home/lupuss/.ssh/identity-cert type -1
debug1: identity file /home/lupuss/.ssh/id_rsa type -1
debug1: identity file /home/lupuss/.ssh/id_rsa-cert type -1
debug1: identity file /home/lupuss/.ssh/id_dsa type -1
debug1: identity file /home/lupuss/.ssh/id_dsa-cert type -1
debug1: identity file /home/lupuss/.ssh/id_ecdsa type -1
debug1: identity file /home/lupuss/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/lupuss/.ssh/id_ed25519 type -1
debug1: identity file /home/lupuss/.ssh/id_ed25519-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.5
debug1: match: OpenSSH_7.5 pat OpenSSH* compat 0x04000000
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1-etm@openssh.com none
debug1: kex: client->server aes128-ctr hmac-sha1-etm@openssh.com none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA blablabla
debug1: Host ‹ xxx.xxx.xxx.xx › is known and matches the RSA host key.
debug1: Found key in /home/lupuss/.ssh/known_hosts:8
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received

Company Security Advisory Warning...

debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /home/lupuss/.ssh/identity
debug1: Trying private key: /home/lupuss/.ssh/id_rsa
debug1: Trying private key: /home/lupuss/.ssh/id_dsa
debug1: Trying private key: /home/lupuss/.ssh/id_ecdsa
debug1: Trying private key: /home/lupuss/.ssh/id_ed25519
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: password
user@xxx.xxx.xxx.xx's password:
debug1: Authentication succeeded (password).
Authenticated to xxx.xxx.xxx.xx ([xxx.xxx.xxx.xx]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
Warning: No xauth data; using fake authentication data for X11 forwarding.
debug1: Requesting X11 forwarding with authentication spoofing.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8

Avec malheureusement toujours l’erreur :frowning:
$ xclock
Error: Can’t open display: server.domain.com:10.0