Serveur x distant avec ssh -X


12

J'essaie de démarrer une session de gnome à distance en utilisant: ssh -X username@192.168.1.107 gnome-session

Le client et le serveur sont tous les deux Ubuntu version 12.04

Je reçois ce qui suit (et il ne se passe pas grand-chose) ...

GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
GNOME_KEYRING_PID=3573
GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
SSH_AUTH_SOCK=/tmp/keyring-3aeNAh/ssh
GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
SSH_AUTH_SOCK=/tmp/keyring-3aeNAh/ssh

(gnome-settings-daemon:3572): color-plugin-WARNING **: failed to get contents of /sys/class/dmi/id/board_version: Failed to open file '/sys/class/dmi/id/board_version': No such file or directory

** (gnome-settings-daemon:3572): WARNING **: You can only run one xsettings manager at a time; exiting

** (gnome-settings-daemon:3572): WARNING **: Unable to start xsettings manager: Could not initialize xsettings manager.
compiz (core) - Error: Screen 0 on display "localhost:10.0" already has a window manager; try using the --replace option to replace the current window manager.
Initializing nautilus-gdu extension
Created new window in existing browser session.
** Message: applet now removed from the notification area
** Message: using fallback from indicator to GtkStatusIcon

(gnome-settings-daemon:3572): keyboard-plugin-WARNING **: Failed to set the keyboard layouts: GDBus.Error:org.freedesktop.Accounts.Error.PermissionDenied: Not authorized

** (gnome-settings-daemon:3572): WARNING **: Failed to connect context: Connection refused

(gnome-settings-daemon:3572): clipboard-plugin-WARNING **: Clipboard manager is already running.

(gnome-settings-daemon:3572): color-plugin-WARNING **: failed to create device: GDBus.Error:org.freedesktop.ColorManager.Failed: failed to obtain org.freedesktop.color-manager.create-device auth

(gnome-settings-daemon:3572): color-plugin-WARNING **: GDBus.Error:org.freedesktop.ColorManager.Failed: failed to obtain org.freedesktop.color-manager.create-profile auth

(gnome-settings-daemon:3572): color-plugin-WARNING **: no xrandr-Samsung Electric Company-SAMSUNG device found: Failed to find output xrandr-Samsung Electric Company-SAMSUNG
Shutting down nautilus-gdu extension

** (gnome-settings-daemon:3572): WARNING **: Failed to connect context: Connection refused
Connection failure: Connection refused
pa_context_connect() failed: Connection refused

Je voulais accéder à distance à une machine Ubuntu utilisée comme serveur / lecteur multimédia sans changer ce qui se passe sur l'écran de la machine distante. De plus, je voulais juste jouer avec ce truc pour voir ce qu'il pouvait faire. :-)
benlad

1
Si vous voulez jouer, j'ai entré une réponse avec quelques conseils pour utiliser ssh de base à partir d'une ligne de commande, y compris la génération d'une clé et sa copie sur l'hôte distant. Une fois que vous aurez appris à utiliser ssh, vous serez peut-être surpris de voir ce qui peut être fait pour l'utiliser.
Marty Fried

Réponses:


12

Je suppose que ce que vous essayez de faire est de démarrer une session Gnome distante complète qui s'affiche sur votre machine locale. Cela échoue car vous disposez déjà d'un gestionnaire de session local contrôlant l'affichage de votre serveur X.

Vos options sont:

  1. Démarrez simplement des applications distantes individuelles à l'aide de ssh -X user@192.168.1.107 xclock

  2. En supposant que XDMCP est activé sur la machine distante ...

    2a. Permet Xnest -query 192.168.1.107 -geometry 1024x768 :1de démarrer une session de connexion à distance dans une fenêtre locale.

    2b. Utilisez Xephyr :1 -screen 1024x768 -query 192.168.1.107ce qui est un meilleur serveur X queXnest

  3. En supposant également XDMCP sur la machine distante, configurez votre machine locale pour utiliser le sélecteur XDMCP au lieu de l'accueilleur standard au démarrage.

L'activation de XDMCP consiste simplement à mettre

[xdmcp]
Enable=true

dans /etc/gdm/custom.confet redémarrer gdmou redémarrer ( en supposant que vous utilisez gdm).

Si vous ne souhaitez exécuter que quelques applications à distance, l'option 1 est la plus simple et continue d'utiliser le trafic chiffré SSH, ce qu'aucun des autres ne fait (il est donc préférable de les utiliser uniquement sur un réseau local de confiance).

Si vous avez besoin de quelque chose de plus compliqué, alors 2b (Xephyr) est peut-être mieux, mais j'ai généralement trouvé que l'utilisation ssh -X ... &de plusieurs applications distantes était adéquate.

Si vous faites tout à distance, c'est-à-dire que la machine locale n'est qu'un serveur d'affichage et ne fait rien elle-même, alors vous devez examiner l'option 3, en démarrant le sélecteur XDMCP au lieu de la connexion standard.


PS: Comme indiqué dans les commentaires, les deux Xnestet Xephyrsont des applications qui gèrent le protocole du serveur X et mettent la session entière dans une fenêtre. Xnestutilise les fonctions fournies par le serveur X local tout en Xephyrgérant beaucoup plus le protocole du serveur lui-même, il est donc plus robuste. Ils peuvent ne pas être installés par défaut car l'utilisateur moyen ne les utiliserait pas.


PPS: Après un peu de réflexion, il est évident de chiffrer une session Xephyrou Xnest...

ssh -X username@192.168.1.107 Xephyr :1 -query localhost -screen 1280x1024

1
Cela pourrait être utile pour indiquer ce que font Xnest / Xephyr et pourquoi, comme ils ne sont pas installés par défaut, je ne pense pas. Je n'ai jamais trouvé besoin d'utiliser xdmcp, donc je n'en ai aucune idée moi-même. J'utilise simple à ssh -Ypartir d'un terminal, puis exécute ce dont j'ai besoin à partir de là.
Marty Fried

@MartyFried: Il semble que les deux sont des serveurs X qui peuvent fonctionner dans une fenêtre. Il semble que l'utilisateur veuille X-forward une session / affichage entier. Personnellement, je voudrais simplement utiliser VNC, ce qui crée un nouvel affichage sur le serveur X existant et évite les maux de tête.
ish

@izx: J'ai utilisé VNC dans le passé pour les systèmes Windows, mais avec deux systèmes Ubuntu, j'aime généralement le ssh intégré, bien que je sois parfois confus lors de l'exécution d'applications GUI, car il est difficile de différencier les applications locales des applications distantes. Mais pour ce que je fais (principalement la modification ou l'administration d'un serveur), cela semble fonctionner le mieux.
Marty Fried

1
@MartyFried L'inconvénient de VNC est que vous contrôlez simplement l'affichage de la machine distante. Vous ne pouvez donc pas avoir un utilisateur connecté sur cet écran avec un autre utilisateur connecté à distance. Les solutions XDMCP créent des sessions complètement séparées permettant à 2 utilisateurs ou plus d'utiliser la même machine.
StarNamer

Votre solution 2b a fonctionné un régal. J'ai essayé la version ssh, mais j'ai eu un problème avec les clés ssh. Le message est trop long pour être publié ici. Je vais utiliser la méthode qui fonctionne pour l'instant.
benlad

0

Au cas où vous voudriez apprendre à utiliser le ssh standard à partir d'un terminal, je pensais que je vous donnerais un bref aperçu, car vous avez eu du mal à utiliser les clés ssh, semble-t-il. L'avantage est qu'il est plus universel et très flexible.

Pour utiliser les clés ssh, qui sont plus sécurisées, parfois nécessaires et plus pratiques car vous n'avez besoin de saisir la clé qu'une seule fois, vous devez le faire une fois pour tout serveur ssh distant:

générer une clé (peut utiliser dsa au lieu de rsa, si nécessaire)

ssh-keygen -t rsa    

transférer la clé vers l'hôte distant

ssh-copy-id <username>@<host>

si ce n'est pas le port standard 22, utilisez ceci: notez les guillemets autour de l'argument

ssh-copy-id "<username>@<host> -p <port_nr>"

Si vous utilisez dsa, il existe une commande légèrement différente, ajoutant -i <homedirectory>/.ssh/id_dsa

Quelque part après cela, vous devrez entrer un mot de passe, qui est distinct de votre mot de passe de connexion normal. Cela fait un moment et j'ai oublié la séquence exacte, mais cela devrait être évident. Ensuite, la première fois que vous vous connectez, il vous sera demandé une fois ce mot de passe. J'utilise le même nom de connexion, donc je n'ai pas besoin d'entrer le nom d'utilisateur (il suppose la même chose que le nom d'utilisateur distant). En outre, pour les serveurs de votre réseau local, vous pouvez entrer ".local" au lieu de l'adresse IP, je crois (fonctionne pour moi).

Vous pouvez même monter un système de fichiers distant en utilisant sshfs (en supposant que sshfs est installé); substituez un chemin de répertoire à local-mount-directory:

sshfs remote-host: local-mount-directory

(démonter avec fusermount -u local-mount-directory)

Je pense qu'il utilisera votre répertoire personnel par défaut, si vous laissez le répertoire local-mount. "

La copie de fichiers peut être effectuée avec scp.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.